From 575ba5d5bd0225dccfc814951648e1dbb2854be9 Mon Sep 17 00:00:00 2001 From: Nightapes Date: Mon, 6 Jan 2020 17:41:10 +0100 Subject: [PATCH] fix(hooks): improve cmd execution --- cmd/go-semantic-release/commands/hooks.go | 67 +++++++++++++++++++++++ internal/hooks/hooks.go | 12 +++- 2 files changed, 76 insertions(+), 3 deletions(-) create mode 100644 cmd/go-semantic-release/commands/hooks.go diff --git a/cmd/go-semantic-release/commands/hooks.go b/cmd/go-semantic-release/commands/hooks.go new file mode 100644 index 0000000..4372c87 --- /dev/null +++ b/cmd/go-semantic-release/commands/hooks.go @@ -0,0 +1,67 @@ +package commands + +import ( + "fmt" + + "github.com/Nightapes/go-semantic-release/internal/hooks" + "github.com/Nightapes/go-semantic-release/pkg/semanticrelease" + log "github.com/sirupsen/logrus" + "github.com/spf13/cobra" +) + +func init() { + rootCmd.AddCommand(hooksCmd) +} + +var hooksCmd = &cobra.Command{ + Use: "hooks", + Short: "Run all hooks", + RunE: func(cmd *cobra.Command, args []string) error { + config, err := cmd.Flags().GetString("config") + if err != nil { + return err + } + + repository, err := cmd.Flags().GetString("repository") + if err != nil { + return err + } + + force, err := cmd.Flags().GetBool("no-cache") + if err != nil { + return err + } + + ignoreConfigChecks, err := cmd.Flags().GetBool("no-checks") + if err != nil { + return err + } + + releaseConfig := readConfig(config) + + s, err := semanticrelease.New(releaseConfig, repository, !ignoreConfigChecks) + if err != nil { + return err + } + + provider, err := s.GetCIProvider() + + if err != nil { + return err + } + + releaseVersion, err := s.GetNextVersion(provider, force) + if err != nil { + return err + } + + hook := hooks.New(releaseConfig, releaseVersion) + + err = hook.PreRelease() + if err != nil { + return err + } + + return hook.PostRelease() + }, +} diff --git a/internal/hooks/hooks.go b/internal/hooks/hooks.go index 1b51195..098ea2a 100644 --- a/internal/hooks/hooks.go +++ b/internal/hooks/hooks.go @@ -3,6 +3,7 @@ package hooks import ( "bufio" "os/exec" + "runtime" "strings" "github.com/Nightapes/go-semantic-release/internal/shared" @@ -51,9 +52,14 @@ func (h *Hooks) PostRelease() error { func (h *Hooks) runCommand(command string) error { - splittedCmd := strings.Split(strings.ReplaceAll(command, "$RELEASE_VERSION", h.version.Next.Version.String()), " ") + cmdReplaced := strings.ReplaceAll(command, "$RELEASE_VERSION", h.version.Next.Version.String()) - cmd := exec.Command(splittedCmd[0], splittedCmd[1:]...) + var cmd *exec.Cmd + if runtime.GOOS == "windows" { + cmd = exec.Command("cmd.exe", "/C", cmdReplaced) + } else { + cmd = exec.Command("sh", "-c", cmdReplaced) + } cmdReader, err := cmd.StdoutPipe() if err != nil { @@ -63,7 +69,7 @@ func (h *Hooks) runCommand(command string) error { scanner := bufio.NewScanner(cmdReader) go func() { for scanner.Scan() { - log.WithField("cmd", splittedCmd[0]).Infof("%s\n", scanner.Text()) + log.WithField("cmd", strings.Fields(cmdReplaced)[0]).Infof("%s\n", scanner.Text()) } }()