Repository navigation
2026.11.15.1: CI time cost round two: main's test build reused, tests at profile ci, a long case divided by the cases it declared, the matrix scan side by side - #937
Draft
Sunrisepeak wants to merge 5 commits into
Conversation
… built with profile ci; main's test build reused; the matrix scan side by side; a cancelled run releases its group
…so a long case is divided by the cases it declares
… first start on a fresh Windows runner outlasted the slow child
…me's environment too, and collided on Windows with another project's install
… legacy code-page check runs the tests as the job built them (profile ci)
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Design:
.agents/docs/2026-11-14-ci-and-release-time-cost-design.md§6 (round two; the owner confirmed W1–W4, the division of a case by the cases it declares, and the macOS paths on 2026-11-15).Measured (PR run 43602794812, 97.6 min wall, 265 runner-minutes queued)
target-matrix / coverage(if: always()) queued 8.5 min for a runner and held the concurrency groupe2e/openkal/trees1373 s andsets1375 s ran their cases in one process each, the longest case 564 sThe macOS unit step took 31 min and the macOS matrix scan 29.4 min (59 cells one after another).
Changes
.github/tools/source_mtimes.py record), as the artifactmcpp-unit-build-<host>; a pull request's archive stage restores it and gives each unchanged file a time older than every output, so only what changed is built again. An artifact and not the cache: the repository's cache holds 9.98 of its 10 GB, and a build directory there would evict the hosts' homes.[profile.ci](-O0, no debug information, strip) for the tests on Linux (archive), macOS and Windows (mcpp-unitinputprofile): the library and its unit tests took 8988 s of compiler time at the default release profile and 4183 s with it.exceptandoptional, a listed case longer than its share with two or more measured declared cases is divided by the innermost of them: each part but the last selects its cases with?<id>(a case since removed is notmissing), the last selects the case without them (!<id>), so an unmeasured case runs once. A divided case's estimate is at least the sum of its declared cases. The store's case durations are kept by program and id (layersandsetsexist in two programs each).coveragerunsif: ${{ !cancelled() }}.scan.shruns each cell in its own directory,MATRIX_JOBSat a time (the processors), and prints in the table's order.mcpp new(kMtestRelease), so the division applies to them.xlings::state_dir). It saves the home's environment (subos/default/.xlings.json) as well as the project's, and with the turn in the project's directory it collided on Windows with another project's install (e2eimages/1033, run 43632995462). TestXlingsState/AProjectsInstallTakesTheHomesTurn.mcpp.build.stage::stage_file(a temporary of each writer's own, an equal destination counted as published); with one temporary name for every writer, one removed the other's before its rename (publishing host tool 'openkal-tools:okld' failed: No such file or directory, macos-arm64, run 43636471152). Staging temporaries carry a random part as well as the clock. TestBuildStage/WritersOfOneDestinationDoNotCollide.MCPP_TEST_PROFILE=ci); under the default profile it built every test again and passed its 600 s timeout.ConcurrentChildren/AReaderReturnsWhenItsOwnChildExitsstarts both programs once before its rounds; a first start on a fresh Windows runner outlasted the slow child (round 0 of run 43626158365, -427 ms, where a shared pipe returns both together).Local:
TestSchedule/ACaseIsDividedByTheCasesItDeclaredand the scheduling tests;test_source_mtimes.py; a demo of four declared cases 8.2 s → 3.0 s, a renamed case run once in the last part and its old name not missing; W1 restore with no change 0.4 s, one interface module changed 88 s (cold 248 s).