Skip to content

feat(release): manual on-demand binary release trigger (Path B)#390

Merged
githubrobbi merged 1 commit into
mainfrom
feat/manual-release-trigger
Jun 11, 2026
Merged

feat(release): manual on-demand binary release trigger (Path B)#390
githubrobbi merged 1 commit into
mainfrom
feat/manual-release-trigger

Conversation

@githubrobbi

Copy link
Copy Markdown
Collaborator

Path B — decouple binary release from crates.io publishing

Problem: release-plz only bumps the version when a publishable crate changes, and the only publishable crates are the 2 dependency-free leaves (uffs-time/uffs-text). So a change to uffs-cli/uffs-core/uffs-daemon/… never triggers a version bump or a binary build. This is structural — release-plz computes versions by cargo package-ing each tracked crate, which hard-fails for any crate with a versioned path-dep on an unpublished crate. The pre-R5 "touch anything → bump → binaries" model silently became "touch a leaf lib → bump."

Fix: decouple the two release cadences.

1. Binary release = manual on-demand (sole version owner)

  • just release-pr [patch|minor|major] — bumps the lockstep [workspace.package].version via cargo set-version, refreshes the lockfile, opens a release/vX.Y.Z PR.
  • just release-tag — after squash-merge, creates the signed vX.Y.Z tag → release.yml builds the 15-platform binaries.
  • Restores the pre-R5 just ship model without resurrecting the ~1430 LOC R5 deleted (just cargo set-version + two thin recipes).

2. crates.io publishing = release-plz, demoted

  • push: branches: [main] trigger disabled by design (now workflow_dispatch-only). release-plz no longer auto-drives anything; it's a manual helper for the 2 leaf libs.
  • A normal merge to main now triggers no release — manual-on-demand by design, not the "nothing happened" bug.

Kept intact

R1 commit-convention hooks · R2 git-cliff changelog · R7 dormant OIDC publish job · release.yml.

Files

  • just/build.justrelease-pr / release-tag recipes (retired version-bump stub redirects here)
  • .github/workflows/release-plz.yml — push trigger disabled by design
  • docs/architecture/release-automation-plan.md — Path B deviations-log row

🤖 Generated with Claude Code

release-plz can only version the 2 publishable leaf libs (uffs-time/
uffs-text) — it physically cannot see changes to uffs-cli/core/daemon/…
(their cargo package cannot resolve unpublished internal deps), so it
never drives binary releases. Decouple the two cadences:

- BINARY release = manual on-demand. New `just release-pr [level]` bumps
  the lockstep workspace version via cargo set-version, refreshes the
  lockfile, and opens a release/vX.Y.Z PR; after squash-merge,
  `just release-tag` creates the signed vX.Y.Z tag -> release.yml builds
  the 15-platform binaries. Sole owner of the version number; restores
  the pre-R5 just-ship model without resurrecting the deleted ~1430 LOC.
- crates.io publishing = release-plz, demoted to workflow_dispatch-only
  (push: main trigger disabled BY DESIGN). A normal merge triggers no
  release. Leaf-lib publishing is manual/occasional.

Kept: R1 commit hooks, R2 git-cliff changelog, R7 dormant OIDC job,
release.yml. Documented as a Path B row in release-automation-plan §8.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@githubrobbi githubrobbi enabled auto-merge (squash) June 11, 2026 02:40
@githubrobbi githubrobbi merged commit 043f62f into main Jun 11, 2026
19 checks passed
@githubrobbi githubrobbi deleted the feat/manual-release-trigger branch June 11, 2026 02:42
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