ci(release): treat OBS "finished" as build-complete, not busy - #151
Merged
Conversation
The trigger-obs gate failed on v0.3.7 despite every build succeeding. The wait loop counted "finished" as a non-terminal state, but in OBS that means the build is done and only repository publishing remains — which is asynchronous and can lag arbitrarily. Timeline from the v0.3.7 run: the rebuild was correctly detected as started, went "building" -> "finished" at ~4 minutes, then sat at "finished" for the remaining 31 until MAX_WAIT expired and failed the release. Publish latency is not a build failure. Drop "finished" from is_busy so the gate answers the question it exists to answer — did THIS release build on OBS — and log a note that the download repo may still lag. "signing" stays busy: it is normally seconds and reaching it already implies success.
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
The
trigger-obsgate failed on the v0.3.7 release even though every OBS build succeeded. Actual log from that run:is_busy()countedfinishedas non-terminal. In OBS,finishedmeans the build is done — what remains is repository publishing, which is asynchronous and can lag arbitrarily. So the loop waited for a transition that wasn't coming on any useful timescale, and failed a release whose builds had all succeeded ~4 minutes in.This is the tail of the #134 fix. Removing the old false-green exposed a pre-existing weakness in the busy-state list: previously the loop exited on its first poll and never sat long enough to hit it. Credit where due — the reviewer on #134 flagged exactly this risk ("if a real rebuild legitimately takes ~28-30 min, it could now hit MAX_WAIT and fail where it previously passed") and I judged it non-blocking. It reproduced on the second real release.
Fix
The gate exists to answer "did THIS release build on OBS?" — and at
finishedthat question is answered. Publish latency isn't a build failure.signingstays busy: normally seconds, and reaching it already implies a successful build.failed|unresolvable|brokenis unchanged, so genuine build failures still fail the release.finished, so the output doesn't imply the download repo is immediately current — it can lag a few minutes.finisheddoesn't get "helpfully" added back.Rather than bumping
MAX_WAITagain — which just moves the arbitrary guess — this removes the wait that shouldn't have existed.Validation
YAML parses; full suite green via the pre-push gate. Real behavioural proof comes on the next release, same as #134.