Skip to content

fix(release): a build that is still running is not a failed build - #801

Open
remyluslosius wants to merge 1 commit into
mainfrom
fix/release-status-pending
Open

fix(release): a build that is still running is not a failed build#801
remyluslosius wants to merge 1 commit into
mainfrom
fix/release-status-pending

Conversation

@remyluslosius

Copy link
Copy Markdown
Contributor

Found by using the tool on the real v0.7.1 tag.

The release was tagged while the main-branch Quality gate was still running,
and make release-status reported:

FAIL  Q1  Quality and security gates

on a job that had not finished. GitHub leaves conclusion empty for an
in-progress run, and the checker read empty as non-success.

Why this matters more than a wrong label

This is the same error the tool exists to prevent: presenting the absence of
data as a fact.
"The release build failed" and "the release build has not
finished" are different claims, and the first sends someone looking for a break
that does not exist - at exactly the moment they are deciding whether to
promote a candidate.

It is the third time this shape has come up in this work. len(t.Steps)
recorded instead of the journal. Plan.Validators rendered as "no validators"
when the planner never populates it. Now an empty conclusion read as a verdict.

The fix

PENDING is its own status. It still blocks, so nobody promotes a
candidate whose build has not finished, but it no longer accuses.

Where several check runs share a name - normal after a re-run - a finished
result outranks a pending one, so a stale queued entry cannot mask a completed
pass.

Tests

The one that matters asserts PENDING in BAD and PENDING != FAIL.
Blocking and accusing have to stay separable, and a future refactor that
collapses them would fail here.

Found on the v0.7.1 tag. The release was tagged while the main-branch Quality
gate was still running, and `make release-status` reported

    FAIL  Q1  Quality and security gates

on a job that had not finished. GitHub leaves conclusion empty for an
in-progress run, and the checker read empty as non-success.

That is the same error this tool exists to prevent: presenting the absence of
data as a fact. "The release build failed" and "the release build has not
finished" are different claims, and the first one sends someone looking for a
break that does not exist.

PENDING is now its own status. It still blocks, so nobody promotes a candidate
whose build has not finished, but it no longer accuses. Where several entries
exist for one check name, a finished result outranks a pending one, so a stale
queued entry from a re-run cannot mask a completed pass.

Two tests, and the one that matters asserts PENDING is in BAD and is not FAIL:
blocking and accusing have to stay separable.
@github-actions github-actions Bot added the size/M label Aug 4, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant