fix(ci): drive the Release PR with git-cliff (release-plz never opened one) #17

Merged
psk merged 1 commit from ci/git-cliff-release-pr into master 2026-06-29 22:11:53 +00:00
Owner

What

Replace the release-plz Release-PR engine with git-cliff. Approving one Release PR now cuts a release end-to-end (version + CHANGELOG + build + publish), with no re-runs.

Why (root cause, proven this session)

release-plz has never opened a Release PR in this repo — every release through v0.3.1 was hand-cut on a release/vX.Y.Z branch (no release-plz 🤖 author exists in master history). Its cargo package content-diff "did the crate change?" gate is structurally broken for this publish = false app: it reports no change for every commit and short-circuits before computing a version. Reproduced locally with fix: / feat: / new-file commits, with release_always, with [[package]], and with no config at all — it never bumps.

git-cliff (which release-plz only wrapped) computes the bump + changelog correctly here: git-cliff --bumped-versionv0.3.2 on master.

What changed

  • release-plz.ymlrelease-pr.yml (git-cliff engine). On master push: compute next version; if there's a bump, open/update one rolling release-pr branch/PR (bump Cargo.toml/Cargo.lock + insert the ## [x] CHANGELOG section), PAT-authored so ci.yml gates it. The tag-once step is unchanged (single PAT tag push on merge → release.yml). Workspace is restored to the master commit after building the PR branch so tag-once reads the right version.
  • New cliff.toml — Keep-a-Changelog group labels; skips merge + chore: release commits; tag_pattern v[0-9]*.
  • Delete release-plz.toml; update CLAUDE.md + justfile docs.

Validated locally (scratch clone)

  • feature push: 0.3.1 → 0.3.2, Cargo.toml/Cargo.lock bumped, ## [0.3.2] section inserted under ## [Unreleased] with existing prose intact.
  • merge push: next == current → no duplicate PR → tag-once tags v0.3.2 → fires release.yml.

After merge

This merge triggers the new release-pr.yml, which auto-opens the v0.3.2 Release PR. Approve that one → v0.3.2 is cut automatically (first live test of #14 one-push + #15 decoupled GitLab/headless).

## What Replace the **release-plz** Release-PR engine with **git-cliff**. Approving one Release PR now cuts a release end-to-end (version + CHANGELOG + build + publish), with **no re-runs**. ## Why (root cause, proven this session) release-plz has **never** opened a Release PR in this repo — every release through v0.3.1 was hand-cut on a `release/vX.Y.Z` branch (no `release-plz 🤖` author exists in master history). Its `cargo package` content-diff "did the crate change?" gate is **structurally broken for this `publish = false` app**: it reports *no change* for every commit and short-circuits before computing a version. Reproduced locally with `fix:` / `feat:` / new-file commits, with `release_always`, with `[[package]]`, and with **no config at all** — it never bumps. **git-cliff** (which release-plz only wrapped) computes the bump + changelog correctly here: `git-cliff --bumped-version` → `v0.3.2` on master. ## What changed - `release-plz.yml` → **`release-pr.yml`** (git-cliff engine). On master push: compute next version; if there's a bump, open/update one rolling `release-pr` branch/PR (bump `Cargo.toml`/`Cargo.lock` + insert the `## [x]` CHANGELOG section), PAT-authored so `ci.yml` gates it. The **tag-once step is unchanged** (single PAT tag push on merge → `release.yml`). Workspace is restored to the master commit after building the PR branch so tag-once reads the right version. - New **`cliff.toml`** — Keep-a-Changelog group labels; skips merge + `chore: release` commits; `tag_pattern v[0-9]*`. - Delete `release-plz.toml`; update `CLAUDE.md` + `justfile` docs. ## Validated locally (scratch clone) - feature push: 0.3.1 → **0.3.2**, `Cargo.toml`/`Cargo.lock` bumped, `## [0.3.2]` section inserted under `## [Unreleased]` with existing prose intact. - merge push: `next == current` → no duplicate PR → **tag-once tags `v0.3.2`** → fires `release.yml`. ## After merge This merge triggers the new `release-pr.yml`, which auto-opens the **v0.3.2 Release PR**. Approve that one → v0.3.2 is cut automatically (first live test of #14 one-push + #15 decoupled GitLab/headless).
fix(ci): drive the Release PR with git-cliff (release-plz never opened one)
All checks were successful
ci / build-and-test (pull_request) Successful in 8m55s
b793c3d1ad
release-plz has never opened a Release PR in this repo — every release through
v0.3.1 was hand-cut on a `release/vX.Y.Z` branch. Root cause: release-plz gates
on a `cargo package` content-diff to decide "did the crate change?", which is
structurally broken for this `publish = false` app — it reports "no change" for
every commit (reproduced with fix:/feat:/new-file, with release_always, with
[[package]], and with no config at all) and short-circuits before computing a
version. So `release-plz release-pr` always no-ops.

git-cliff (which release-plz only wrapped) computes the bump + changelog
correctly here: `git-cliff --bumped-version` -> v0.3.2 on master.

Replace the release-plz engine with a git-cliff one, keeping the architecture
intact (release.yml + the single PAT tag-push from #14):

- Rename release-plz.yml -> release-pr.yml. On master push it runs git-cliff to
  compute the next version, and if there's a bump opens/updates ONE rolling
  `release-pr` branch/PR (bumps Cargo.toml/lock + inserts the CHANGELOG section
  under `## [Unreleased]`), PAT-authored so ci.yml gates it. The unchanged
  tag-once step still fires release.yml on merge. Workspace is restored to the
  master commit after building the PR branch so tag-once reads the right version.
- Add cliff.toml (Keep-a-Changelog group labels; skips merge + chore: release
  commits; tag_pattern v[0-9]*).
- Delete release-plz.toml; update CLAUDE.md + justfile docs.

Net: approve one Release PR -> version + CHANGELOG + build + publish happen
automatically, no re-runs.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
psk merged commit 4a6e77f09b into master 2026-06-29 22:11:53 +00:00
psk deleted branch ci/git-cliff-release-pr 2026-06-29 22:11:53 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
public/soundy-bits!17
No description provided.