Repository navigation
CI: skip queue suites already passed on the exact same merge (#1130) - #1176
Conversation
A merge-queue group built straight onto the base its pull request run was tested on merges the same two parents into the same tree. When that pull request run passed, PHPUnit Feature now skips only its feature suite and Shared Server fixtures skips its fixture jobs. Repository contracts, the central action policy, Public Boundary and the Sonar queue analysis still run on every group. A passing same-repository pull request run records a marker artifact named for the workflow, the merge's first parent and its tree. The group checks that a marker exists for its own first parent and tree, and that the run that uploaded it is a completed, successful pull_request run of the same workflow file, from this repository (no forks), on exactly the group's second parent. Groups stacked on a queued predecessor, forks, failures and any API doubt run every suite. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Addresses SonarCloud S4036 (PATH lookup) and S6535 on #1176. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
|
Security: PASS (head Integrity of the skip decision (
Forgery analysis: the marker name is chosen by the pull request run's own workflow code. Faking one means changing Who may skip:
Token: Two notes, neither blocking:
|



Refs #1130. Cuts merge-queue time for the entries whose exact merge was already tested in the PR run, and keeps every check that run passed.
Before (measured)
Change
A group skips a suite only if a pull request run already passed the same merge: same first parent, same second parent (the PR head), same tree.
PR run: after the suite passes, the run uploads a marker artifact
tested-merge-<workflow>-<base>-<tree>(kept 7 days). In PHPUnit Feature the upload is inqualification; in fixtures it is inresult. The upload hascontinue-on-error, so a failed upload just makes the queue run the suite.Merge group (
scripts/ci/tested-merge.mjs check): skips only if all of these hold:completed/successpull_requestrun of the same workflow file, in this repository, from a head branch in this repository (no forks), withhead_shaequal to the group's second parent.Anything else runs the suite: a group stacked on a queued predecessor (its first parent was never tested), a fork, a failure, a missing token, or an API error.
What is skipped:
featurejob.PHPUnit feature suiteshows as skipped, which GitHub counts as passing for a required check.qualificationaccepts that only whenevent=merge_groupandtested=true.changesoutputsrun=false, so every fixture job is skipped.aggregate.mjsalready requires all of them to be skipped and now gives this as the reason.Never skipped: Central action policy preflight (reads central
.githubmain live), Repository contracts (OpenAPI evolution, corpus policy, Composer audit, trust tests), Public Boundary, the Sonar queue analysis, and every suite on push, PR and dispatch.Expected after
queueQualified), so nothing changes there.Checks run locally
node --teston TestedMergeTest (new, 33 cases), ServerParityAggregate, MergeGroupTriggers, MergeQueueSonar, ServerParityParts: 160/160 pass. All 10.mjssuites that read workflows: 233/233 pass. Against the old workflows, the new tests fail (5 failures), so they detect a reverted workflow.TESTED_MERGE = truefrom the qualification gate fails the gate test.qualification_policy.py validate --target server,.githubmain): pass. Only actions already pinned in the repo are used.check-docker-workflow-isolation.py: pass (calls go throughscripts/ci/tested-merge.sh, the same wrapper pattern aschanges.sh). The docker isolation, Composer, pip, SBOM and cargo trust unittests: 174 OK.PhpunitFeatureWorkflowContractTest.phpis updated for the newneedsand gate. PHP wasn't available locally, so CI runs it.For Security review
This is a CI trust change. Please check:
head_repository.idmust equalrepository.id).actions: readis added to one new job in PHPUnit Feature (tested-merge). The fixtureschangesjob already had it. The token goes only to the merge-groupcheckstep, never to PR runs.PHPUnit feature suiteshows as skipped on a tested group. The alternative is gating each of its ~20 steps, which is more invasive.merge_group.base_shaandpull_request.base.sha(corpus/OpenAPI base). Matching on the first parent keeps those identical.Ruleset (not changed here)
max_entries_to_build: 5,max_entries_to_merge: 5andALLGREENgrouping are already live (2026-11-11). I am proposing no other ruleset change in this PR. I'll put a separatecheck_response_timeout_minutesproposal on #1130.🤖 Generated with Claude Code