mirror of
https://github.com/apricote/releaser-pleaser.git
synced 2026-01-13 21:21:03 +00:00
refactor: interface for versioning strategy
This commit is contained in:
parent
7797a86a48
commit
04ace5cb05
3 changed files with 106 additions and 109 deletions
|
|
@ -232,7 +232,7 @@ func reconcileReleasePR(ctx context.Context, forge rp.Forge, changesets []rp.Cha
|
|||
}
|
||||
|
||||
versionBump := rp.VersionBumpFromChangesets(changesets)
|
||||
nextVersion, err := releases.NextVersion(versionBump, releaseOverrides.NextVersionType)
|
||||
nextVersion, err := rp.SemVerNextVersion(releases, versionBump, releaseOverrides.NextVersionType)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,7 +13,11 @@ type Releases struct {
|
|||
Stable *Tag
|
||||
}
|
||||
|
||||
func (r Releases) NextVersion(versionBump conventionalcommits.VersionBump, nextVersionType NextVersionType) (string, error) {
|
||||
type VersioningStrategy = func(Releases, conventionalcommits.VersionBump, NextVersionType) (string, error)
|
||||
|
||||
var _ VersioningStrategy = SemVerNextVersion
|
||||
|
||||
func SemVerNextVersion(r Releases, versionBump conventionalcommits.VersionBump, nextVersionType NextVersionType) (string, error) {
|
||||
latest, err := parseSemverWithDefault(r.Latest)
|
||||
if err != nil {
|
||||
return "", fmt.Errorf("failed to parse latest version: %w", err)
|
||||
|
|
|
|||
|
|
@ -10,23 +10,23 @@ import (
|
|||
|
||||
func TestReleases_NextVersion(t *testing.T) {
|
||||
type args struct {
|
||||
releases Releases
|
||||
versionBump conventionalcommits.VersionBump
|
||||
nextVersionType NextVersionType
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
releases Releases
|
||||
args args
|
||||
want string
|
||||
wantErr assert.ErrorAssertionFunc
|
||||
name string
|
||||
args args
|
||||
want string
|
||||
wantErr assert.ErrorAssertionFunc
|
||||
}{
|
||||
{
|
||||
name: "simple bump (major)",
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "v1.1.1"},
|
||||
Stable: &Tag{Name: "v1.1.1"},
|
||||
},
|
||||
args: args{
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "v1.1.1"},
|
||||
Stable: &Tag{Name: "v1.1.1"},
|
||||
},
|
||||
versionBump: conventionalcommits.MajorVersion,
|
||||
nextVersionType: NextVersionTypeUndefined,
|
||||
},
|
||||
|
|
@ -35,12 +35,11 @@ func TestReleases_NextVersion(t *testing.T) {
|
|||
},
|
||||
{
|
||||
name: "simple bump (minor)",
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "v1.1.1"},
|
||||
Stable: &Tag{Name: "v1.1.1"},
|
||||
},
|
||||
args: args{
|
||||
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "v1.1.1"},
|
||||
Stable: &Tag{Name: "v1.1.1"},
|
||||
},
|
||||
versionBump: conventionalcommits.MinorVersion,
|
||||
nextVersionType: NextVersionTypeUndefined,
|
||||
},
|
||||
|
|
@ -49,12 +48,11 @@ func TestReleases_NextVersion(t *testing.T) {
|
|||
},
|
||||
{
|
||||
name: "simple bump (patch)",
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "v1.1.1"},
|
||||
Stable: &Tag{Name: "v1.1.1"},
|
||||
},
|
||||
args: args{
|
||||
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "v1.1.1"},
|
||||
Stable: &Tag{Name: "v1.1.1"},
|
||||
},
|
||||
versionBump: conventionalcommits.PatchVersion,
|
||||
nextVersionType: NextVersionTypeUndefined,
|
||||
},
|
||||
|
|
@ -63,12 +61,11 @@ func TestReleases_NextVersion(t *testing.T) {
|
|||
},
|
||||
{
|
||||
name: "normal to prerelease (major)",
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "v1.1.1"},
|
||||
Stable: &Tag{Name: "v1.1.1"},
|
||||
},
|
||||
args: args{
|
||||
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "v1.1.1"},
|
||||
Stable: &Tag{Name: "v1.1.1"},
|
||||
},
|
||||
versionBump: conventionalcommits.MajorVersion,
|
||||
nextVersionType: NextVersionTypeRC,
|
||||
},
|
||||
|
|
@ -77,12 +74,11 @@ func TestReleases_NextVersion(t *testing.T) {
|
|||
},
|
||||
{
|
||||
name: "normal to prerelease (minor)",
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "v1.1.1"},
|
||||
Stable: &Tag{Name: "v1.1.1"},
|
||||
},
|
||||
args: args{
|
||||
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "v1.1.1"},
|
||||
Stable: &Tag{Name: "v1.1.1"},
|
||||
},
|
||||
versionBump: conventionalcommits.MinorVersion,
|
||||
nextVersionType: NextVersionTypeRC,
|
||||
},
|
||||
|
|
@ -91,12 +87,11 @@ func TestReleases_NextVersion(t *testing.T) {
|
|||
},
|
||||
{
|
||||
name: "normal to prerelease (patch)",
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "v1.1.1"},
|
||||
Stable: &Tag{Name: "v1.1.1"},
|
||||
},
|
||||
args: args{
|
||||
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "v1.1.1"},
|
||||
Stable: &Tag{Name: "v1.1.1"},
|
||||
},
|
||||
versionBump: conventionalcommits.PatchVersion,
|
||||
nextVersionType: NextVersionTypeRC,
|
||||
},
|
||||
|
|
@ -105,11 +100,11 @@ func TestReleases_NextVersion(t *testing.T) {
|
|||
},
|
||||
{
|
||||
name: "prerelease bump (major)",
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "v2.0.0-rc.0"},
|
||||
Stable: &Tag{Name: "v1.1.1"},
|
||||
},
|
||||
args: args{
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "v2.0.0-rc.0"},
|
||||
Stable: &Tag{Name: "v1.1.1"},
|
||||
},
|
||||
versionBump: conventionalcommits.MajorVersion,
|
||||
nextVersionType: NextVersionTypeRC,
|
||||
},
|
||||
|
|
@ -118,11 +113,11 @@ func TestReleases_NextVersion(t *testing.T) {
|
|||
},
|
||||
{
|
||||
name: "prerelease bump (minor)",
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "v1.2.0-rc.0"},
|
||||
Stable: &Tag{Name: "v1.1.1"},
|
||||
},
|
||||
args: args{
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "v1.2.0-rc.0"},
|
||||
Stable: &Tag{Name: "v1.1.1"},
|
||||
},
|
||||
versionBump: conventionalcommits.MinorVersion,
|
||||
nextVersionType: NextVersionTypeRC,
|
||||
},
|
||||
|
|
@ -131,11 +126,11 @@ func TestReleases_NextVersion(t *testing.T) {
|
|||
},
|
||||
{
|
||||
name: "prerelease bump (patch)",
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "v1.1.2-rc.0"},
|
||||
Stable: &Tag{Name: "v1.1.1"},
|
||||
},
|
||||
args: args{
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "v1.1.2-rc.0"},
|
||||
Stable: &Tag{Name: "v1.1.1"},
|
||||
},
|
||||
versionBump: conventionalcommits.PatchVersion,
|
||||
nextVersionType: NextVersionTypeRC,
|
||||
},
|
||||
|
|
@ -144,11 +139,11 @@ func TestReleases_NextVersion(t *testing.T) {
|
|||
},
|
||||
{
|
||||
name: "prerelease different bump (major)",
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "v1.2.0-rc.0"},
|
||||
Stable: &Tag{Name: "v1.1.1"},
|
||||
},
|
||||
args: args{
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "v1.2.0-rc.0"},
|
||||
Stable: &Tag{Name: "v1.1.1"},
|
||||
},
|
||||
versionBump: conventionalcommits.MajorVersion,
|
||||
nextVersionType: NextVersionTypeRC,
|
||||
},
|
||||
|
|
@ -157,11 +152,11 @@ func TestReleases_NextVersion(t *testing.T) {
|
|||
},
|
||||
{
|
||||
name: "prerelease different bump (minor)",
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "v1.1.2-rc.0"},
|
||||
Stable: &Tag{Name: "v1.1.1"},
|
||||
},
|
||||
args: args{
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "v1.1.2-rc.0"},
|
||||
Stable: &Tag{Name: "v1.1.1"},
|
||||
},
|
||||
versionBump: conventionalcommits.MinorVersion,
|
||||
nextVersionType: NextVersionTypeRC,
|
||||
},
|
||||
|
|
@ -170,11 +165,11 @@ func TestReleases_NextVersion(t *testing.T) {
|
|||
},
|
||||
{
|
||||
name: "prerelease to prerelease",
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "v1.1.1-alpha.2"},
|
||||
Stable: &Tag{Name: "v1.1.0"},
|
||||
},
|
||||
args: args{
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "v1.1.1-alpha.2"},
|
||||
Stable: &Tag{Name: "v1.1.0"},
|
||||
},
|
||||
versionBump: conventionalcommits.PatchVersion,
|
||||
nextVersionType: NextVersionTypeRC,
|
||||
},
|
||||
|
|
@ -183,11 +178,11 @@ func TestReleases_NextVersion(t *testing.T) {
|
|||
},
|
||||
{
|
||||
name: "prerelease to normal (explicit)",
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "v1.1.1-alpha.2"},
|
||||
Stable: &Tag{Name: "v1.1.0"},
|
||||
},
|
||||
args: args{
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "v1.1.1-alpha.2"},
|
||||
Stable: &Tag{Name: "v1.1.0"},
|
||||
},
|
||||
versionBump: conventionalcommits.PatchVersion,
|
||||
nextVersionType: NextVersionTypeNormal,
|
||||
},
|
||||
|
|
@ -196,11 +191,11 @@ func TestReleases_NextVersion(t *testing.T) {
|
|||
},
|
||||
{
|
||||
name: "prerelease to normal (implicit)",
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "v1.1.1-alpha.2"},
|
||||
Stable: &Tag{Name: "v1.1.0"},
|
||||
},
|
||||
args: args{
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "v1.1.1-alpha.2"},
|
||||
Stable: &Tag{Name: "v1.1.0"},
|
||||
},
|
||||
versionBump: conventionalcommits.PatchVersion,
|
||||
nextVersionType: NextVersionTypeUndefined,
|
||||
},
|
||||
|
|
@ -209,11 +204,11 @@ func TestReleases_NextVersion(t *testing.T) {
|
|||
},
|
||||
{
|
||||
name: "nil tag (major)",
|
||||
releases: Releases{
|
||||
Latest: nil,
|
||||
Stable: nil,
|
||||
},
|
||||
args: args{
|
||||
releases: Releases{
|
||||
Latest: nil,
|
||||
Stable: nil,
|
||||
},
|
||||
versionBump: conventionalcommits.MajorVersion,
|
||||
nextVersionType: NextVersionTypeUndefined,
|
||||
},
|
||||
|
|
@ -222,11 +217,11 @@ func TestReleases_NextVersion(t *testing.T) {
|
|||
},
|
||||
{
|
||||
name: "nil tag (minor)",
|
||||
releases: Releases{
|
||||
Latest: nil,
|
||||
Stable: nil,
|
||||
},
|
||||
args: args{
|
||||
releases: Releases{
|
||||
Latest: nil,
|
||||
Stable: nil,
|
||||
},
|
||||
versionBump: conventionalcommits.MinorVersion,
|
||||
nextVersionType: NextVersionTypeUndefined,
|
||||
},
|
||||
|
|
@ -235,11 +230,11 @@ func TestReleases_NextVersion(t *testing.T) {
|
|||
},
|
||||
{
|
||||
name: "nil tag (patch)",
|
||||
releases: Releases{
|
||||
Latest: nil,
|
||||
Stable: nil,
|
||||
},
|
||||
args: args{
|
||||
releases: Releases{
|
||||
Latest: nil,
|
||||
Stable: nil,
|
||||
},
|
||||
versionBump: conventionalcommits.PatchVersion,
|
||||
nextVersionType: NextVersionTypeUndefined,
|
||||
},
|
||||
|
|
@ -248,11 +243,11 @@ func TestReleases_NextVersion(t *testing.T) {
|
|||
},
|
||||
{
|
||||
name: "nil stable release (major)",
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "v1.1.1-rc.0"},
|
||||
Stable: nil,
|
||||
},
|
||||
args: args{
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "v1.1.1-rc.0"},
|
||||
Stable: nil,
|
||||
},
|
||||
versionBump: conventionalcommits.MajorVersion,
|
||||
nextVersionType: NextVersionTypeUndefined,
|
||||
},
|
||||
|
|
@ -261,12 +256,11 @@ func TestReleases_NextVersion(t *testing.T) {
|
|||
},
|
||||
{
|
||||
name: "nil stable release (minor)",
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "v1.1.1-rc.0"},
|
||||
Stable: nil,
|
||||
},
|
||||
args: args{
|
||||
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "v1.1.1-rc.0"},
|
||||
Stable: nil,
|
||||
},
|
||||
versionBump: conventionalcommits.MinorVersion,
|
||||
nextVersionType: NextVersionTypeUndefined,
|
||||
},
|
||||
|
|
@ -275,12 +269,11 @@ func TestReleases_NextVersion(t *testing.T) {
|
|||
},
|
||||
{
|
||||
name: "nil stable release (patch)",
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "v1.1.1-rc.0"},
|
||||
Stable: nil,
|
||||
},
|
||||
args: args{
|
||||
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "v1.1.1-rc.0"},
|
||||
Stable: nil,
|
||||
},
|
||||
versionBump: conventionalcommits.PatchVersion,
|
||||
nextVersionType: NextVersionTypeUndefined,
|
||||
},
|
||||
|
|
@ -290,11 +283,11 @@ func TestReleases_NextVersion(t *testing.T) {
|
|||
},
|
||||
{
|
||||
name: "error on invalid tag semver",
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "foodazzle"},
|
||||
Stable: &Tag{Name: "foodazzle"},
|
||||
},
|
||||
args: args{
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "foodazzle"},
|
||||
Stable: &Tag{Name: "foodazzle"},
|
||||
},
|
||||
versionBump: conventionalcommits.PatchVersion,
|
||||
nextVersionType: NextVersionTypeRC,
|
||||
},
|
||||
|
|
@ -303,11 +296,11 @@ func TestReleases_NextVersion(t *testing.T) {
|
|||
},
|
||||
{
|
||||
name: "error on invalid tag prerelease",
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "v1.1.1-rc.foo"},
|
||||
Stable: &Tag{Name: "v1.1.1-rc.foo"},
|
||||
},
|
||||
args: args{
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "v1.1.1-rc.foo"},
|
||||
Stable: &Tag{Name: "v1.1.1-rc.foo"},
|
||||
},
|
||||
versionBump: conventionalcommits.PatchVersion,
|
||||
nextVersionType: NextVersionTypeRC,
|
||||
},
|
||||
|
|
@ -316,11 +309,11 @@ func TestReleases_NextVersion(t *testing.T) {
|
|||
},
|
||||
{
|
||||
name: "error on invalid bump",
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "v1.1.1"},
|
||||
Stable: &Tag{Name: "v1.1.1"},
|
||||
},
|
||||
args: args{
|
||||
releases: Releases{
|
||||
Latest: &Tag{Name: "v1.1.1"},
|
||||
Stable: &Tag{Name: "v1.1.1"},
|
||||
},
|
||||
|
||||
versionBump: conventionalcommits.UnknownVersion,
|
||||
nextVersionType: NextVersionTypeUndefined,
|
||||
|
|
@ -331,11 +324,11 @@ func TestReleases_NextVersion(t *testing.T) {
|
|||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
got, err := tt.releases.NextVersion(tt.args.versionBump, tt.args.nextVersionType)
|
||||
if !tt.wantErr(t, err, fmt.Sprintf("Releases(%v, %v).NextVersion(%v, %v)", tt.releases.Latest, tt.releases.Stable, tt.args.versionBump, tt.args.nextVersionType)) {
|
||||
got, err := SemVerNextVersion(tt.args.releases, tt.args.versionBump, tt.args.nextVersionType)
|
||||
if !tt.wantErr(t, err, fmt.Sprintf("SemVerNextVersion(Releases(%v, %v), %v, %v)", tt.args.releases.Latest, tt.args.releases.Stable, tt.args.versionBump, tt.args.nextVersionType)) {
|
||||
return
|
||||
}
|
||||
assert.Equalf(t, tt.want, got, "Releases(%v, %v).NextVersion(%v, %v)", tt.releases.Latest, tt.releases.Stable, tt.args.versionBump, tt.args.nextVersionType)
|
||||
assert.Equalf(t, tt.want, got, "SemVerNextVersion(Releases(%v, %v), %v, %v)", tt.args.releases.Latest, tt.args.releases.Stable, tt.args.versionBump, tt.args.nextVersionType)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue