Repository navigation
Cancel superseded PHPUnit runs per pull request - #751
Conversation
|
Security review of exact head d5bf1d0 (tree e9ffdf4ba73542970616743b97f8b3f833da6d6e): no blocking finding. The change is limited to phpunit-feature.yml. Its concurrency key uses event plus PR number so only a newer cycle for the same pull request is superseded; main and manual runs use unique run IDs, and cancel-in-progress is false outside pull_request. Both feature and final qualification retain always() failure reporting while adding !cancelled(), so policy/test failures remain visible and a superseded run can terminate. Workflow permissions, action pins, test/coverage commands, policy gates and cleanup steps are unchanged. Hosted predecessor 40138507216 proves automatic cancellation of the live feature job while cleanup completed; its final-gate failure is preserved evidence for the qualification guard added by this exact head. Central policy, actionlint and repository contracts pass. Merge remains gated on terminal checks for this exact head. The shared maintainer account cannot formally approve its own pull request, so this comment records the independent Security review. |
|
|
Hosted cancellation proof for current
The source commands, checks and cleanup remain intact, and main/manual cycles use independent run identities. The temporary same-commit base probe did not trigger PHPUnit and was removed; the PR targetsmain. Retargeting alone was not the #745 duplicate trigger: its owner confirmed that a close/reopen after retargeting created the extra run. |
|
PR #751 merged normally at Automatic cancellation is measured: the superseded live feature job stopped35seconds after its successor was created; no manual cancel was used for that proof. All test/coverage/policy and cleanup commands remain intact. Main and manual runs have independent run IDs. Independent main verification is now running at this exact merge: PHP qualification, CodeQL, Sonar, and the public-boundary workflow (already passed). Keep #750 open until this final verification is terminal; do not reinterpret the earlier failed policy-contract probe or cancelled predecessors as passing runs. |



Updating or reopening a PR could leave duplicate PHPUnit cycles consuming runners. Job-level
always()also kept an older job alive after cancellation was requested. Give each PR one native concurrency group and allow its feature/final qualification jobs to stop when cancelled, while continuing to report dependency failures.Main and manual qualifications have independent run IDs. All test, coverage, action-policy and cleanup commands are preserved; cleanup steps still run unconditionally. Actionlint1.7.7 and the current central action policy pass locally. Hosted cancellation and full current-head qualification are in progress; the earlier policy-contract failure is preserved as failed, with its fail-closed behavior verified.
Refs #750. GitHub documents why a bare job-level
always()resists cancellation. The temporary base probe did not trigger PHPUnit and is removed; the PR is back on main. Native fixture execution/source and publisher workflows are unchanged.