From 693ca21e320bef7525a605e8ab109cb2a0c506f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20T=C3=B6lle?= Date: Fri, 30 Aug 2024 19:27:42 +0200 Subject: [PATCH 1/3] refactor: load existing release pr earlier (#36) We need information from the release pr for the following steps, as the user can override various behaviours by commenting/labeling the release pr. --- releaserpleaser.go | 45 +++++++++++++++++++++------------------------ 1 file changed, 21 insertions(+), 24 deletions(-) diff --git a/releaserpleaser.go b/releaserpleaser.go index 5dfcf12..a901377 100644 --- a/releaserpleaser.go +++ b/releaserpleaser.go @@ -143,6 +143,27 @@ func (rp *ReleaserPleaser) createPendingRelease(ctx context.Context, pr *Release func (rp *ReleaserPleaser) runReconcileReleasePR(ctx context.Context) error { logger := rp.logger.With("method", "runReconcileReleasePR") + rpBranch := fmt.Sprintf(PullRequestBranchFormat, rp.targetBranch) + rpBranchRef := plumbing.NewBranchReferenceName(rpBranch) + + pr, err := rp.forge.PullRequestForBranch(ctx, rpBranch) + if err != nil { + return err + } + + var releaseOverrides ReleaseOverrides + + if pr != nil { + logger = logger.With("pr.id", pr.ID, "pr.title", pr.Title) + logger.InfoContext(ctx, "found existing release pull request") + + releaseOverrides, err = pr.GetOverrides() + if err != nil { + return err + } + + } + releases, err := rp.forge.LatestTags(ctx) if err != nil { return err @@ -172,22 +193,6 @@ func (rp *ReleaserPleaser) runReconcileReleasePR(ctx context.Context) error { logger.InfoContext(ctx, "Analyzed commits", "length", len(analyzedCommits)) - rpBranch := fmt.Sprintf(PullRequestBranchFormat, rp.targetBranch) - rpBranchRef := plumbing.NewBranchReferenceName(rpBranch) - // Check Forge for open PR - // Get any modifications from open PR - // Clone Repo - // Run Updaters + Changelog - // Upsert PR - pr, err := rp.forge.PullRequestForBranch(ctx, rpBranch) - if err != nil { - return err - } - - if pr != nil { - logger.InfoContext(ctx, "found existing release pull request", "pr.id", pr.ID, "pr.title", pr.Title) - } - if len(analyzedCommits) == 0 { if pr != nil { logger.InfoContext(ctx, "closing existing pull requests, no commits available", "pr.id", pr.ID, "pr.title", pr.Title) @@ -202,14 +207,6 @@ func (rp *ReleaserPleaser) runReconcileReleasePR(ctx context.Context) error { return nil } - var releaseOverrides ReleaseOverrides - if pr != nil { - releaseOverrides, err = pr.GetOverrides() - if err != nil { - return err - } - } - versionBump := VersionBumpFromCommits(analyzedCommits) // TODO: Set version in release pr nextVersion, err := rp.nextVersion(releases, versionBump, releaseOverrides.NextVersionType) From 971b6e6ef758099e174063ad5d1155e9217fe661 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20T=C3=B6lle?= Date: Fri, 30 Aug 2024 19:44:51 +0200 Subject: [PATCH 2/3] feat: less repetitive entries for for prerelease changelogs (#37) Right now we always show all new releasable commits since the last _stable_ release. If a project publishes multiple pre-releases in a row, they all repeat the same lines with a few new additions. On the other hand, when we cut a stable release, we do want to show all changes since the last stable release, as we can not expect users to read the changelog of pre-releases. As a compromise, the code now looks at the type of release that is being created, and decides based on that if we will look at STABLE..HEAD (stable release) or LATEST..HEAD (pre-release). Close #33 --- releasepr.go | 16 +++++++++++++--- releaserpleaser.go | 10 +++++++++- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/releasepr.go b/releasepr.go index a6744c4..e177010 100644 --- a/releasepr.go +++ b/releasepr.go @@ -59,9 +59,8 @@ func NewReleasePullRequest(head, branch, version, changelogEntry string) (*Relea } type ReleaseOverrides struct { - Prefix string - Suffix string - // TODO: Doing the changelog for normal releases after previews requires to know about this while fetching the commits + Prefix string + Suffix string NextVersionType NextVersionType } @@ -92,6 +91,17 @@ func (n NextVersionType) String() string { } } +func (n NextVersionType) IsPrerelease() bool { + switch n { + case NextVersionTypeRC, NextVersionTypeBeta, NextVersionTypeAlpha: + return true + case NextVersionTypeUndefined, NextVersionTypeNormal: + return false + default: + return false + } +} + // Label is the string identifier of a pull/merge request label on the forge. type Label string diff --git a/releaserpleaser.go b/releaserpleaser.go index a901377..f0bf6cd 100644 --- a/releaserpleaser.go +++ b/releaserpleaser.go @@ -178,7 +178,15 @@ func (rp *ReleaserPleaser) runReconcileReleasePR(ctx context.Context) error { logger.InfoContext(ctx, "no latest tag found") } - releasableCommits, err := rp.forge.CommitsSince(ctx, releases.Stable) + // By default, we want to show everything that has happened since the last stable release + lastReleaseCommit := releases.Stable + if releaseOverrides.NextVersionType.IsPrerelease() { + // if the new release will be a prerelease, + // only show changes since the latest release (stable or prerelease) + lastReleaseCommit = releases.Latest + } + + releasableCommits, err := rp.forge.CommitsSince(ctx, lastReleaseCommit) if err != nil { return err } From 44184a77f96c8c3a66a0a6c553f97c9bd17b20f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julian=20T=C3=B6lle?= Date: Fri, 30 Aug 2024 19:47:12 +0200 Subject: [PATCH 3/3] refactor: remove unwanted log --- cmd/rp/cmd/root.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/cmd/rp/cmd/root.go b/cmd/rp/cmd/root.go index be92187..dd4f9a7 100644 --- a/cmd/rp/cmd/root.go +++ b/cmd/rp/cmd/root.go @@ -1,7 +1,6 @@ package cmd import ( - "fmt" "log/slog" "os" "runtime/debug" @@ -24,7 +23,6 @@ func version() string { buildInfo, ok := debug.ReadBuildInfo() if ok { - fmt.Println(buildInfo.String()) for _, setting := range buildInfo.Settings { switch setting.Key { case "vcs.revision":