Skip to content

ci: migrate from git-cliff to release-please - #12

Closed
thedavidweng wants to merge 20 commits into
mainfrom
chore/release-please
Closed

ci: migrate from git-cliff to release-please#12
thedavidweng wants to merge 20 commits into
mainfrom
chore/release-please

Conversation

@thedavidweng

Copy link
Copy Markdown
Owner

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 to main, creates a Release Please PR, and on merge creates a tag + GitHub Release with changelog notes

Modified

  • .goreleaser.yaml:
    • Replaced changelog section with changelog.disable: true (Release Please now owns the changelog)
    • Added release.mode: append to append release notes to existing releases

Removed

  • cliff.toml — No longer needed; Release Please handles changelog generation

How it works

  1. On every push to main, Release Please analyzes conventional commits and opens/updates a release PR
  2. When the release PR is merged, the workflow creates a git tag and GitHub Release with extracted changelog notes
  3. GoReleaser then builds and publishes binaries to the release

Prerequisites

  • RELEASE_PLEASE_TOKEN secret must be set in the repository with a PAT that has repo and workflow scopes (needed for Release Please to create/update PRs)

- 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-apps

greptile-apps Bot commented Jun 19, 2026

Copy link
Copy Markdown

Greptile Summary

Migrates release automation from git-cliff + manual GoReleaser changelogs to release-please, which now owns version bumping, CHANGELOG.md generation, and GitHub Release creation. GoReleaser is updated to changelog.disable: true and release.mode: append so it only attaches binaries to the Release Please-created release.

  • release-please-config.json and .release-please-manifest.json bootstrap the pipeline at v0.3.1 with a Go release type and conventional-commit sections that mirror what cliff.toml produced.
  • .github/workflows/release-please.yml orchestrates the full flow: Release Please creates the tag, a custom shell step extracts CHANGELOG notes and appends installation instructions, and GoReleaser appends binaries via the existing release.yml on tag push.

Confidence Score: 5/5

Safe to merge; the release pipeline logic is sound and the only open item is a mutable version tag on actions/checkout that is inconsistent with the SHA-pinned release-please action.

The migration is mechanically correct: Release Please owns tagging and changelog generation, GoReleaser appends binaries with changelog.disable: true so it won't clobber the release notes, and the manifest is bootstrapped at the right version. The gh release view / gh release edit fallback in the custom release step handles both the race-condition case and the fresh-create case cleanly.

.github/workflows/release-please.ymlactions/checkout uses a mutable tag while a privileged PAT flows through it; worth pinning to a SHA for consistency with the already-pinned release-please action.

Important Files Changed

Filename Overview
.github/workflows/release-please.yml New workflow orchestrating Release Please tag creation + custom GitHub Release with CHANGELOG notes and installation instructions; actions/checkout uses a mutable version tag while a privileged token flows through it
.github/workflows/release.yml Minor: trailing newline removed, no behavioral change; GoReleaser still triggers on v* tag push
.goreleaser.yaml Changelog disabled and release.mode set to append; installation header/footer removed since they're now generated by the release-please workflow
release-please-config.json Well-formed Release Please config for a Go repo with conventional-commit changelog sections; chore/test/build/ci correctly hidden
.release-please-manifest.json Bootstrapped at v0.3.1 matching the latest release; single-package root config is correct
cliff.toml Deleted as part of the migration; no longer needed

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
Loading
%%{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
Loading

Reviews (17): Last reviewed commit: "fix: fail wait job on timeout instead of..." | Re-trigger Greptile

Comment thread .github/workflows/release-please.yml Outdated
Comment thread .github/workflows/release-please.yml Outdated
Comment thread .github/workflows/release-please.yml Outdated
Comment thread .github/workflows/release-please.yml Outdated
- 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
@thedavidweng

Copy link
Copy Markdown
Owner Author

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant