From 05084aa48461c635ed637a1a9dc55426d2f29e66 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20T=C3=B6lle?= Date: Sat, 3 Aug 2024 01:16:58 +0200 Subject: [PATCH] fix(versioning): wrong next version if repo only has prereleases --- versioning.go | 7 ++++++- versioning_test.go | 42 ++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 48 insertions(+), 1 deletion(-) diff --git a/versioning.go b/versioning.go index 3582044..126e06f 100644 --- a/versioning.go +++ b/versioning.go @@ -24,7 +24,12 @@ func (r Releases) NextVersion(versionBump conventionalcommits.VersionBump, nextV return "", fmt.Errorf("failed to parse stable version: %w", err) } - next := stable // Copy all fields + // If there is a previous stable release, we use that as the version anchor. Falling back to any pre-releases + // if they are the only tags in the repo. + next := latest + if r.Stable != nil { + next = stable + } switch versionBump { case conventionalcommits.UnknownVersion: diff --git a/versioning_test.go b/versioning_test.go index f25df88..9319c63 100644 --- a/versioning_test.go +++ b/versioning_test.go @@ -246,6 +246,48 @@ func TestReleases_NextVersion(t *testing.T) { want: "v0.0.1", wantErr: assert.NoError, }, + { + name: "nil stable release (major)", + releases: Releases{ + Latest: &Tag{Name: "v1.1.1-rc.0"}, + Stable: nil, + }, + args: args{ + versionBump: conventionalcommits.MajorVersion, + nextVersionType: NextVersionTypeUndefined, + }, + want: "v2.0.0", + wantErr: assert.NoError, + }, + { + name: "nil stable release (minor)", + releases: Releases{ + Latest: &Tag{Name: "v1.1.1-rc.0"}, + Stable: nil, + }, + args: args{ + + versionBump: conventionalcommits.MinorVersion, + nextVersionType: NextVersionTypeUndefined, + }, + want: "v1.2.0", + wantErr: assert.NoError, + }, + { + name: "nil stable release (patch)", + releases: Releases{ + Latest: &Tag{Name: "v1.1.1-rc.0"}, + Stable: nil, + }, + args: args{ + + versionBump: conventionalcommits.PatchVersion, + nextVersionType: NextVersionTypeUndefined, + }, + // TODO: Is this actually correct our should it be v1.1.1? + want: "v1.1.2", + wantErr: assert.NoError, + }, { name: "error on invalid tag semver", releases: Releases{