Repository navigation
ci: weekly CI timing review and per-test timings from the unit legs (#1538) - #1542
Conversation
|
Coverage: 90.09% (unit tier, Python 3.14,
Per-file detail: the |
|
Verdict: NEEDS CHANGES at
H2's live firing is real: three foundation-ordering steps hit the 20-min step cap (runs 37710074044, 37710423353, 37710750303) in the 2026-10-08 01:00Z burst. The exact 20.2 p90 was not reproduced. Non-blocking: no test covers an empty job |
…1538) - unit-tests.yml (P3): the `test` and `integration` legs run pytest with --durations=30 --durations-min=1.0 --junitxml and upload the file as junit-unit-<version> / junit-integration-<version> (14 days); each upload is `if: !cancelled()` and `continue-on-error`, so it cannot fail a leg `Required checks passed` needs. No job renamed, no permission added. - ci-timing.yml: Mondays 07:23 UTC plus workflow_dispatch, read-only token (actions/contents: read), runs util/ci_timing.py against the newest earlier report as baseline and fails on a HARD threshold. - util/ci_timing.py: stdlib-only; lists every completed run in the window a day per query and reads jobs for an evenly spaced sample; a job counts by its own outcome, so a timeout in a cancelled run is measured; H1-H4 (H3 only as a regression on the baseline) and W1-W9; exit 1 HARD, 2 API, 3 crash. - docs: CI Timing Review in workflows.rst and process.rst; the unit-tests.yml line citations in workflows.rst and releasing.rst renumbered. - tests/project/test_ci_timing.py: offline against recorded fixtures. tests/project 466 passed, 1 skipped; test_tier_guard 109; docstring contract 7. Refs #1538
3077eba to
accde1c
Compare
|
Verdict: GOOD TO GO at
Fail-before: reproduced for every revert. Contracts: permissions, triggers and required contexts are unchanged. CI: Non-blocking:
|
Please follow the guide below
You will be asked some questions, please read them carefully and answer honestly
Put an
xinto all the boxes [ ] relevant to your pull request (like that [x])Use Preview tab to see how your pull request will actually look like
Searched for similar pull requests
Followed the coding style (
make pylint,make mypy,make isort)make testpasses, and a test case covers the changeAdded a changelog entry under
docs/source/changelog/and regeneratedCHANGELOG.md, if the change is user-visible — N/A — centralised in docs(changelog): shared 1.5.0 changelog — long-lived, merges last (#610, #616, #617, #618, #620) #657What is the purpose of your pull request?
Tick the commit type your subject line carries.
fix— corrects a defectfeat— adds a featureperf— changes performance, not behaviourrefactor— changes neither behaviour nor performancetest— tests onlydocs— documentation onlyci— workflows or build toolingrelease— bumps the version or rolls up a distributionchore— anything elseDescription of your pull request and other information
Refs #1538. P3 plus the periodic review; P1, P2 and P4–P8 are left out.
testandintegrationlegs add--durations=30 --durations-min=1.0 --junitxmland uploadjunit-unit-<ver>/junit-integration-<ver>(14 days), eachif: !cancelled()andcontinue-on-error: true. No job renamed, no permission added,--ignoreflags unchanged, nopython -m pytestin the new steps. Parity, ordering, gate and engine legs are not instrumented.<testcase>per test however many subtests it has, so a unit leg's file is about 0.6 MB (estimate), not several MB. The suite'stests=count includes subtests, so the review reads each testcase'stime.ci-timing.yml(Mon 07:23 UTC + dispatch;actions: read,contents: read; noworkflow_run) runs stdlibutil/ci_timing.py. It lists every completed run in the window a day per query (a filtered listing stops at 1,000; Pages had 1,154 that week) and reads jobs for an evenly spaced sample, printing the span read; about 625 calls (estimate) of the 1,000/hGITHUB_TOKENbudget. A job counts by its own outcome, so a timeout in acancelledrun (37323913186) is measured. H1, H2 and H4 are absolute; H3 needs a baseline and fires on a 25% p90 rise, and the absolute 30-min breach is W9. Exit 1 HARD, 2 API, 3 crash.workflows.rstandprocess.rst. Theunit-tests.yml:Ncitations inworkflows.rstandreleasing.rstare renumbered (281→297, 1250-1256→1277-1283, 1262-1283→1289-1310, 1402-1471→1429-1498, 1473-1483→1500-1510, 1474→1501, 1558-1612→1585-1639, 1559→1586, 1561→1588).3077eba23,--days 2, 487 calls): H2 fired (Plain unittest ordering (foundation)step p90 20.2 min against its 20-min step cap, so cells are hitting the cap). PR time toRequired checks passedp90 was 36.7 min, which is now W9, not HARD. Trend fits need 2 days of span.tests/project466 passed, 1 skipped (pre-existing);test_tier_guard109;test_docstring_contract7. Reverting each fix fails its tests; the P3 pin tests fail on main's workflow.