You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The stale-promotion guard skipped any run whose commit was no longer the
branch head. If commit A passed its gate but was superseded mid-run by
commit B, and B then failed tests, A's promotion was skipped and the
deploy tags stayed on pre-A code with no automatic recovery (Cursor
finding on #5712).
A first-attempt run promoting an ancestor of the branch head is always a
forward deploy — runs on a ref are serialized by the concurrency group,
so nothing newer can have promoted first. Only re-runs of superseded
commits (a rollback attempt) and force-pushed-away commits are skipped.
Same semantics applied to the GHCR latest-tag guard.
echo "::warning::Skipping promotion of ${{ github.sha }}: ${GITHUB_REF_NAME} has moved to ${HEAD_SHA}. Moving the deploy tags to this commit would deploy stale code; push a revert commit to roll back instead."
echo "::warning::Skipping promotion of ${{ github.sha }} (branch compare: ${STATUS}, attempt ${{ github.run_attempt }}). Moving the deploy tags here could deploy stale code; push a revert commit to roll back instead."
315
+
echo "fresh=false" >> $GITHUB_OUTPUT
314
316
fi
315
317
316
318
- name: Promote images to deploy tags
@@ -419,18 +421,19 @@ jobs:
419
421
username: ${{ github.repository_owner }}
420
422
password: ${{ secrets.GITHUB_TOKEN }}
421
423
422
-
# Same protection as promote-images: a re-run of an old run must not
423
-
# move the public latest tags back to a stale commit. Immutable tags
424
-
# (sha and version) are still published — only latest moves are gated.
424
+
# Same monotonic guard as promote-images, applied to the public latest
425
+
# tags only — immutable sha and version tags are always published.
0 commit comments