diff --git a/.github/workflows/backport-approval-check.yml b/.github/workflows/backport-approval-check.yml index f37a52505c0..6f92f08935e 100644 --- a/.github/workflows/backport-approval-check.yml +++ b/.github/workflows/backport-approval-check.yml @@ -58,7 +58,15 @@ permissions: concurrency: group: backport-approvals-${{ github.event.pull_request.number || github.ref }} - cancel-in-progress: true + # Never cancel the run in progress: this is a required status check, and GitHub + # takes the LATEST check run with this name -- a cancelled in-progress run's + # terminal state can land after a newer run's success (the job is seconds long) + # and block the merge as a failed required check. GitHub still keeps at most one + # pending run per group and replaces it on a newer event, but a replaced pending + # run is cancelled before its successor even starts, so the last word on the + # commit is always a real verdict. A skipped intermediate event loses nothing: + # the job reads the live labels and reviews at run time, not the event payload. + cancel-in-progress: false jobs: backport-approvals: