mirror of
https://github.com/rcourtman/Pulse.git
synced 2026-10-24 04:33:17 +00:00
06d78b66d3
The four Backend tests (api-N) shards took equal-count quarters of go test's list, which left them at 4.0, 10.6, 4.0 and 16.8 minutes on the first PR run, and at 1.9, 8.0, 1.5 and 10.3 minutes of go test time on the following main push (run 36560070496). Almost all of it sits in a few tests. One contract mock chart test runs about six minutes on the runner, and the 28 integration server tests at the end of the list take about twenty seconds each, so the fourth quarter held nearly half the package. Shards are still contiguous runs of go test's own order, since some tests depend on package state from their neighbours, but the cut points now come from estimated seconds. .github/scripts/select-internal-api-shard.sh weighs each test from .github/scripts/internal-api-test-seconds.txt (the 199 tests at 0.5s or more, seeded from a local -race -json run scaled to that main run's shard totals, with a 0.05s default for anything unlisted), binary searches the smallest per-shard budget that fits the list into four slices, and fills up to it. The weights only move cut points. Every test is assigned exactly one shard in a single pass, so a stale file can unbalance shards but never drop or repeat a test, and no shard is ever empty. With today's list the slices hold 1187, 23, 2556 and 21 tests, estimated at 1.9, 6.9, 6.5 and 6.7 minutes of tests, or about 9.5 minutes per job with the roughly 2.6 minutes of setup and race compile. The 2556-test slice would need a 124 KB -run pattern, so a shard passes -skip of the other shards' tests whenever that is shorter, which runs the same tests in the same order.