ci: migrate from git-cliff to release-please - #12
Conversation
- Add release-please-config.json with Go release type and conventional commit changelog sections - Add .release-please-manifest.json bootstrapped at v0.3.1 - Add .github/workflows/release-please.yml for automated releases - Update .goreleaser.yaml: disable built-in changelog, set release mode to append - Remove cliff.toml (git-cliff configuration)
Greptile SummaryMigrates release automation from git-cliff + manual GoReleaser changelogs to release-please, which now owns version bumping,
Confidence Score: 5/5Safe to merge; the release pipeline logic is sound and the only open item is a mutable version tag on The migration is mechanically correct: Release Please owns tagging and changelog generation, GoReleaser appends binaries with
Important Files Changed
Sequence Diagram%%{init: {'theme': 'neutral'}}%%
sequenceDiagram
participant Dev as Developer
participant Main as main branch
participant RP as release-please.yml
participant RPAction as release-please-action
participant GH as GitHub Release
participant TagEvent as Tag Push Event
participant GoR as release.yml (GoReleaser)
Dev->>Main: merge Release PR
Main->>RP: push to main (trigger)
RP->>RPAction: run (skip-github-release: true)
RPAction-->>RP: "release_created=true, tag_name=vX.Y.Z"
RPAction->>Main: git push tag vX.Y.Z
Main->>TagEvent: tag push triggers release.yml
par Release Please workflow continues
RP->>GH: gh release create/edit vX.Y.Z with CHANGELOG notes + install instructions
and GoReleaser starts
TagEvent->>GoR: trigger
GoR->>GH: "append binary artifacts (release.mode=append, changelog.disable=true)"
end
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
sequenceDiagram
participant Dev as Developer
participant Main as main branch
participant RP as release-please.yml
participant RPAction as release-please-action
participant GH as GitHub Release
participant TagEvent as Tag Push Event
participant GoR as release.yml (GoReleaser)
Dev->>Main: merge Release PR
Main->>RP: push to main (trigger)
RP->>RPAction: run (skip-github-release: true)
RPAction-->>RP: "release_created=true, tag_name=vX.Y.Z"
RPAction->>Main: git push tag vX.Y.Z
Main->>TagEvent: tag push triggers release.yml
par Release Please workflow continues
RP->>GH: gh release create/edit vX.Y.Z with CHANGELOG notes + install instructions
and GoReleaser starts
TagEvent->>GoR: trigger
GoR->>GH: "append binary artifacts (release.mode=append, changelog.disable=true)"
end
Reviews (17): Last reviewed commit: "fix: fail wait job on timeout instead of..." | Re-trigger Greptile |
- Pin googleapis/release-please-action to v4.4.1 (SHA) - Guard CHANGELOG.md awk extraction with file existence check - Add || true to prevent awk from failing the workflow
Create GitHub release as draft first, then publish after GoReleaser has a chance to append its artifacts via mode: append.
- Filter git tags to version tags only (v*) - Split 'Create GitHub Release' into draft/tag/publish steps - Change goreleaser release mode from append to keep-existing
Revert to combined tag-push + gh release create in single step. Split-step fails because gh release create auto-creates the tag on the remote, conflicting with the subsequent git push.
… workflow - Remove header/footer from .goreleaser.yaml (ignored by keep-existing mode) - Add installation instructions to gh release create notes in workflow
- Let release-please-action handle tag creation (skip-github-release: true) - Create GitHub Release in a follow-up step using the tag output - This ensures the release exists before GoReleaser triggers
|
Superseded: the git-cliff → release-please migration landed directly on main (release-please.yml + config + manifest, cliff.toml removed) as part of the fleet-standard alignment. |
Summary
Migrate the release automation from git-cliff + manual changelog to release-please for fully automated version bumps, changelogs, and GitHub Releases.
Changes
Added
release-please-config.json— Release Please configuration with Go release type, conventional commit changelog sections (Features, Bug Fixes, Performance, Refactoring, Documentation), and hidden sections for chore/test/build/ci commits.release-please-manifest.json— Bootstrapped at v0.3.1 to match the current latest release.github/workflows/release-please.yml— GitHub Actions workflow that runs on every push tomain, creates a Release Please PR, and on merge creates a tag + GitHub Release with changelog notesModified
.goreleaser.yaml:changelogsection withchangelog.disable: true(Release Please now owns the changelog)release.mode: appendto append release notes to existing releasesRemoved
cliff.toml— No longer needed; Release Please handles changelog generationHow it works
main, Release Please analyzes conventional commits and opens/updates a release PRPrerequisites
RELEASE_PLEASE_TOKENsecret must be set in the repository with a PAT that hasrepoandworkflowscopes (needed for Release Please to create/update PRs)