Skip to content

Commit

Permalink
fix: hook scripts should execute inside and outside a monorepo withou…
Browse files Browse the repository at this point in the history
…t being context aware (#195)
  • Loading branch information
purpleclay authored Dec 22, 2024
1 parent c2e8bb9 commit 68f9ff8
Show file tree
Hide file tree
Showing 9 changed files with 45 additions and 19 deletions.
20 changes: 15 additions & 5 deletions cmd/patch_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package cmd

import (
"io"
"os"
"testing"

"github.com/purpleclay/gitz/gittest"
Expand All @@ -14,18 +15,27 @@ func TestPatch(t *testing.T) {
(tag: 0.1.0) feat: distributed caching`
gittest.InitRepository(t,
gittest.WithLog(log),
gittest.WithCommittedFiles("VERSION"),
gittest.WithFileContent("VERSION", "0.1.0"),
gittest.WithCommittedFiles("Chart.yaml"),
gittest.WithFileContent("Chart.yaml", "version: 0.1.0"),
)

execFile(t, "patch-version.sh", `#!/bin/bash
echo -n $NSV_NEXT_TAG > VERSION`)
execFile(t, "patch.sh", `#!/bin/bash
sed -i "s/^version\: $NSV_PREV_TAG/version\: $NSV_NEXT_TAG/" "${NSV_WORKING_DIRECTORY}/Chart.yaml"`)

cmd := patchCmd(&Options{Out: io.Discard, Err: io.Discard, Logger: noopLogger})
cmd.SetArgs([]string{"--hook", "./patch-version.sh"})
cmd.SetArgs([]string{"--hook", "./patch.sh"})
err := cmd.Execute()
require.NoError(t, err)

logs := gittest.Log(t)
assert.Equal(t, "chore: patched files for release 0.2.0", logs[0].Message)
assert.Equal(t, "version: 0.2.0", readFile(t, "Chart.yaml"))
}

func readFile(t *testing.T, path string) string {
t.Helper()

contents, err := os.ReadFile(path)
require.NoError(t, err)
return string(contents)
}
2 changes: 1 addition & 1 deletion cmd/root.go
Original file line number Diff line number Diff line change
Expand Up @@ -138,7 +138,7 @@ func versionCmd(out io.Writer, buildInfo BuildDetails) *cobra.Command {
Short: "Print build time version information",
RunE: func(_ *cobra.Command, _ []string) error {
if short {
fmt.Fprintf(out, buildInfo.Version)
fmt.Fprint(out, buildInfo.Version)
return nil
}

Expand Down
8 changes: 4 additions & 4 deletions cmd/tag_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,9 @@ echo -n $NSV_NEXT_TAG > VERSION`)
}

func TestTagSkipsImpersonationIfGitConfigExists(t *testing.T) {
gittest.InitRepository(t)
gittest.InitRepository(t, gittest.WithStagedFiles("metric.go"))
gittest.ConfigSet(t, "user.name", "poison-ivy", "user.email", "[email protected]")
gittest.CommitEmptyWithAuthor(t, "scarecrow", "[email protected]", "feat: capture metrics for populating dashboards")
gittest.CommitWithAuthor(t, "scarecrow", "[email protected]", "feat: capture metrics for populating dashboards")

cmd := tagCmd(&Options{Out: io.Discard, Err: io.Discard, Logger: noopLogger})
err := cmd.Execute()
Expand All @@ -53,8 +53,8 @@ func TestTagSkipsImpersonationIfGitConfigExists(t *testing.T) {
}

func TestTagSkipsImpersonationIfGitEnvVarsExist(t *testing.T) {
gittest.InitRepository(t)
gittest.CommitEmptyWithAuthor(t, "penguin", "[email protected]", "feat(data): support data export from mongodb")
gittest.InitRepository(t, gittest.WithStagedFiles("export.go"))
gittest.CommitWithAuthor(t, "penguin", "[email protected]", "feat(data): support data export from mongodb")

t.Setenv("GIT_COMMITTER_NAME", "joker")
t.Setenv("GIT_COMMITTER_EMAIL", "[email protected]")
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ require (
github.com/muesli/roff v0.1.0
github.com/muesli/termenv v0.15.2
github.com/purpleclay/chomp v0.4.0
github.com/purpleclay/gitz v0.10.0
github.com/purpleclay/gitz v0.10.2
github.com/purpleclay/lipgloss-theme v0.2.0
github.com/saracen/walker v0.1.4
github.com/spf13/cobra v1.8.1
Expand Down
4 changes: 4 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,10 @@ github.com/purpleclay/chomp v0.4.0 h1:pOI23jVu1Y+lEqThxZcoPj2kCWp0YOvenC3o2wVPX8
github.com/purpleclay/chomp v0.4.0/go.mod h1:2G5jE5JN68ytZSjGLOE7QkXuFgtkNRk7b58trMmB/nc=
github.com/purpleclay/gitz v0.10.0 h1:tQVi339PD2E7IW+ntlaDfczcf+uB8BBEhJP++W83Db8=
github.com/purpleclay/gitz v0.10.0/go.mod h1:oh6nG1HVcaPw9RrYONUPNBsdt/WKaS0Pwi31doV/rDw=
github.com/purpleclay/gitz v0.10.1 h1:dQfOx+tqsowIRMYku7aA/NVNqsSN9joqG0CIHawysUg=
github.com/purpleclay/gitz v0.10.1/go.mod h1:oh6nG1HVcaPw9RrYONUPNBsdt/WKaS0Pwi31doV/rDw=
github.com/purpleclay/gitz v0.10.2 h1:fhkiQmozST30n9CZd/6YuLzhAYiiX8ochndYMKt3BA4=
github.com/purpleclay/gitz v0.10.2/go.mod h1:oh6nG1HVcaPw9RrYONUPNBsdt/WKaS0Pwi31doV/rDw=
github.com/purpleclay/lipgloss-theme v0.2.0 h1:46CP4xZgklAlB2LPIbP8OTTWltvcUTJv9EogVpeJtfw=
github.com/purpleclay/lipgloss-theme v0.2.0/go.mod h1:dKN3lm6yVAaQ4BHlLJEToOeuPfWw/msTuz6QgpLmoCE=
github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
Expand Down
2 changes: 1 addition & 1 deletion internal/nsv/semver.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ func resolveContext(gitc *git.Client, opts Options) (*gitContext, error) {
}

if relPath == git.RelativeAtRoot {
return &gitContext{TagPrefix: "", LogPath: ""}, nil
return &gitContext{TagPrefix: "", LogPath: relPath}, nil
}

logPath := relPath
Expand Down
22 changes: 17 additions & 5 deletions internal/nsv/semver_test.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package nsv_test

import (
"io"
"os"
"testing"

Expand All @@ -13,7 +12,7 @@ import (
"github.com/stretchr/testify/require"
)

var noopLogger = log.New(io.Discard)
var noopLogger = log.New(os.Stdout)

func TestNextVersion(t *testing.T) {
log := `(main, origin/main) docs: document new search improvements
Expand All @@ -25,11 +24,12 @@ ci: add parallel testing support to workflow`

next, err := nsv.NextVersion(gitc, nsv.Options{Logger: noopLogger})
require.NoError(t, err)
require.NotNil(t, next)

assert.Equal(t, "0.1.1", next.Tag)
assert.Equal(t, 1, next.Match.Index)
assert.Equal(t, "fix(search): search is not being aggregated correctly", next.Log[next.Match.Index].Message)
assert.Empty(t, next.LogDir)
assert.Equal(t, ".", next.LogDir)
}

func TestNextVersionFirstVersion(t *testing.T) {
Expand Down Expand Up @@ -62,6 +62,7 @@ func TestNextVersionFirstVersion(t *testing.T) {
next, err := nsv.NextVersion(gitc, nsv.Options{Logger: noopLogger})

require.NoError(t, err)
require.NotNil(t, next)
require.Equal(t, tt.expected, next.Tag)
})
}
Expand All @@ -76,7 +77,8 @@ func TestNextVersionMajorZeroSemV(t *testing.T) {
next, err := nsv.NextVersion(gitc, nsv.Options{Logger: noopLogger})

require.NoError(t, err)
require.Equal(t, "0.2.0", next.Tag)
require.NotNil(t, next)
assert.Equal(t, "0.2.0", next.Tag)
}

func TestNextVersionMajorZeroSemVForceMajor(t *testing.T) {
Expand All @@ -89,7 +91,8 @@ nsv:force~major
next, err := nsv.NextVersion(gitc, nsv.Options{Logger: noopLogger})

require.NoError(t, err)
require.Equal(t, "1.0.0", next.Tag)
require.NotNil(t, next)
assert.Equal(t, "1.0.0", next.Tag)
}

func TestNextVersionIncludesSubDirectoryAsPrefix(t *testing.T) {
Expand All @@ -106,6 +109,7 @@ func TestNextVersionIncludesSubDirectoryAsPrefix(t *testing.T) {
next, err := nsv.NextVersion(gitc, nsv.Options{Logger: noopLogger})

require.NoError(t, err)
require.NotNil(t, next)
assert.Equal(t, "search/0.1.0", next.Tag)
}

Expand All @@ -120,6 +124,8 @@ feat(search): add ability to search across processed data`

next, err := nsv.NextVersion(gitc, nsv.Options{Path: "src/processor", Logger: noopLogger})
require.NoError(t, err)
require.NotNil(t, next)

assert.Equal(t, "processor/0.1.0", next.Tag)
assert.Equal(t, "src/processor", next.LogDir)
}
Expand Down Expand Up @@ -154,6 +160,7 @@ ci: configure workflow to run benchmarks
next, err := nsv.NextVersion(gitc, nsv.Options{Logger: noopLogger})

require.NoError(t, err)
require.NotNil(t, next)
require.Equal(t, tt.expected, next.Tag)
})
}
Expand All @@ -167,6 +174,7 @@ func TestNextVersionFromPrerelease(t *testing.T) {

next, err := nsv.NextVersion(gitc, nsv.Options{Logger: noopLogger})
require.NoError(t, err)
require.NotNil(t, next)
assert.Equal(t, "0.2.0", next.Tag)
}

Expand All @@ -179,6 +187,7 @@ nsv:pre~alpha

next, err := nsv.NextVersion(gitc, nsv.Options{Logger: noopLogger})
require.NoError(t, err)
require.NotNil(t, next)
assert.Equal(t, "0.3.0-alpha.1", next.Tag)
}

Expand All @@ -192,6 +201,7 @@ nsv:pre`

next, err := nsv.NextVersion(gitc, nsv.Options{Logger: noopLogger})
require.NoError(t, err)
require.NotNil(t, next)
assert.Equal(t, "0.2.0-beta.2", next.Tag)
}

Expand All @@ -207,6 +217,7 @@ nsv:pre~beta`

next, err := nsv.NextVersion(gitc, nsv.Options{Logger: noopLogger})
require.NoError(t, err)
require.NotNil(t, next)
assert.Equal(t, "0.1.0-beta.2", next.Tag)
}

Expand All @@ -220,6 +231,7 @@ func TestNextVersionWithFormat(t *testing.T) {
next, err := nsv.NextVersion(gitc, nsv.Options{VersionFormat: format, Logger: noopLogger})

require.NoError(t, err)
require.NotNil(t, next)
assert.Equal(t, "custom/v0.1.0", next.Tag)
}

Expand Down
2 changes: 1 addition & 1 deletion internal/tui/summary.go
Original file line number Diff line number Diff line change
Expand Up @@ -98,7 +98,7 @@ func PrintSummary(vers []*nsv.Next, opts SummaryOptions) {
}

var sum []string
if ver.LogDir != "" {
if ver.LogDir != "." {
sum = append(sum, faint.Render(fmt.Sprintf("(dir: %s)\n", ver.LogDir)))
}
sum = append(sum, log)
Expand Down
2 changes: 1 addition & 1 deletion taskfile.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ vars:
-X main.gitCommit={{.GIT_COMMIT}}
-X main.gitBranch={{.GIT_BRANCH}}
-X main.buildDate={{now | date "2006-01-02T15:04:05Z07:00"}}
GOLANG_DAGGER: "github.com/purpleclay/daggerverse/golang@v0.3.0"
GOLANG_DAGGER: "github.com/purpleclay/daggerverse/golang"

tasks:
default:
Expand Down

0 comments on commit 68f9ff8

Please sign in to comment.