fix(versioning): wrong next version if repo only has prereleases

This commit is contained in:
Julian Tölle 2024-08-03 01:16:58 +02:00
parent 9444ea9915
commit 05084aa484
2 changed files with 48 additions and 1 deletions

View file

@ -24,7 +24,12 @@ func (r Releases) NextVersion(versionBump conventionalcommits.VersionBump, nextV
return "", fmt.Errorf("failed to parse stable version: %w", err) 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 { switch versionBump {
case conventionalcommits.UnknownVersion: case conventionalcommits.UnknownVersion:

View file

@ -246,6 +246,48 @@ func TestReleases_NextVersion(t *testing.T) {
want: "v0.0.1", want: "v0.0.1",
wantErr: assert.NoError, 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", name: "error on invalid tag semver",
releases: Releases{ releases: Releases{