Repository navigation
ci(dependabot): auto-merge gate no longer counts by-design skipped pytest jobs as failures - #3149
Conversation
…d pytest jobs as failures dependabot-auto-merge.yml waits on every check-run named build or pytest* and treated any completed non-success conclusion as a failed gate. Since the #2945 tiering every PR carries 'pytest (base, inline fallback)' and 'pytest (push, absolute failures)' as completed/skipped — they run on other events — so the gate answered 'a gating check failed' on every Dependabot PR from mid-September on, with build and pytest (head) green beside them, and the queue filled with unreviewed green patch/minor bumps (3100, 2967, 2965, 2830 merged by hand today). Exempt 'skipped' only. A behavioural test executes the step's script under bash with gh stubbed: skipped+success passes, failure/cancelled/ timed_out/action_required still block. The test skips on a bash without mapfile (macOS /bin/bash 3.2); ubuntu-latest runs it. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
pytest (head) runs its suite with '|| true' and is green whatever the tests do; the unit verdict is the 'regression diff' job, which the ^build$|pytest filter never selected. With skipped rows no longer failing the gate, a patch/minor bump that breaks unit tests would have auto-merged. New test runs the workflow's own jq filter under real jq. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
merge-train: on this train. I pushed one commit ( Why: What changed:
Not addressed here: the job is guarded on |
|
Correction to the note above: this PR rides the next train (with 3148, 3157's sibling batch), not this one. The pushed fix and keyword stand. |
`regression diff` needs the pytest jobs, so GitHub creates its check-run only after `pytest (head)` finishes. In that window every gating row is green or skipped, and the gate read "nothing pending" and passed without the unit verdict. A missing `regression diff` row is now pending, and a poll where every row is skipped no longer counts as green. merge-train: mechanical fix on our own PR, per the merge-train note. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
merge-train: pushed Finding: Fix:
The suite is 8/8 locally (bash 3.2 with a Not addressed:
Both pre-date this PR. |
Fixes #2994
Problem
dependabot-auto-merge.yml's Wait for build + pytest to pass step greps every check-run namedbuildorpytest*and treats any completed non-successconclusion as a failed gate. Since the #2945 tiering every PR carriespytest (base, inline fallback)andpytest (push, absolute failures)as completed / skipped (they run on other events), so the gate has answereda gating check failedon every Dependabot PR since mid-September — withbuildandpytest (head)green right beside them. The Dependabot queue filled with green patch/minor bumps nobody had looked at; today's merge train merged #3100, #2967, #2965 and #2830 by hand after re-running their flaky journey-smoke and reading the auto-merge log.Fix
One predicate:
skippedis exempt. Every other non-success conclusion (failure,cancelled,timed_out,action_required) still blocks.Test
tests/unit/test_dependabot_automerge_skipped_gate.pyextracts the step'srun:from the workflow YAML and executes it under bash withghstubbed to answer the rows — the script that runs on the runner is the script under test. With the fix reverted, exactly the skipped-rows case fails (verified in apython:3.13-slimcontainer; the test skips on macOS's bash 3.2, which has nomapfile).Lane C (
.github/workflows/), notdeploy-dev.yml. No behaviour change for majors — they are still held for a human by the eligibility step.🤖 Generated with Claude Code