ci(release-plz): fail loudly when a release silently stalls#11
Merged
Conversation
release-plz/action swallows a release-pr HTTP 422 as a warning and reports no PR created, so releases can stall silently — indistinguishable from a quiet week of commits (this is how releases quietly stopped before the v0.1.3 manual release). Add a guard step that runs only when no PR was created/updated: if no release PR is already open yet release-worthy commits (feat/fix/perf/breaking) exist since the last tag, fail the job so the stall is visible. The prune step already removes the stale-branch 422 trigger; this catches any other swallowed failure mode.
There was a problem hiding this comment.
ℹ️ Guard logic is sound — one scope observation worth a look.
Reviewed changes — initial review of the release-plz stall guard plus the bundled macOS tray refactor and action version bumps.
- Add
Guard against a silently stalled releasestep inrelease-plz.yml— runs only whenrelease_pr.outputs.prs_created == 'false', short-circuits on an already-openrelease-plz-*PR, then::error::s whengit log <last v* tag>..HEADcontainsfeat|fix|perfor any breaking<type>!:commit. - Bump
actions/checkoutv4→v6 andactions/create-github-app-tokenv2→v3 in both jobs of the same workflow (not mentioned in the PR description). - Extract
platform/tray.rsinline Cocoa FFI into a newplatform/status_item.rsmodule — typed wrappers (StatusItem,Menu,MenuItem,ActionTarget,ActivationPolicy) each 1:1 around the previousmsg_send!blocks; storage inOnceLocknarrows from rawusizeto the wrapper structs while preserving the existingSync-via-usizeconvention.
ℹ️ Three independent changes bundled under a CI-only title
The PR title and description scope this to the release-plz stall guard, but the branch also carries an unrelated macOS FFI refactor (1dfa2c2) and two actions/* major-version bumps (checkout v4→v6, create-github-app-token v2→v3) that aren't mentioned anywhere.
Each piece is fine on its own — the refactor is behavior-preserving, the bumps are plausible — but they have separate revert surfaces and separate review concerns from the guard logic.
Technical details
# Three independent changes bundled under a CI-only title
## Affected sites
- `crates/openlogi-gui/src/platform/{mod,status_item,tray}.rs` — macOS Cocoa FFI extraction; reviewable on its own, unrelated to release CI.
- `.github/workflows/release-plz.yml:25` and `:135` — `actions/checkout@v4 → v6`.
- `.github/workflows/release-plz.yml:65` and `:172` — `actions/create-github-app-token@v2 → v3`.
## Required outcome
- Either split the macOS refactor + the action bumps into their own PRs, or extend the PR title/body to acknowledge them so a future bisect / revert reader knows what they're actually reverting.
## Open questions for the human (optional)
- Are the action bumps deliberate (vetted v6 / v3 release notes) or incidental? They're not in the PR description, so flagging in case they rode in via an editor / agent autocomplete rather than an intentional bump.Claude Opus | 𝕏
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Closes the loop on the release-plz governance (follow-up to #9 + the v0.1.3 manual release).
Context
The path-dep history trap is healed: the manual v0.1.3 release moved the crates.io baseline to a clean git-dep commit (
6e78257), and the release-plz run right after it ranrelease-prcleanly (nocargo packageerror, no 422,{"prs":[]}). The stale-branch 422 is auto-pruned (#9). So release-plz works again.The remaining gap (flagged by the reviewer on #9):
release-plz/actionswallows a release-pr HTTP 422 as a warning and reports no PR, so a future glitch would stall releases silently — indistinguishable from a quiet week. That's exactly how releases quietly stopped before v0.1.3.Fix
A guard step that runs only when
prs_created == 'false':release-plz-*PR is already open (the normal "updated, not created" path);feat/fix/perf/breaking!) since the lastv*tag, it::error::s and fails the job.So a swallowed failure surfaces, while genuine no-ops (only
chore/ci/docs, or nothing since the tag) pass. Ifrelease-prhard-errors (e.g. the old path-dep case), the step already exits 1 — loud — and this guard is skipped.Verification note
On merge, release-plz runs with
prs_created=false(nothing to release since v0.1.3) — the guard finds no release-worthy commits sincev0.1.3(the merge is aci:commit), so it passes. No false positive.