From e72b102d0841cf9694aa273c31ee44b78a8664d9 Mon Sep 17 00:00:00 2001 From: Fabien Potencier Date: Mon, 31 Jan 2022 11:59:34 +0100 Subject: [PATCH] Add hooks for some Platform.sh commands (#75) --- commands/local_var_expose.go | 2 +- commands/platformsh.go | 10 ++++++++ commands/platformsh_hooks.go | 44 ++++++++++++++++++++++++++++++++++++ 3 files changed, 55 insertions(+), 1 deletion(-) create mode 100644 commands/platformsh_hooks.go diff --git a/commands/local_var_expose.go b/commands/local_var_expose.go index 257262d1..18b9f0e1 100644 --- a/commands/local_var_expose.go +++ b/commands/local_var_expose.go @@ -53,7 +53,7 @@ var localVariableExposeFromTunnelCmd = &console.Command{ tunnel := envs.Tunnel{Project: project} if c.Bool("off") { - terminal.Eprintln("Stop exposing tunnel service environment variables ") + terminal.Eprintln("Stop exposing tunnel service environment variables") return tunnel.Expose(false) } diff --git a/commands/platformsh.go b/commands/platformsh.go index ada2e9cb..fa5da9ff 100644 --- a/commands/platformsh.go +++ b/commands/platformsh.go @@ -58,6 +58,10 @@ func NewPlatformShCLI() (*platformshCLI, error) { &console.BoolFlag{Name: "no", Aliases: []string{"n"}}, &console.BoolFlag{Name: "yes", Aliases: []string{"y"}}, ) + if _, ok := platformshBeforeHooks[command.FullName()]; !ok { + // do not parse flags if we don't have hooks + command.FlagParsing = console.FlagParsingSkipped + } p.Commands = append(p.Commands, command) } return p, nil @@ -98,6 +102,12 @@ func (p *platformshCLI) proxyPSHCmd(commandName string) console.ActionFunc { } } + if hook, ok := platformshBeforeHooks[commandName]; ok { + if err := hook(c); err != nil { + return err + } + } + args := os.Args[1:] for i := range args { if args[i] == c.Command.UserName { diff --git a/commands/platformsh_hooks.go b/commands/platformsh_hooks.go new file mode 100644 index 00000000..0471e515 --- /dev/null +++ b/commands/platformsh_hooks.go @@ -0,0 +1,44 @@ +package commands + +import ( + "github.com/symfony-cli/console" + "github.com/symfony-cli/symfony-cli/envs" + "github.com/symfony-cli/symfony-cli/local/platformsh" + "github.com/symfony-cli/terminal" +) + +var platformshBeforeHooks = map[string]console.BeforeFunc{ + "tunnel:close": func(c *console.Context) error { + terminal.Eprintln("Stop exposing tunnel service environment variables") + + app := c.String("app") + env := c.String("environment") + var project *platformsh.Project + projectID := c.String("project") + if projectID == "" { + projectDir, err := getProjectDir(c.String("dir")) + if err != nil { + return err + } + project, err = platformsh.ProjectFromDir(projectDir, false) + if err != nil { + return err + } + if app != "" { + project.App = app + } + if env != "" { + project.Env = env + } + } else { + project = &platformsh.Project{ + ID: projectID, + App: app, + Env: env, + } + } + + tunnel := envs.Tunnel{Project: project} + return tunnel.Expose(false) + }, +}