diff --git a/CHANGELOG.md b/CHANGELOG.md index 4cc4b81..703d6b9 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,11 +1,5 @@ # Changelog -## [v0.5.1](https://github.com/apricote/releaser-pleaser/releases/tag/v0.5.1) - -### Bug Fixes - -- invalid version for subsequent pre-releases (#174) - ## [v0.5.0](https://github.com/apricote/releaser-pleaser/releases/tag/v0.5.0) ### Features diff --git a/action.yml b/action.yml index a1c5de1..2d492dd 100644 --- a/action.yml +++ b/action.yml @@ -21,7 +21,7 @@ inputs: outputs: {} runs: using: 'docker' - image: docker://ghcr.io/apricote/releaser-pleaser:v0.5.1 # x-releaser-pleaser-version + image: docker://ghcr.io/apricote/releaser-pleaser:v0.5.0 # x-releaser-pleaser-version args: - run - --forge=github diff --git a/releaserpleaser.go b/releaserpleaser.go index f2f4064..88b2dbb 100644 --- a/releaserpleaser.go +++ b/releaserpleaser.go @@ -179,16 +179,34 @@ func (rp *ReleaserPleaser) runReconcileReleasePR(ctx context.Context) error { logger.InfoContext(ctx, "no latest tag found") } - // For stable releases, we want to consider all changes since the last stable release for version and changelog. - // For prereleases, we want to consider all changes... - // - since the last stable release for the version - // - since the latest release (stable or prerelease) for the changelog - analyzedCommitsForVersioning, err := rp.analyzedCommitsSince(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 + } + + commits, err := rp.forge.CommitsSince(ctx, lastReleaseCommit) if err != nil { return err } - if len(analyzedCommitsForVersioning) == 0 { + commits, err = parsePRBodyForCommitOverrides(commits) + if err != nil { + return err + } + + logger.InfoContext(ctx, "Found releasable commits", "length", len(commits)) + + analyzedCommits, err := rp.commitParser.Analyze(commits) + if err != nil { + return err + } + + logger.InfoContext(ctx, "Analyzed commits", "length", len(analyzedCommits)) + + 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) err = rp.forge.ClosePullRequest(ctx, pr) @@ -202,7 +220,7 @@ func (rp *ReleaserPleaser) runReconcileReleasePR(ctx context.Context) error { return nil } - versionBump := versioning.BumpFromCommits(analyzedCommitsForVersioning) + versionBump := versioning.BumpFromCommits(analyzedCommits) // TODO: Set version in release pr nextVersion, err := rp.versioning.NextVersion(releases, versionBump, releaseOverrides.NextVersionType) if err != nil { @@ -210,14 +228,6 @@ func (rp *ReleaserPleaser) runReconcileReleasePR(ctx context.Context) error { } logger.InfoContext(ctx, "next version", "version", nextVersion) - analyzedCommitsForChangelog := analyzedCommitsForVersioning - if releaseOverrides.NextVersionType.IsPrerelease() && releases.Latest != releases.Stable { - analyzedCommitsForChangelog, err = rp.analyzedCommitsSince(ctx, releases.Latest) - if err != nil { - return err - } - } - logger.DebugContext(ctx, "cloning repository", "clone.url", rp.forge.CloneURL()) repo, err := git.CloneRepo(ctx, logger, rp.forge.CloneURL(), rp.targetBranch, rp.forge.GitAuth()) if err != nil { @@ -232,7 +242,7 @@ func (rp *ReleaserPleaser) runReconcileReleasePR(ctx context.Context) error { return err } - changelogData := changelog.New(commitparser.ByType(analyzedCommitsForChangelog), nextVersion, rp.forge.ReleaseURL(nextVersion), releaseOverrides.Prefix, releaseOverrides.Suffix) + changelogData := changelog.New(commitparser.ByType(analyzedCommits), nextVersion, rp.forge.ReleaseURL(nextVersion), releaseOverrides.Prefix, releaseOverrides.Suffix) changelogEntry, err := changelog.Entry(logger, changelog.DefaultTemplate(), changelogData, changelog.Formatting{}) if err != nil { @@ -320,28 +330,3 @@ func (rp *ReleaserPleaser) runReconcileReleasePR(ctx context.Context) error { return nil } - -func (rp *ReleaserPleaser) analyzedCommitsSince(ctx context.Context, since *git.Tag) ([]commitparser.AnalyzedCommit, error) { - logger := rp.logger.With("method", "analyzedCommitsSince", "tag.hash", since.Hash, "tag.name", since.Name) - - commits, err := rp.forge.CommitsSince(ctx, since) - if err != nil { - return nil, err - } - - commits, err = parsePRBodyForCommitOverrides(commits) - if err != nil { - return nil, err - } - - logger.InfoContext(ctx, "Found releasable commits", "length", len(commits)) - - analyzedCommits, err := rp.commitParser.Analyze(commits) - if err != nil { - return nil, err - } - - logger.InfoContext(ctx, "Analyzed commits", "length", len(analyzedCommits)) - - return analyzedCommits, nil -} diff --git a/templates/run.yml b/templates/run.yml index cbde7ad..338a1b6 100644 --- a/templates/run.yml +++ b/templates/run.yml @@ -30,7 +30,7 @@ releaser-pleaser: # There is no way to run a pipeline when the MR description is updated :( - if: $CI_COMMIT_BRANCH == "$[[ inputs.branch ]]" image: - name: ghcr.io/apricote/releaser-pleaser:v0.5.1 # x-releaser-pleaser-version + name: ghcr.io/apricote/releaser-pleaser:v0.5.0 # x-releaser-pleaser-version entrypoint: [ "" ] variables: GITLAB_TOKEN: $[[ inputs.token ]]