Compare commits

...

3 commits

Author SHA1 Message Date
44184a77f9 refactor: remove unwanted log 2024-08-30 19:47:12 +02:00
971b6e6ef7
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
2024-08-30 19:44:51 +02:00
693ca21e32
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.
2024-08-30 19:27:42 +02:00
3 changed files with 43 additions and 30 deletions

View file

@ -1,7 +1,6 @@
package cmd package cmd
import ( import (
"fmt"
"log/slog" "log/slog"
"os" "os"
"runtime/debug" "runtime/debug"
@ -24,7 +23,6 @@ func version() string {
buildInfo, ok := debug.ReadBuildInfo() buildInfo, ok := debug.ReadBuildInfo()
if ok { if ok {
fmt.Println(buildInfo.String())
for _, setting := range buildInfo.Settings { for _, setting := range buildInfo.Settings {
switch setting.Key { switch setting.Key {
case "vcs.revision": case "vcs.revision":

View file

@ -61,7 +61,6 @@ func NewReleasePullRequest(head, branch, version, changelogEntry string) (*Relea
type ReleaseOverrides struct { type ReleaseOverrides struct {
Prefix string Prefix string
Suffix string Suffix string
// TODO: Doing the changelog for normal releases after previews requires to know about this while fetching the commits
NextVersionType NextVersionType 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. // Label is the string identifier of a pull/merge request label on the forge.
type Label string type Label string

View file

@ -143,6 +143,27 @@ func (rp *ReleaserPleaser) createPendingRelease(ctx context.Context, pr *Release
func (rp *ReleaserPleaser) runReconcileReleasePR(ctx context.Context) error { func (rp *ReleaserPleaser) runReconcileReleasePR(ctx context.Context) error {
logger := rp.logger.With("method", "runReconcileReleasePR") 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) releases, err := rp.forge.LatestTags(ctx)
if err != nil { if err != nil {
return err return err
@ -157,7 +178,15 @@ func (rp *ReleaserPleaser) runReconcileReleasePR(ctx context.Context) error {
logger.InfoContext(ctx, "no latest tag found") 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 { if err != nil {
return err return err
} }
@ -172,22 +201,6 @@ func (rp *ReleaserPleaser) runReconcileReleasePR(ctx context.Context) error {
logger.InfoContext(ctx, "Analyzed commits", "length", len(analyzedCommits)) 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 len(analyzedCommits) == 0 {
if pr != nil { if pr != nil {
logger.InfoContext(ctx, "closing existing pull requests, no commits available", "pr.id", pr.ID, "pr.title", pr.Title) logger.InfoContext(ctx, "closing existing pull requests, no commits available", "pr.id", pr.ID, "pr.title", pr.Title)
@ -202,14 +215,6 @@ func (rp *ReleaserPleaser) runReconcileReleasePR(ctx context.Context) error {
return nil return nil
} }
var releaseOverrides ReleaseOverrides
if pr != nil {
releaseOverrides, err = pr.GetOverrides()
if err != nil {
return err
}
}
versionBump := VersionBumpFromCommits(analyzedCommits) versionBump := VersionBumpFromCommits(analyzedCommits)
// TODO: Set version in release pr // TODO: Set version in release pr
nextVersion, err := rp.nextVersion(releases, versionBump, releaseOverrides.NextVersionType) nextVersion, err := rp.nextVersion(releases, versionBump, releaseOverrides.NextVersionType)