Release tooling: fix the push race, add --yes - #114
Conversation
Two of the three changes from #84, rebased onto current main. That PR is 89 commits behind and its third change — renaming the tag prefix from `v2-` to `desktop-` — is deliberately left out; see the PR description. **Push race.** `merge-updater` and `refresh-screenshots` both commit to the default branch and can finish at the same time, and neither rebased before pushing, so whichever lost got a non-fast-forward rejection. That is what failed the v2-2.1.0 gallery job. Both now rebase and retry, up to five times, then fail loudly. Verified the loop under `set -euo pipefail`: it succeeds on recovery, gives up after five, and the `[[ ]] && { exit 1; }` guard does not trip `set -e` on the non-final attempts. **`--yes` / `-y`.** Auto-confirms the three gates for non-interactive use. Piping `yes` into the script stays blocked, which is correct — this is the sanctioned way to skip the gates on purpose. The prompts collapse into one `confirm` helper; verified it proceeds under `--yes` and on a typed `y`, and aborts on `n` and on empty stdin, so it still fails closed.
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f37a02eb7b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| if git push origin "HEAD:$branch"; then break; fi | ||
| echo " push attempt $attempt rejected; rebasing on origin/$branch…" | ||
| git pull --rebase origin "$branch" |
There was a problem hiding this comment.
Prevent older release runs from overwriting the updater manifest
When two v2 tag workflows overlap and both merge-updater jobs check out before either pushes, the newer release can publish first, after which the older run's rejected push is rebased and retried successfully. That places the older latest.json on top of the newer one, so the fixed updater endpoint stops advertising the newest release indefinitely. The workflow has no cross-run concurrency or version check, so retry only after confirming the rebased manifest is not older, or serialize release publication by version.
Useful? React with 👍 / 👎.
Two of the three changes from #84, rebased onto current main. #84 is 89 commits behind and conflicts in
v2/release.sh.Push race —
merge-updaterandrefresh-screenshotsboth commit to the default branch and can finish at the same time; neither rebased before pushing, so the loser got a non-fast-forward rejection. That is what failed the v2-2.1.0 gallery job. Both now rebase and retry up to five times, then fail loudly.Verified under
set -euo pipefail: succeeds on recovery, gives up after five, and the[[ ]] && { exit 1; }guard does not tripset -eon the non-final attempts (it is a non-final element of an AND-OR list).--yes/-y— auto-confirms the three gates for non-interactive use. Pipingyesstays blocked by the auto-mode classifier, which is correct; this is the sanctioned way to skip them deliberately. The three prompts collapse into oneconfirmhelper. Verified: proceeds under--yesand a typedy, aborts onnand on empty stdin, so it still fails closed.Deliberately not included
The
v2-→desktop-tag rename. It is the only real conflict in #84 and it is load-bearing in ways worth doing on its own:bump-tapjob rewrites the cask from the tagdocs/RELEASE-DECISION-2026-09-09.mdandv2/CHANGELOG.mdare written throughout inv2-X.Y.Ztermsv2-*convention in several placesRenaming the release namespace immediately before the first release in three months — with four issue reporters waiting to confirm fixes — is avoidable risk. Better as its own change, after the beta ships.
#84 can stay open for that piece, or be closed and redone.
Written by Claude, Bryan's AI coding assistant, and posted on his behalf.