Repository navigation
ci(release): point backport hotfixes at rollback.yml - #19
Merged
Merged
Conversation
Promote accepts a hotfix only when main has its changes line for line. A backport, whose fix main already has in another form (it shipped on main first, or main rewrote those lines since), can never pass that check: apps-management v2.5.3 re-did #1360's holdings change on top of v2.5.2 and bumped v2.5.2's pins, so every file conflicts with main. Promote stays strict. Its refusal, in the log and on Slack, now gives the exact rollback.yml command for the tag, and the `released` notification runs the same check (non-blocking, hint only) to post the rollback command instead of the promote one when promote would refuse. README gains a "Hotfix releases" section with the full process, and CLAUDE.md records the decision so promote does not grow an override input. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WnSMi1nRcpXdsEYeDwos9U
gpmayorga
marked this pull request as ready for review
October 22, 2026 11:59
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.
Problem
Since #18, promote accepts a hotfix release (a tag not on
main) only when its delta from where it leftmainreverse-applies tomain's tree, i.e.mainhas every change line for line. That worked for invest-v3v3.3.5: its two commits landed onmainunchanged (centrifuge/apps-invest#363, centrifuge/apps-invest#341) and nobody touched those lines since.It can never pass for a backport, where
mainalready has the fix in another form. apps-managementv2.5.3is one:src/utils/holdings.tsand its test were added separately on both sides: onmainby centrifuge/apps-management#1360 (Oct 7), and on top ofv2.5.2by centrifuge/apps-management#1416, with different comment text and an extra function onmain.066d1d65bumpsv2.5.2's dependency pins;mainhas moved past them differently.All five files conflict even in a 3-way merge, so no merge-back PR can make
mainmatch without downgrading it. Ancestry is not an option either, since the app repos are squash-only.v2.5.3went out throughrollback.yml, but nothing told the deployer to do that: the release notification said to promote, and promote's refusal said "Merge the hotfix into main".Change
Promote stays strict (no override input). Instead the two places a deployer reads now give the right command:
::error::and the Slack failure reason): when the merged-back check fails, it says to merge the hotfix intomainif it is not there yet, or otherwise to ship it withgh workflow run rollback.yml --repo <repo> --ref main -f tag=<tag> -f environment=prod.releasednotification (notify-production-promotion): checks out the tag with full history and runs the same test as promote's verify step. When promote would refuse, the Slack post and job summary give the rollback command (plus "if not on main, merge it first, then promote") instead of the promote one. The step iscontinue-on-errorand defaults to the normal promote message, so it can never block the notification. Promote's own check remains the gate; if the copy drifts, the worst case is a wrong hint.Docs:
rollback.yml(both apps already are).app-rollback.ymland promote gets no override input.Validation
actionlint1.7.7 (with shellcheck) andyamllint(relaxed, line-length off): clean.v2.5.3vs currentmain: routerollback; the Slack text and summary give the rollback command; promote's verify step refuses with the new message naming the 5 files.v3.3.5vs currentmain: routepromote; message unchanged from today; promote's verify step passes.Rollout
No contract change: inputs, secrets and permissions are untouched (the notify job already has
contents: read). Takes effect on the nextreleasedevent and the next promote run after merge.Generated by Claude Code