From d8daad7623fb8fc2fa59fde6b308ba3b0f2c3230 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20T=C3=B6lle?= Date: Thu, 8 Aug 2024 19:01:44 +0200 Subject: [PATCH] refactor: Various cleanup (#11) * refactor: interface for commit message analyzer * refactor: interface for versioning strategy * refactor(releasepr): rebuild pr description Build PR description from scratch and parsed values instead of copying some of the AST to next description. --- cmd/rp/cmd/run.go | 9 +- commits.go | 30 ++++--- commits_test.go | 17 +--- forge.go | 2 +- releasepr.go | 62 ++------------ releasepr.md.tpl | 31 ++++--- releasepr_test.go | 101 +++++++++------------- versioning.go | 6 +- versioning_test.go | 207 ++++++++++++++++++++++----------------------- 9 files changed, 197 insertions(+), 268 deletions(-) diff --git a/cmd/rp/cmd/run.go b/cmd/rp/cmd/run.go index 4b7c9e2..04bf933 100644 --- a/cmd/rp/cmd/run.go +++ b/cmd/rp/cmd/run.go @@ -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 } @@ -352,7 +352,12 @@ func reconcileReleasePR(ctx context.Context, forge rp.Forge, changesets []rp.Cha logger.InfoContext(ctx, "opened pull request", "pr.title", pr.Title, "pr.id", pr.ID) } else { pr.SetTitle(flagBranch, nextVersion) - err = pr.SetDescription(changelogEntry) + + overrides, err := pr.GetOverrides() + if err != nil { + return err + } + err = pr.SetDescription(changelogEntry, overrides) if err != nil { return err } diff --git a/commits.go b/commits.go index 565deb7..28f9f4a 100644 --- a/commits.go +++ b/commits.go @@ -15,24 +15,36 @@ type AnalyzedCommit struct { BreakingChange bool } -func AnalyzeCommits(commits []Commit) ([]AnalyzedCommit, conventionalcommits.VersionBump, error) { +type CommitParser interface { + Analyze(commits []Commit) ([]AnalyzedCommit, error) +} + +type ConventionalCommitsParser struct { + machine conventionalcommits.Machine +} + +func NewConventionalCommitsParser() *ConventionalCommitsParser { parserMachine := parser.NewMachine( parser.WithBestEffort(), parser.WithTypes(conventionalcommits.TypesConventional), ) + return &ConventionalCommitsParser{ + machine: parserMachine, + } +} + +func (c *ConventionalCommitsParser) AnalyzeCommits(commits []Commit) ([]AnalyzedCommit, error) { analyzedCommits := make([]AnalyzedCommit, 0, len(commits)) - highestVersionBump := conventionalcommits.UnknownVersion - for _, commit := range commits { - msg, err := parserMachine.Parse([]byte(commit.Message)) + msg, err := c.machine.Parse([]byte(commit.Message)) if err != nil { - return nil, conventionalcommits.UnknownVersion, fmt.Errorf("failed to parse message of commit %q: %w", commit.Hash, err) + return nil, fmt.Errorf("failed to parse message of commit %q: %w", commit.Hash, err) } conventionalCommit, ok := msg.(*conventionalcommits.ConventionalCommit) if !ok { - return nil, conventionalcommits.UnknownVersion, fmt.Errorf("unable to get ConventionalCommit from parser result: %T", msg) + return nil, fmt.Errorf("unable to get ConventionalCommit from parser result: %T", msg) } commitVersionBump := conventionalCommit.VersionBump(conventionalcommits.DefaultStrategy) @@ -47,11 +59,7 @@ func AnalyzeCommits(commits []Commit) ([]AnalyzedCommit, conventionalcommits.Ver }) } - if commitVersionBump > highestVersionBump { - // Get max version bump from all releasable commits - highestVersionBump = commitVersionBump - } } - return analyzedCommits, highestVersionBump, nil + return analyzedCommits, nil } diff --git a/commits_test.go b/commits_test.go index 0e686e6..0725b32 100644 --- a/commits_test.go +++ b/commits_test.go @@ -3,7 +3,6 @@ package rp import ( "testing" - "github.com/leodido/go-conventionalcommits" "github.com/stretchr/testify/assert" ) @@ -12,14 +11,12 @@ func TestAnalyzeCommits(t *testing.T) { name string commits []Commit expectedCommits []AnalyzedCommit - expectedBump conventionalcommits.VersionBump wantErr assert.ErrorAssertionFunc }{ { name: "empty commits", commits: []Commit{}, expectedCommits: []AnalyzedCommit{}, - expectedBump: conventionalcommits.UnknownVersion, wantErr: assert.NoError, }, { @@ -30,7 +27,6 @@ func TestAnalyzeCommits(t *testing.T) { }, }, expectedCommits: nil, - expectedBump: conventionalcommits.UnknownVersion, wantErr: assert.Error, }, { @@ -41,7 +37,6 @@ func TestAnalyzeCommits(t *testing.T) { }, }, expectedCommits: []AnalyzedCommit{}, - expectedBump: conventionalcommits.UnknownVersion, wantErr: assert.NoError, }, { @@ -61,8 +56,7 @@ func TestAnalyzeCommits(t *testing.T) { Description: "blabla", }, }, - expectedBump: conventionalcommits.PatchVersion, - wantErr: assert.NoError, + wantErr: assert.NoError, }, { name: "highest bump (minor)", @@ -86,8 +80,7 @@ func TestAnalyzeCommits(t *testing.T) { Description: "foobar", }, }, - expectedBump: conventionalcommits.MinorVersion, - wantErr: assert.NoError, + wantErr: assert.NoError, }, { @@ -113,19 +106,17 @@ func TestAnalyzeCommits(t *testing.T) { BreakingChange: true, }, }, - expectedBump: conventionalcommits.MajorVersion, - wantErr: assert.NoError, + wantErr: assert.NoError, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - analyzedCommits, versionBump, err := AnalyzeCommits(tt.commits) + analyzedCommits, err := NewConventionalCommitsParser().AnalyzeCommits(tt.commits) if !tt.wantErr(t, err) { return } assert.Equal(t, tt.expectedCommits, analyzedCommits) - assert.Equal(t, tt.expectedBump, versionBump) }) } } diff --git a/forge.go b/forge.go index 8a3c9bb..99e65a3 100644 --- a/forge.go +++ b/forge.go @@ -308,7 +308,7 @@ func (g *GitHub) Changesets(ctx context.Context, commits []Commit) ([]Changeset, log = log.With("pullrequest.id", pullrequest.GetID()) // TODO: Parse PR description for overrides - changelogEntries, _, err := AnalyzeCommits([]Commit{commit}) + changelogEntries, err := NewConventionalCommitsParser().AnalyzeCommits([]Commit{commit}) if err != nil { log.Warn("unable to parse changelog entries", "error", err) continue diff --git a/releasepr.go b/releasepr.go index eadb3b0..a0a6c0b 100644 --- a/releasepr.go +++ b/releasepr.go @@ -6,6 +6,7 @@ import ( "fmt" "log" "regexp" + "strings" "text/template" "github.com/yuin/goldmark/ast" @@ -47,7 +48,7 @@ func NewReleasePullRequest(head, branch, version, changelogEntry string) (*Relea } rp.SetTitle(branch, version) - if err := rp.SetDescription(changelogEntry); err != nil { + if err := rp.SetDescription(changelogEntry, ReleaseOverrides{}); err != nil { return nil, err } @@ -115,7 +116,6 @@ const ( ) const ( - MarkdownSectionOverrides = "overrides" MarkdownSectionChangelog = "changelog" ) @@ -190,51 +190,6 @@ func (pr *ReleasePullRequest) parseDescription(overrides ReleaseOverrides) (Rele return overrides, nil } -func (pr *ReleasePullRequest) overridesText() (string, error) { - source := []byte(pr.Description) - gm := markdown.New() - descriptionAST := gm.Parser().Parse(text.NewReader(source)) - - var section *east.Section - - err := ast.Walk(descriptionAST, func(n ast.Node, entering bool) (ast.WalkStatus, error) { - if !entering { - return ast.WalkContinue, nil - } - - if n.Type() != ast.TypeBlock || n.Kind() != east.KindSection { - return ast.WalkContinue, nil - } - - anySection, ok := n.(*east.Section) - if !ok { - return ast.WalkStop, fmt.Errorf("node has unexpected type: %T", n) - } - - if anySection.Name != MarkdownSectionOverrides { - return ast.WalkContinue, nil - } - - section = anySection - return ast.WalkStop, nil - }) - if err != nil { - return "", err - } - - if section == nil { - return "", nil - } - - outputBuffer := new(bytes.Buffer) - err = gm.Renderer().Render(outputBuffer, source, section) - if err != nil { - return "", err - } - - return outputBuffer.String(), nil -} - func (pr *ReleasePullRequest) ChangelogText() (string, error) { source := []byte(pr.Description) gm := markdown.New() @@ -289,11 +244,11 @@ func textFromLines(source []byte, n ast.Node) string { content = append(content, line.Value(source)...) } - return string(content) + return strings.TrimSpace(string(content)) } func (pr *ReleasePullRequest) SetTitle(branch, version string) { - pr.Title = fmt.Sprintf("chore(%s): release %s", branch, version) + pr.Title = fmt.Sprintf(TitleFormat, branch, version) } func (pr *ReleasePullRequest) Version() (string, error) { @@ -305,14 +260,9 @@ func (pr *ReleasePullRequest) Version() (string, error) { return matches[2], nil } -func (pr *ReleasePullRequest) SetDescription(changelogEntry string) error { - overrides, err := pr.overridesText() - if err != nil { - return err - } - +func (pr *ReleasePullRequest) SetDescription(changelogEntry string, overrides ReleaseOverrides) error { var description bytes.Buffer - err = releasePRTemplate.Execute(&description, map[string]any{ + err := releasePRTemplate.Execute(&description, map[string]any{ "Changelog": changelogEntry, "Overrides": overrides, }) diff --git a/releasepr.md.tpl b/releasepr.md.tpl index e48872b..6f74aa0 100644 --- a/releasepr.md.tpl +++ b/releasepr.md.tpl @@ -1,29 +1,32 @@ ---- - {{ .Changelog }} --- -## releaser-pleaser Instructions -{{ if .Overrides }} -{{- .Overrides -}} -{{- else }} - -> If you want to modify the proposed release, add you overrides here. You can learn more about the options in the docs. +
+

PR by releaser-pleaser 🤖

-### Prefix +If you want to modify the proposed release, add you overrides here. You can learn more about the options in the docs. + +## Release Notes + +### Prefix / Start + +This will be added to the start of the release notes. ```rp-prefix +{{- if .Overrides.Prefix }} +{{ .Overrides.Prefix }}{{ end }} ``` -### Suffix +### Suffix / End + +This will be added to the end of the release notes. ```rp-suffix +{{- if .Overrides.Suffix }} +{{ .Overrides.Suffix }}{{ end }} ``` - - -{{ end }} -#### PR by [releaser-pleaser](https://github.com/apricote/releaser-pleaser) +
diff --git a/releasepr_test.go b/releasepr_test.go index 124b063..b1ffbb2 100644 --- a/releasepr_test.go +++ b/releasepr_test.go @@ -49,121 +49,96 @@ func TestReleasePullRequest_SetDescription(t *testing.T) { tests := []struct { name string - pr *ReleasePullRequest changelogEntry string + overrides ReleaseOverrides want string wantErr assert.ErrorAssertionFunc }{ { - name: "empty description", - pr: &ReleasePullRequest{}, + name: "no overrides", changelogEntry: `## v1.0.0`, - want: `--- - - + overrides: ReleaseOverrides{}, + want: ` ## v1.0.0 --- -## releaser-pleaser Instructions +
+

PR by releaser-pleaser 🤖

- -> If you want to modify the proposed release, add you overrides here. You can learn more about the options in the docs. +If you want to modify the proposed release, add you overrides here. You can learn more about the options in the docs. -### Prefix +## Release Notes + +### Prefix / Start + +This will be added to the start of the release notes. ` + "```" + `rp-prefix ` + "```" + ` -### Suffix +### Suffix / End + +This will be added to the end of the release notes. ` + "```" + `rp-suffix ` + "```" + ` - - - -#### PR by [releaser-pleaser](https://github.com/apricote/releaser-pleaser) +
`, wantErr: assert.NoError, }, { - name: "existing overrides", - pr: &ReleasePullRequest{ - Description: `--- - - -## v0.1.0 - -### Features - -- bedazzle - - ---- - -## releaser-pleaser Instructions - - -> If you want to modify the proposed release, add you overrides here. You can learn more about the options in the docs. - -### Prefix - -` + "```" + `rp-prefix -This release is awesome! -` + "```" + ` - -### Suffix - -` + "```" + `rp-suffix -` + "```" + ` - - - -#### PR by [releaser-pleaser](https://github.com/apricote/releaser-pleaser) -`, - }, + name: "existing overrides", changelogEntry: `## v1.0.0`, - want: `--- - - + overrides: ReleaseOverrides{ + Prefix: "This release is awesome!", + Suffix: "Fooo", + }, + want: ` ## v1.0.0 --- -## releaser-pleaser Instructions +
+

PR by releaser-pleaser 🤖

- -> If you want to modify the proposed release, add you overrides here. You can learn more about the options in the docs. +If you want to modify the proposed release, add you overrides here. You can learn more about the options in the docs. -### Prefix +## Release Notes + +### Prefix / Start + +This will be added to the start of the release notes. ` + "```" + `rp-prefix This release is awesome! ` + "```" + ` -### Suffix +### Suffix / End + +This will be added to the end of the release notes. ` + "```" + `rp-suffix +Fooo ` + "```" + ` - - -#### PR by [releaser-pleaser](https://github.com/apricote/releaser-pleaser) +
`, wantErr: assert.NoError, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - err := tt.pr.SetDescription(tt.changelogEntry) + pr := &ReleasePullRequest{} + err := pr.SetDescription(tt.changelogEntry, tt.overrides) if !tt.wantErr(t, err) { return } - assert.Equal(t, tt.want, tt.pr.Description) + assert.Equal(t, tt.want, pr.Description) }) } } diff --git a/versioning.go b/versioning.go index 126e06f..77bb96f 100644 --- a/versioning.go +++ b/versioning.go @@ -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) diff --git a/versioning_test.go b/versioning_test.go index 9319c63..d1846d8 100644 --- a/versioning_test.go +++ b/versioning_test.go @@ -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) }) } }