From 2effe5e72da3f0b3c713a282d63f86fa60f64f0b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20T=C3=B6lle?= Date: Fri, 6 Sep 2024 23:17:06 +0200 Subject: [PATCH 1/3] feat: edit commit message after merging through PR (#43) Closes #5 --- .../release-notes-rp-commits-release-pr.png | 3 + docs/guides/release-notes-rp-commits.png | 3 + docs/guides/release-notes.md | 29 ++- docs/reference/pr-options.md | 31 ++- internal/forge/github/github.go | 4 +- internal/markdown/goldmark.go | 5 +- internal/markdown/goldmark_test.go | 42 +-- internal/releasepr/releasepr.go | 13 +- internal/releasepr/releasepr_test.go | 19 +- prbody.go | 57 +++++ prbody_test.go | 242 ++++++++++++++++++ releaserpleaser.go | 12 +- 12 files changed, 420 insertions(+), 40 deletions(-) create mode 100644 docs/guides/release-notes-rp-commits-release-pr.png create mode 100644 docs/guides/release-notes-rp-commits.png create mode 100644 prbody.go create mode 100644 prbody_test.go diff --git a/docs/guides/release-notes-rp-commits-release-pr.png b/docs/guides/release-notes-rp-commits-release-pr.png new file mode 100644 index 0000000..0dc60e0 --- /dev/null +++ b/docs/guides/release-notes-rp-commits-release-pr.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:9c28226eaa769033a45ca801f1e0655178faf86e7ddd764f470ae79d72c4b3c2 +size 62031 diff --git a/docs/guides/release-notes-rp-commits.png b/docs/guides/release-notes-rp-commits.png new file mode 100644 index 0000000..d91ea5f --- /dev/null +++ b/docs/guides/release-notes-rp-commits.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:04ca48b3250862d282dd54e14c08f9273ada0a49d2300364601799c56b1f6d11 +size 72105 diff --git a/docs/guides/release-notes.md b/docs/guides/release-notes.md index b4602c9..d994294 100644 --- a/docs/guides/release-notes.md +++ b/docs/guides/release-notes.md @@ -4,7 +4,34 @@ You can customize the generated Release Notes in two ways: ## For a single commit / pull request -This feature is still being worked on. Check out [#5](https://github.com/apricote/releaser-pleaser/issues/5) for the current status. +### Editing the Release Notes + +After merging a non-release pull request, you can still modify how it appears in the Release Notes. + +To do this, add a code block named `rp-commits` in the pull request description. When this block is present, `releaser-pleaser` will use its content for generating Release Notes instead of the commit message. If the code block contains multiple lines, each line will be treated as if it came from separate pull requests. This is useful for pull requests that introduce multiple features or fix several bugs. + +You can update the description at any time after merging the pull request but before merging the release pull request. `releaser-pleaser` will then re-run and update the suggested Release Notes accordingly. + +> ```rp-commits +> feat(api): add movie endpoints +> feat(api): add cinema endpoints +> fix(db): invalid schema for actor model +> ``` + +Using GitHub as an example, the pull request you are trying to change the Release Notes for should look like this: + +![Screenshot of a pull request page on GitHub. Currently editing the description of the pull request and adding the rp-commits snippet from above.](release-notes-rp-commits.png) + +In turn, `releaser-pleaser` updates the release pull request like this: + +![Screenshot of a release pull request on GitHub. It shows the release notes with the three commits from the rp-commits example.](release-notes-rp-commits-release-pr.png) + +### Removing the pull request from the Release Notes + +If you add an empty code block, the pull request will be removed from the Release Notes. + +> ```rp-commits +> ``` ## For the release diff --git a/docs/reference/pr-options.md b/docs/reference/pr-options.md index 11402bc..266bd08 100644 --- a/docs/reference/pr-options.md +++ b/docs/reference/pr-options.md @@ -28,6 +28,20 @@ Adding more than one of these labels is not allowed and the behaviour if multipl Any text in code blocks with these languages is being added to the start or end of the Release Notes and Changelog. Learn more in the [Release Notes](../guides/release-notes.md) guide. +**Examples**: + + ```rp-prefix + #### Awesome new feature! + + This text is at the start of the release notes. + ``` + + ```rp-suffix + #### Version Compatibility + + And this at the end. + ``` + ### Status **Labels**: @@ -43,4 +57,19 @@ Users should not set these labels themselves. Not created by `releaser-pleaser`. -Normal pull requests do not support any options right now. +### Release Notes + +**Code Blocks**: + +- `rp-commits` + +If specified, `releaser-pleaser` will consider each line in the code block as a commit message and add all of them to the Release Notes. Learn more in the [Release Notes](../guides/release-notes.md) guide. + +The types of commits (`feat`, `fix`, ...) are also considered for the next version. + +**Examples**: + + ```rp-commits + feat(api): add movie endpoints + fix(db): invalid schema for actor model + ``` diff --git a/internal/forge/github/github.go b/internal/forge/github/github.go index 46f203a..e7f6f97 100644 --- a/internal/forge/github/github.go +++ b/internal/forge/github/github.go @@ -526,9 +526,7 @@ func gitHubPRToReleasePullRequest(pr *github.PullRequest) *releasepr.ReleasePull } return &releasepr.ReleasePullRequest{ - ID: pr.GetNumber(), - Title: pr.GetTitle(), - Description: pr.GetBody(), + PullRequest: *gitHubPRToPullRequest(pr), Labels: labels, Head: pr.GetHead().GetRef(), diff --git a/internal/markdown/goldmark.go b/internal/markdown/goldmark.go index 16c7ce4..c2aecb8 100644 --- a/internal/markdown/goldmark.go +++ b/internal/markdown/goldmark.go @@ -39,7 +39,7 @@ func Format(input string) (string, error) { return buf.String(), nil } -func GetCodeBlockText(source []byte, language string, output *string) gast.Walker { +func GetCodeBlockText(source []byte, language string, output *string, found *bool) gast.Walker { return func(n gast.Node, entering bool) (gast.WalkStatus, error) { if !entering { return gast.WalkContinue, nil @@ -56,6 +56,9 @@ func GetCodeBlockText(source []byte, language string, output *string) gast.Walke } *output = textFromLines(source, codeBlock) + if found != nil { + *found = true + } // Stop looking after we find the first result return gast.WalkStop, nil } diff --git a/internal/markdown/goldmark_test.go b/internal/markdown/goldmark_test.go index 3002994..9c44b43 100644 --- a/internal/markdown/goldmark_test.go +++ b/internal/markdown/goldmark_test.go @@ -51,10 +51,11 @@ func TestGetCodeBlockText(t *testing.T) { language string } tests := []struct { - name string - args args - want string - wantErr assert.ErrorAssertionFunc + name string + args args + wantText string + wantFound bool + wantErr assert.ErrorAssertionFunc }{ { name: "no code block", @@ -62,8 +63,9 @@ func TestGetCodeBlockText(t *testing.T) { source: []byte("# Foo"), language: "missing", }, - want: "", - wantErr: assert.NoError, + wantText: "", + wantFound: false, + wantErr: assert.NoError, }, { name: "code block", @@ -71,8 +73,9 @@ func TestGetCodeBlockText(t *testing.T) { source: []byte("```test\nContent\n```"), language: "test", }, - want: "Content", - wantErr: assert.NoError, + wantText: "Content", + wantFound: true, + wantErr: assert.NoError, }, { name: "code block with other language", @@ -80,8 +83,9 @@ func TestGetCodeBlockText(t *testing.T) { source: []byte("```unknown\nContent\n```"), language: "test", }, - want: "", - wantErr: assert.NoError, + wantText: "", + wantFound: false, + wantErr: assert.NoError, }, { name: "multiple code blocks with different languages", @@ -89,8 +93,9 @@ func TestGetCodeBlockText(t *testing.T) { source: []byte("```unknown\nContent\n```\n\n```test\n1337\n```"), language: "test", }, - want: "1337", - wantErr: assert.NoError, + wantText: "1337", + wantFound: true, + wantErr: assert.NoError, }, { name: "multiple code blocks with same language returns first one", @@ -98,22 +103,25 @@ func TestGetCodeBlockText(t *testing.T) { source: []byte("```test\nContent\n```\n\n```test\n1337\n```"), language: "test", }, - want: "Content", - wantErr: assert.NoError, + wantText: "Content", + wantFound: true, + wantErr: assert.NoError, }, } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - var got string + var gotText string + var gotFound bool err := WalkAST(tt.args.source, - GetCodeBlockText(tt.args.source, tt.args.language, &got), + GetCodeBlockText(tt.args.source, tt.args.language, &gotText, &gotFound), ) if !tt.wantErr(t, err) { return } - assert.Equal(t, tt.want, got) + assert.Equal(t, tt.wantText, gotText) + assert.Equal(t, tt.wantFound, gotFound) }) } } diff --git a/internal/releasepr/releasepr.go b/internal/releasepr/releasepr.go index c19451e..505b3c0 100644 --- a/internal/releasepr/releasepr.go +++ b/internal/releasepr/releasepr.go @@ -28,14 +28,9 @@ func init() { } } -// ReleasePullRequest -// -// TODO: Reuse [git.PullRequest] type ReleasePullRequest struct { - ID int - Title string - Description string - Labels []Label + git.PullRequest + Labels []Label Head string ReleaseCommit *git.Commit @@ -137,8 +132,8 @@ func (pr *ReleasePullRequest) parseDescription(overrides ReleaseOverrides) (Rele source := []byte(pr.Description) err := markdown.WalkAST(source, - markdown.GetCodeBlockText(source, DescriptionLanguagePrefix, &overrides.Prefix), - markdown.GetCodeBlockText(source, DescriptionLanguageSuffix, &overrides.Suffix), + markdown.GetCodeBlockText(source, DescriptionLanguagePrefix, &overrides.Prefix, nil), + markdown.GetCodeBlockText(source, DescriptionLanguageSuffix, &overrides.Suffix, nil), ) if err != nil { return ReleaseOverrides{}, err diff --git a/internal/releasepr/releasepr_test.go b/internal/releasepr/releasepr_test.go index 64295de..09beaae 100644 --- a/internal/releasepr/releasepr_test.go +++ b/internal/releasepr/releasepr_test.go @@ -6,6 +6,7 @@ import ( "github.com/stretchr/testify/assert" + "github.com/apricote/releaser-pleaser/internal/git" "github.com/apricote/releaser-pleaser/internal/versioning" ) @@ -36,7 +37,9 @@ func TestReleasePullRequest_GetOverrides(t *testing.T) { { name: "prefix in description", pr: ReleasePullRequest{ - Description: "```rp-prefix\n## Foo\n\n- Cool thing\n```", + PullRequest: git.PullRequest{ + Description: "```rp-prefix\n## Foo\n\n- Cool thing\n```", + }, }, want: ReleaseOverrides{Prefix: "## Foo\n\n- Cool thing"}, wantErr: assert.NoError, @@ -44,7 +47,9 @@ func TestReleasePullRequest_GetOverrides(t *testing.T) { { name: "suffix in description", pr: ReleasePullRequest{ - Description: "```rp-suffix\n## Compatibility\n\nNo compatibility guarantees.\n```", + PullRequest: git.PullRequest{ + Description: "```rp-suffix\n## Compatibility\n\nNo compatibility guarantees.\n```", + }, }, want: ReleaseOverrides{Suffix: "## Compatibility\n\nNo compatibility guarantees."}, wantErr: assert.NoError, @@ -105,7 +110,9 @@ Suffix Things for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { pr := &ReleasePullRequest{ - Description: tt.description, + PullRequest: git.PullRequest{ + Description: tt.description, + }, } got, err := pr.ChangelogText() if !tt.wantErr(t, err, fmt.Sprintf("ChangelogText()")) { @@ -129,7 +136,11 @@ func TestReleasePullRequest_SetTitle(t *testing.T) { }{ { name: "simple update", - pr: &ReleasePullRequest{Title: "foo: bar"}, + pr: &ReleasePullRequest{ + PullRequest: git.PullRequest{ + Title: "foo: bar", + }, + }, args: args{ branch: "main", version: "v1.0.0", diff --git a/prbody.go b/prbody.go new file mode 100644 index 0000000..46388d6 --- /dev/null +++ b/prbody.go @@ -0,0 +1,57 @@ +package rp + +import ( + "strings" + + "github.com/apricote/releaser-pleaser/internal/git" + "github.com/apricote/releaser-pleaser/internal/markdown" +) + +func parsePRBodyForCommitOverrides(commits []git.Commit) ([]git.Commit, error) { + result := make([]git.Commit, 0, len(commits)) + + for _, commit := range commits { + singleResult, err := parseSinglePRBodyForCommitOverrides(commit) + if err != nil { + return nil, err + } + + result = append(result, singleResult...) + } + + return result, nil +} + +func parseSinglePRBodyForCommitOverrides(commit git.Commit) ([]git.Commit, error) { + if commit.PullRequest == nil { + return []git.Commit{commit}, nil + } + + source := []byte(commit.PullRequest.Description) + var overridesText string + var found bool + err := markdown.WalkAST(source, markdown.GetCodeBlockText(source, "rp-commits", &overridesText, &found)) + if err != nil { + return nil, err + } + + if !found { + return []git.Commit{commit}, nil + } + + lines := strings.Split(overridesText, "\n") + result := make([]git.Commit, 0, len(lines)) + for _, line := range lines { + // Only consider lines with text + line = strings.TrimSpace(line) + if line == "" { + continue + } + + newCommit := commit + newCommit.Message = line + result = append(result, newCommit) + } + + return result, nil +} diff --git a/prbody_test.go b/prbody_test.go new file mode 100644 index 0000000..dd86336 --- /dev/null +++ b/prbody_test.go @@ -0,0 +1,242 @@ +package rp + +import ( + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/apricote/releaser-pleaser/internal/git" +) + +func Test_parsePRBodyForCommitOverrides(t *testing.T) { + tests := []struct { + name string + commits []git.Commit + want []git.Commit + wantErr assert.ErrorAssertionFunc + }{ + { + name: "no commits", + commits: []git.Commit{}, + want: []git.Commit{}, + wantErr: assert.NoError, + }, + { + name: "single commit", + commits: []git.Commit{ + { + Hash: "123", + Message: "321", + PullRequest: &git.PullRequest{ + ID: 1, + Title: "Foo", + Description: "# Cool new thingy\n\n", + }, + }, + }, + want: []git.Commit{ + { + Hash: "123", + Message: "321", + PullRequest: &git.PullRequest{ + ID: 1, + Title: "Foo", + Description: "# Cool new thingy\n\n", + }, + }, + }, + wantErr: assert.NoError, + }, + { + name: "multiple commits", + commits: []git.Commit{ + { + Hash: "123", + Message: "321", + PullRequest: &git.PullRequest{ + ID: 1, + Title: "Foo", + Description: "# Cool new thingy\n\n```rp-commits\nfeat: shiny\nfix: boom\n```\n", + }, + }, + { + Hash: "456", + Message: "654", + PullRequest: &git.PullRequest{ + ID: 2, + Title: "Bar", + Description: "# Foobazzle\n\n", + }, + }, + }, + want: []git.Commit{ + { + Hash: "123", + Message: "feat: shiny", + PullRequest: &git.PullRequest{ + ID: 1, + Title: "Foo", + Description: "# Cool new thingy\n\n```rp-commits\nfeat: shiny\nfix: boom\n```\n", + }, + }, + { + Hash: "123", + Message: "fix: boom", + PullRequest: &git.PullRequest{ + ID: 1, + Title: "Foo", + Description: "# Cool new thingy\n\n```rp-commits\nfeat: shiny\nfix: boom\n```\n", + }, + }, + { + Hash: "456", + Message: "654", + PullRequest: &git.PullRequest{ + ID: 2, + Title: "Bar", + Description: "# Foobazzle\n\n", + }, + }, + }, + wantErr: assert.NoError, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := parsePRBodyForCommitOverrides(tt.commits) + if !tt.wantErr(t, err) { + return + } + assert.Equal(t, tt.want, got) + }) + } +} + +func Test_parseSinglePRBodyForCommitOverrides(t *testing.T) { + tests := []struct { + name string + commit git.Commit + want []git.Commit + wantErr assert.ErrorAssertionFunc + }{ + { + name: "same commit if no PR is available", + commit: git.Commit{ + Hash: "123", + Message: "321", + PullRequest: nil, + }, + want: []git.Commit{ + { + Hash: "123", + Message: "321", + }, + }, + wantErr: assert.NoError, + }, + { + name: "same commit if no overrides are defined", + commit: git.Commit{ + Hash: "123", + Message: "321", + PullRequest: &git.PullRequest{ + ID: 1, + Title: "Foo", + Description: "# Cool new thingy\n\n", + }, + }, + want: []git.Commit{ + { + Hash: "123", + Message: "321", + PullRequest: &git.PullRequest{ + ID: 1, + Title: "Foo", + Description: "# Cool new thingy\n\n", + }, + }, + }, + wantErr: assert.NoError, + }, + { + name: "no commit if override is defined but empty", + commit: git.Commit{ + Hash: "123", + Message: "321", + PullRequest: &git.PullRequest{ + ID: 1, + Title: "Foo", + Description: "```rp-commits\n```\n", + }, + }, + want: []git.Commit{}, + wantErr: assert.NoError, + }, + { + name: "commit messages from override", + commit: git.Commit{ + Hash: "123", + Message: "321", + PullRequest: &git.PullRequest{ + ID: 1, + Title: "Foo", + Description: "# Cool new thingy\n\n```rp-commits\nfeat: shiny\nfix: boom\n```\n", + }, + }, + want: []git.Commit{ + { + Hash: "123", + Message: "feat: shiny", + PullRequest: &git.PullRequest{ + ID: 1, + Title: "Foo", + Description: "# Cool new thingy\n\n```rp-commits\nfeat: shiny\nfix: boom\n```\n", + }, + }, + { + Hash: "123", + Message: "fix: boom", + PullRequest: &git.PullRequest{ + ID: 1, + Title: "Foo", + Description: "# Cool new thingy\n\n```rp-commits\nfeat: shiny\nfix: boom\n```\n", + }, + }, + }, + wantErr: assert.NoError, + }, + { + name: "ignore empty lines", + commit: git.Commit{ + Hash: "123", + Message: "321", + PullRequest: &git.PullRequest{ + ID: 1, + Title: "Foo", + Description: "# Cool new thingy\n\n```rp-commits\n\n \nfeat: shiny\n\n```\n", + }, + }, + want: []git.Commit{ + { + Hash: "123", + Message: "feat: shiny", + PullRequest: &git.PullRequest{ + ID: 1, + Title: "Foo", + Description: "# Cool new thingy\n\n```rp-commits\n\n \nfeat: shiny\n\n```\n", + }, + }, + }, + wantErr: assert.NoError, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := parseSinglePRBodyForCommitOverrides(tt.commit) + if !tt.wantErr(t, err) { + return + } + assert.Equal(t, tt.want, got) + }) + } +} diff --git a/releaserpleaser.go b/releaserpleaser.go index 6e500f6..a846c16 100644 --- a/releaserpleaser.go +++ b/releaserpleaser.go @@ -188,15 +188,19 @@ func (rp *ReleaserPleaser) runReconcileReleasePR(ctx context.Context) error { lastReleaseCommit = releases.Latest } - releasableCommits, err := rp.forge.CommitsSince(ctx, lastReleaseCommit) + commits, err := rp.forge.CommitsSince(ctx, lastReleaseCommit) if err != nil { return err } - logger.InfoContext(ctx, "Found releasable commits", "length", len(releasableCommits)) + commits, err = parsePRBodyForCommitOverrides(commits) + if err != nil { + return err + } - // TODO: Handle commit overrides - analyzedCommits, err := rp.commitParser.Analyze(releasableCommits) + logger.InfoContext(ctx, "Found releasable commits", "length", len(commits)) + + analyzedCommits, err := rp.commitParser.Analyze(commits) if err != nil { return err } From b9dd0f986ce5d56a39b5d29332b3bec631093c0e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20T=C3=B6lle?= Date: Fri, 6 Sep 2024 23:27:48 +0200 Subject: [PATCH 2/3] feat(cli): show release PR url in log messages (#44) Makes navigating to the PR way easier when looking at the logs. This requires a new `Forge.PullRequestURL()` method that needs to be implemented for all forges. --- internal/forge/forge.go | 1 + internal/forge/github/github.go | 4 ++++ releaserpleaser.go | 4 ++-- 3 files changed, 7 insertions(+), 2 deletions(-) diff --git a/internal/forge/forge.go b/internal/forge/forge.go index a5f418d..0bd119a 100644 --- a/internal/forge/forge.go +++ b/internal/forge/forge.go @@ -13,6 +13,7 @@ type Forge interface { RepoURL() string CloneURL() string ReleaseURL(version string) string + PullRequestURL(id int) string GitAuth() transport.AuthMethod diff --git a/internal/forge/github/github.go b/internal/forge/github/github.go index e7f6f97..d96fc9d 100644 --- a/internal/forge/github/github.go +++ b/internal/forge/github/github.go @@ -51,6 +51,10 @@ func (g *GitHub) ReleaseURL(version string) string { return fmt.Sprintf("https://github.com/%s/%s/releases/tag/%s", g.options.Owner, g.options.Repo, version) } +func (g *GitHub) PullRequestURL(id int) string { + return fmt.Sprintf("https://github.com/%s/%s/pull/%d", g.options.Owner, g.options.Repo, id) +} + func (g *GitHub) GitAuth() transport.AuthMethod { return &http.BasicAuth{ Username: g.options.Username, diff --git a/releaserpleaser.go b/releaserpleaser.go index a846c16..a69ef9e 100644 --- a/releaserpleaser.go +++ b/releaserpleaser.go @@ -300,7 +300,7 @@ func (rp *ReleaserPleaser) runReconcileReleasePR(ctx context.Context) error { if err != nil { return err } - logger.InfoContext(ctx, "opened pull request", "pr.title", pr.Title, "pr.id", pr.ID) + logger.InfoContext(ctx, "opened pull request", "pr.title", pr.Title, "pr.id", pr.ID, "pr.url", rp.forge.PullRequestURL(pr.ID)) } else { pr.SetTitle(rp.targetBranch, nextVersion) @@ -317,7 +317,7 @@ func (rp *ReleaserPleaser) runReconcileReleasePR(ctx context.Context) error { if err != nil { return err } - logger.InfoContext(ctx, "updated pull request", "pr.title", pr.Title, "pr.id", pr.ID) + logger.InfoContext(ctx, "updated pull request", "pr.title", pr.Title, "pr.id", pr.ID, "pr.url", rp.forge.PullRequestURL(pr.ID)) } return nil From 0a199e693f648e3a8d7c6962d8b23e8473be2d92 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20T=C3=B6lle?= Date: Fri, 6 Sep 2024 23:46:04 +0200 Subject: [PATCH 3/3] chore(main): release v0.3.0 (#38) Co-authored-by: releaser-pleaser <> --- CHANGELOG.md | 19 +++++++++++++++++++ action.yml | 2 +- 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index e26396b..eb47b20 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,24 @@ # Changelog +## [v0.3.0](https://github.com/apricote/releaser-pleaser/releases/tag/v0.3.0) + +### :sparkles: Highlights + +#### Cleaner pre-release Release Notes + +From now on if you create multiple pre-releases in a row, the release notes will only include changes since the last pre-release. Once you decide to create a stable release, the release notes will be in comparison to the last stable release. + +#### Edit pull request after merging. + +You can now edit the message for a pull request after merging by adding a \```rp-commits code block into the pull request body. Learn more in the [Release Notes Guide](https://apricote.github.io/releaser-pleaser/guides/release-notes.html#editing-the-release-notes). + +### Features + +- less repetitive entries for prerelease changelogs #37 +- format markdown in changelog entry (#41) +- edit commit message after merging through PR (#43) +- **cli**: show release PR url in log messages (#44) + ## [v0.2.0](https://github.com/apricote/releaser-pleaser/releases/tag/v0.2.0) ### Features diff --git a/action.yml b/action.yml index 0a488b2..8e3b8e1 100644 --- a/action.yml +++ b/action.yml @@ -21,7 +21,7 @@ inputs: outputs: {} runs: using: 'docker' - image: ghcr.io/apricote/releaser-pleaser:v0.2.0 # x-releaser-pleaser-version + image: ghcr.io/apricote/releaser-pleaser:v0.3.0 # x-releaser-pleaser-version args: - run - --forge=github