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
{{ message }}
Repository navigation
PR hygiene cancels its own runs, and a cancelled run of the required check blocks the merge #144
pr-hygiene.yml runs on opened, edited, reopened, synchronize, labeled, unlabeled, milestoned, demilestoned, with concurrency: { group: pr-hygiene-<number>, cancel-in-progress: true }. A pull request that is pushed and then given its labels, milestone and body in quick succession starts four or five runs, and the in-progress ones are cancelled. "Labels and issue link" is a required check on the release branches. A cancelled run of it leaves the pull request BLOCKED, even beside a later successful run, until the cancelled run is re-run by hand. Re-running more than one at once cancels again.
What you ran
On 2026-10-28, merging the 2.3.0 pull requests. On 2026-10-29, gh run list for test/ef-sql-server (#142) at 13:43 showed five PR hygiene runs in one minute, three of them cancelled. docs/walkthrough (#141) and feat/async-stream-option-result (#139) show the same.
What you got
Cancelled runs of a required check, a BLOCKED merge state, and a manual re-run one at a time.
What you expected
Each event's run completes. The check takes seconds and reads only the event payload, so there's nothing to save by cancelling it. The latest run decides the check.
Proposal
Set cancel-in-progress: false, or drop the concurrency group. Note that with a group, a newer pending run still cancels the older pending one even when cancel-in-progress is false, so measure which choice leaves no cancelled run. Without a group, the runs may finish out of order. Check which result GitHub keeps for a required check when an earlier payload (no labels yet) finishes after a later one. Record what was measured in the workflow's header comment.
Done when
On a test pull request with labels, milestone and body set within a few seconds of the push, every hygiene run completes, none is cancelled, the required check ends green, and the pull request isn't BLOCKED by it.
Fixed in #149: the concurrency group is dropped from pr-hygiene.yml.
Measured on 2026-10-29 on two draft pull requests whose labels, milestone and body were set within seconds of opening (five events each):
Group with cancel-in-progress: false: three of four runs cancelled. A newer pending run replaces the older pending one, so this leaves cancelled runs. (They had started no job, so no cancelled check run and nothing was blocked.)
No group: all five runs completed, none cancelled. Earlier runs failed on a payload without labels; the pull request was CLEAN once CI passed. The newest run decides the required check, not the last to finish: with the first run held back 75 s to finish after the one that succeeded, it was CLEAN too.
#149 itself is the done-when test: opened, then labels, milestone and body set at once. Seven runs, none cancelled, the last two green. The header comment of the workflow records the measurement.
Activity
CaffeinatedCoder commentedon Oct 29, 2026
Fixed in #149: the concurrency group is dropped from
pr-hygiene.yml.Measured on 2026-10-29 on two draft pull requests whose labels, milestone and body were set within seconds of opening (five events each):
cancel-in-progress: false: three of four runs cancelled. A newer pending run replaces the older pending one, so this leaves cancelled runs. (They had started no job, so no cancelled check run and nothing was blocked.)#149 itself is the done-when test: opened, then labels, milestone and body set at once. Seven runs, none cancelled, the last two green. The header comment of the workflow records the measurement.
CaffeinatedCoder commentedon Oct 29, 2026
Merged in #149 (85e0713) into release/2.3.0. The concurrency group is gone; the measurement is in the workflow's header comment and above.