From 3c30a8066dcf84dae849c51a42933d2dfcf767dd Mon Sep 17 00:00:00 2001 From: Pete Davison Date: Wed, 6 Aug 2025 19:45:37 +0000 Subject: [PATCH] feat: bump minor version when repo is dirty or untagged --- internal/version/version.go | 10 ++++-- internal/version/version_test.go | 58 ++++++++++++++++++++++++++++++++ 2 files changed, 66 insertions(+), 2 deletions(-) create mode 100644 internal/version/version_test.go diff --git a/internal/version/version.go b/internal/version/version.go index af97a3f1..8dde4cfa 100644 --- a/internal/version/version.go +++ b/internal/version/version.go @@ -4,6 +4,8 @@ import ( _ "embed" "runtime/debug" "strings" + + "github.com/Masterminds/semver/v3" ) var ( @@ -46,6 +48,10 @@ func getCommit(info *debug.BuildInfo) string { // However, it can also be overridden at build time using: // -ldflags="-X 'github.com/go-task/task/v3/internal/version.version=vX.X.X'". func GetVersion() string { + // If its a development version, we bump the minor version. + if commit != "" || dirty { + return semver.MustParse(version).IncMinor().String() + } return version } @@ -61,7 +67,7 @@ func GetVersionWithBuildInfo() string { buildMetadata = append(buildMetadata, "dirty") } if len(buildMetadata) > 0 { - return version + "+" + strings.Join(buildMetadata, ".") + return GetVersion() + "+" + strings.Join(buildMetadata, ".") } - return version + return GetVersion() } diff --git a/internal/version/version_test.go b/internal/version/version_test.go new file mode 100644 index 00000000..b0e170ae --- /dev/null +++ b/internal/version/version_test.go @@ -0,0 +1,58 @@ +package version + +import ( + "testing" + + "github.com/stretchr/testify/require" +) + +func TestVersionTxt(t *testing.T) { + // Check that the version.txt is a valid semver version. + require.NotEmpty(t, GetVersion(), "version.txt is not semver compliant") +} + +func TestGetVersion(t *testing.T) { + tests := []struct { + version string + commit string + dirty bool + want string + }{ + {"1.2.3", "", false, "1.2.3"}, + {"1.2.3", "", true, "1.3.0"}, + {"1.2.3", "abcdefg", false, "1.3.0"}, + {"1.2.3", "abcdefg", true, "1.3.0"}, + } + + for _, tt := range tests { + version = tt.version + commit = tt.commit + dirty = tt.dirty + t.Run(tt.want, func(t *testing.T) { + require.Equal(t, tt.want, GetVersion()) + }) + } +} + +func TestGetVersionWithBuildInfo(t *testing.T) { + tests := []struct { + version string + commit string + dirty bool + want string + }{ + {"1.2.3", "", false, "1.2.3"}, + {"1.2.3", "", true, "1.3.0+dirty"}, + {"1.2.3", "abcdefg", false, "1.3.0+abcdefg"}, + {"1.2.3", "abcdefg", true, "1.3.0+abcdefg.dirty"}, + } + + for _, tt := range tests { + version = tt.version + commit = tt.commit + dirty = tt.dirty + t.Run(tt.want, func(t *testing.T) { + require.Equal(t, tt.want, GetVersionWithBuildInfo()) + }) + } +}