diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d7d960b..9761882 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -35,9 +35,12 @@ jobs: - name: Build Docker image if: github.ref != 'refs/heads/master' run: | - docker build -t nightapes/go-semantic-release:development . docker login -u nightapes -p ${{ secrets.DOCKER_PASSWORD }} + docker login -u nightapes -p ${{ secrets.GITHUB_TOKEN }} docker.pkg.github.com + docker build -t nightapes/go-semantic-release:development . docker push nightapes/go-semantic-release:development + docker tag nightapes/go-semantic-release:development docker.pkg.github.com/nightapes/go-semantic-release/go-semantic-release:development + docker push docker.pkg.github.com/nightapes/go-semantic-release/go-semantic-release:development - name: Push Docker image if: github.ref != 'refs/heads/master' @@ -48,4 +51,5 @@ jobs: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | docker login -u nightapes -p ${{ secrets.DOCKER_PASSWORD }} + docker login -u nightapes -p $GITHUB_TOKEN docker.pkg.github.com ./build/go-semantic-release-temp release --loglevel trace diff --git a/.release.yml b/.release.yml index 64892da..12da15b 100644 --- a/.release.yml +++ b/.release.yml @@ -17,7 +17,9 @@ changelog: hooks: preRelease: - docker build -t nightapes/go-semantic-release:latest . - - docker build -t nightapes/go-semantic-release:$RELEASE_VERSION . + - docker tag nightapes/go-semantic-release:latest docker.pkg.github.com/nightapes/go-semantic-release/go-semantic-release:$RELEASE_VERSION + - docker tag nightapes/go-semantic-release:latest nightapes/go-semantic-release:$RELEASE_VERSION postRelease: - docker push nightapes/go-semantic-release:latest - docker push nightapes/go-semantic-release:$RELEASE_VERSION + - docker push docker.pkg.github.com/nightapes/go-semantic-release/go-semantic-release:$RELEASE_VERSION diff --git a/README.md b/README.md index 4ebe426..8179525 100644 --- a/README.md +++ b/README.md @@ -2,12 +2,12 @@ ## Release Types -| Type | Implemendet | Git tag | Changelog | Release | Write access git | Api token | -| ---------- | :----------------: | :----------------: | :----------------: | :----------------: | :----------------: | :----------------: | -| `github` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | | :white_check_mark: | -| `gitlab` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | | :white_check_mark: | -| `git` | :white_check_mark: | :white_check_mark: | | | :white_check_mark: | | -| `bitbuckt` | Comming soon | :white_check_mark: | | | :white_check_mark: | | +| Type | Implemendet | Git tag | Changelog | Release | Write access git | Api token | +| ----------- | :----------------: | :----------------: | :----------------: | :----------------: | :----------------: | :----------------: | +| `github` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | | :white_check_mark: | +| `gitlab` | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | | :white_check_mark: | +| `git` | :white_check_mark: | :white_check_mark: | | | :white_check_mark: | | +| `bitbucket` | Comming soon | :white_check_mark: | | | :white_check_mark: | | ## Supported CI Pipelines diff --git a/cmd/go-semantic-release/commands/hooks.go b/cmd/go-semantic-release/commands/hooks.go new file mode 100644 index 0000000..ef21554 --- /dev/null +++ b/cmd/go-semantic-release/commands/hooks.go @@ -0,0 +1,64 @@ +package commands + +import ( + "github.com/Nightapes/go-semantic-release/internal/hooks" + "github.com/Nightapes/go-semantic-release/pkg/semanticrelease" + "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/gitutil/gitutil.go b/internal/gitutil/gitutil.go index ca0c8c9..4ca9d02 100644 --- a/internal/gitutil/gitutil.go +++ b/internal/gitutil/gitutil.go @@ -90,7 +90,7 @@ func (g *GitUtil) GetLastVersion() (*semver.Version, string, error) { err = gitTags.ForEach(func(p *plumbing.Reference) error { v, err := semver.NewVersion(p.Name().Short()) - log.Tracef("Tag %+v with hash: %s", p.Target(), p.Hash()) + log.Tracef("Tag %+v with hash: %s", p.Name().Short(), p.Hash()) if err == nil { tags = append(tags, v) 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()) } }()