Skip to content

CI test management: what a pull request runs #369

Closed

Description

@berkgeveci

What a pull request runs, and how CI keeps the suite trustworthy: run less on pull requests where history says it loses nothing, keep the full matrix before anything reaches main, and keep flaky tests out of the gate without losing what they check.

Plan: CI test management plan (the wiki), with the measurements. This issue started as step 5 alone; its 2026-11-05 measurement of test selection is on that page, unchanged.

Today (last 20 runs, 2026-11-05 to 11-08)

  • 31 jobs, about 250 runner-minutes a run, on every pull request, a one-line docs change included. About half is the suite on three Python versions.
  • Wall time 12–21 minutes when nothing queues; with several pull requests open, jobs queued 27–33 minutes for a runner.
  • Only lint and docs are required checks: a red test job does not block a merge.

Steps

Open questions (on the wiki page): Metal on every code change or by selection; whether l2-cells can drop to the quick tier on PRs.

Activity

  1. added this to the 0.8 milestone on Nov 5, 2026
  2. berkgeveci commented on Nov 5, 2026

    @berkgeveci
    CollaboratorAuthor

    The prototype is on branch ci/test-selection-prototype of berkgeveci/tack-fork (https://github.com/berkgeveci/tack-fork/tree/ci/test-selection-prototype/tools/test_selection), on top of #368. It holds the recorder, the replays and this period's history; its README says how to record a map and replay it.

  3. self-assigned this
    on Nov 7, 2026
  4. changed the title [-]CI: select tests by what a pull request's changes reach[/-] [+]CI test management: what a pull request runs[/+] on Nov 9, 2026
  5. berkgeveci commented on Nov 9, 2026

    @berkgeveci
    CollaboratorAuthor

    Replay with CI's own map (2026-11-09). The first map CI recorded (#395's run, 3.13's four shares, at e882cd84): 196 test files, 597 repository files they run. Replayed with #397's rules (tools/testmap.py select) over the same history as the prototype:

    278 merged PRs, 2026-10-14 to 11-05
    Path filter alone (#390) 89% of today's test time
    Plus selection by test file (#397) 72%

    No test job 31; everything 103; partial 144 (under 20% of the suite: 26; 20–90%: 42; 90%+: 76). The prototype's per-file figure was 68%; this map's rules are a little stricter (a file no test ran, data included, runs everything).

    Failures: none missed. Of the 18 failing PR runs, 6 got a partial selection (22–69% of the suite, two at 100%) and every failing test file was in it; the other 12 would have run everything.

    What runs everything: .github/ (28 PRs); tack/dataset/__init__.py (27: module-level code alone, which the recorder credits to no test); paths since renamed or removed (interop/vtk.py, lang/field.py: a replay artifact, a live PR diffs against today's main); benchmarks/ scripts no test runs; the MPI helpers (_vtk_algorithms_mpi.py), which the 3.13 shares skip; packages/*/README.md. A rule for unmapped __init__.py files and package Markdown would move 23 PRs from everything to 90%+ and the mean from 72% to 71%: not worth it. Narrowing the 90%+ group needs function granularity (the prototype's per-test figure was 63%).

    Recording cost: 3.13's shares took 8.4, 9.3, 17.6 and 10.2 min against 7.7–16.1 for the same shares in four recent runs without recording; one sample, so pushes to main will tell whether share 3's 17.6 is the recorder.

  6. berkgeveci commented on Nov 10, 2026

    @berkgeveci
    CollaboratorAuthor

    Done: every step is on main (#390, #391, #392, #394, #395, #397, #398). Seen working on real traffic: #401 ran 44 test files from main's map rather than the suite, and #385 merged through the merge queue (full suite on the merge commit; the push to main after it ran lint and docs only). The plan is on the wiki: CI-test-management-plan.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

enhancementNew feature or request

Type

No type

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions