ci: promote release branches by fast-forward push - #543
Merged
Conversation
thedancingdeveloper
force-pushed
the
fix/promotion-ff-push
branch
2 times, most recently
from
September 2, 2026 21:39
80d8335 to
d52c9b7
Compare
GitHub has no fast-forward merge method, so the PR-based promotion rewrote the promoted SHAs on every merge and deadlocked the next stage's ancestry gate — repaired by hand on every release to date. promote.yml keeps every gate (PROMOTE confirmation, environment hooks, ancestry, green source checks, verified dev deployment receipt) and ends in a plain fast-forward push with the workflow token instead of opening a PR — REST only, the runner has no gh CLI (#460). main and prod move from classic branch protection to the release-branch-promotion ruleset, whose only bypass actor is the Actions app; no other update path into a release branch exists. The workflow dispatches the ref-bound pipelines (build.yml, and ci.yml on prod for the production APK) that a token push does not trigger. The promotion contract test now pins the push model. VOGT_PROMOTION_TOKEN is no longer used and can be revoked. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01RzFCTnWGff1k4FyX1HQCYM
thedancingdeveloper
force-pushed
the
fix/promotion-ff-push
branch
from
September 2, 2026 21:56
d52c9b7 to
c6a88ef
Compare
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.
Why
The release chain (
dev → main → prod → tag) is fast-forward-gated, but GitHub has no fast-forward merge method: the rebase-merge promotion PRs rewrote the promoted commits' SHAs on every merge, making the source branch a non-ancestor of the target and deadlocking the next promotion. This has been repaired by hand on every release to date (see the operator notedocs/local/RELEASE-PROMOTION-BLOCKER.md).What
PROMOTEconfirmation,promote-main/promote-prodenvironments, ancestry check, greenci/runner-policyon the source SHA, verified dev deployment receipt — and ends in a plain fast-forwardgit pushwith the workflow token instead of opening a PR. No--force: the server rejects any non-fast-forward even if a gate regressed.release-branch-promotionruleset (restrict updates + deletions + force pushes), whose only bypass actor is the GitHub Actions app. No PR can update a release branch at all.build.yml(branch-scoped sha image tags) andci.ymlonprod(production Android APK). The promoted commit itself keeps the checks it earned ondev— a fast-forward moves the ref to the identical SHA.docs/DEPLOYMENT.md§7.1 rewritten;VOGT_PROMOTION_TOKENis no longer needed and can be revoked. Stale README note about the once-privatevogtpackage removed.🤖 Generated with Claude Code
https://claude.ai/code/session_01RzFCTnWGff1k4FyX1HQCYM