feat(decide): a bump label changed on the rolling PR re-prepares it at once, and a stale prepare cannot be merged #1545
Labels
No labels
bump
major
bump
minor
bump
patch
kind
bug
kind
chore
kind
docs
kind
epic
kind
feature
loop/paused
mirror-drift
priority
critical
priority
high
priority
low
priority
medium
size
L
size
M
size
S
size
XL
status
blocked
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
frankenbit/release-toolkit#1545
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Symptom, measured on an adopter (frankenbit/storey#20, 2026-10-04). A
bump/patchlabel attached to the open rolling PR at about 11:16 changed nothing on it: #20 still readchore(release): v0.2.0at its prepare commit168b65f(updated_at11:17:28). The label is read only whenrelease.ymlnext runs on a push tomain(integration.md, When the label takes effect). The next push to Storey'smainwas a merge some minutes later, made for that purpose, and its release run had not started yet when last checked. Until a run arrives, the label sits on a PR whose content contradicts it.Why it matters: it can cut the wrong version. The cut does not consult the label.
detectCut(internal/decide/decide.go) takes the version from the prepare commit's subject. OnlyupdateDecisionreadsreadRollingBumpLabel, and no other reader ofbump/*exists besidessetup-bump-labels. So an operator who addsbump/patchand then approves the PR, the order the docs suggest, merges and tags v0.2.0 withbump/patchshowing on the PR. Nothing in between refuses it.The case is routine for an adopter whose numbering is not plain SemVer. Storey cuts
0.<milestone>.<increment>, one release per increment. Every increment brings afeat:commit or anaddedfragment, so every new rolling PR opens as a minor bump and needsbump/patchby hand.Proposal
bump/*label is added to or removed from the open rolling PR, run decide and prep in rolling mode againstmain, not against the PR's merge ref, so the PR's title and changelog follow at once. Forgejo'spull_requestevent haslabeledandunlabeledtypes. Whether Forgejo 15.0.7 (our instance) fires them on a bot-authored PR from a same-repo branch is unverified; measure it before relying on it.bump/*label (or the auto-detected bump, when there is no label) yields. This part prevents the wrong cut, and it still holds when (1) is queued, cancelled or unsupported by the forge.Acceptance criteria
main, attaching or removing abump/*label on the open rolling PR re-titles and re-composes it within one workflow run, or the docs say plainly why it cannot and what to do instead.Reported from Storey's adoption (#1478).