ci: run the Windows source checks in two parts, slowest checks first #2025

Merged
hckrman101 merged 2 commits from ci-faster-checks into main 2026-11-11 00:48:35 +00:00
hckrman101 commented 2026-11-11 00:05:14 +00:00 (Migrated from github.com)

The game-free source regressions are the slowest check on every pull request: 11-15 minutes on Windows (the last six runs on main: 669-944 s for the Windows job, 362-561 s for Linux), so a PR waits on them long after the builds are green.

Where the Windows time went (per-test times from the last three main runs):

  • tests/test_bake_skeleton.py (408-600 s) built gpu/shaderbatch (the vendored recompiler, ~164 files) three times, once in each of its translating tests. It is skipped on Linux (ubuntu-24.04's clang++ has no C++23 mode), so this was Windows only.
  • Tests started in name order, 4 at once, so slow ones that sort late (test_recorder_sync, test_bake_*) started late and ran on alone.

What changed:

  • tests/run_all.py starts the slowest checks first, by tests/run_all_times.json (each OS's checks of 2 s or more, measured from those runs; a check not in it counts as 1 s), and --shard K/N runs one of N parts split by those times. Every check is in exactly one part, whatever the times say: stale times only make the parts uneven. --write-times after a full run refreshes the file. tests/test_run_all_schedule.py checks the split.
  • Windows runs in two parts at once (Python source checks (windows-2022, part 1/2) and part 2/2); the MSVC and Builder build steps run in part 1. Linux stays one job, under the same name.
  • tests/test_bake_skeleton.py builds the tool once for the file and copies it into each test's folder; each test still translates on its own.
  • The SPIR-V fixture jobs build with --parallel $(nproc) instead of 2 (they were 190-317 s).

No check is dropped, skipped or moved behind a path filter: every check still runs on every PR and push, on the same OS as before.

Before/after: filled in from this PR's run below.

The game-free source regressions are the slowest check on every pull request: 11-15 minutes on Windows (the last six runs on main: 669-944 s for the Windows job, 362-561 s for Linux), so a PR waits on them long after the builds are green. Where the Windows time went (per-test times from the last three main runs): - `tests/test_bake_skeleton.py` (408-600 s) built `gpu/shaderbatch` (the vendored recompiler, ~164 files) three times, once in each of its translating tests. It is skipped on Linux (ubuntu-24.04's clang++ has no C++23 mode), so this was Windows only. - Tests started in name order, 4 at once, so slow ones that sort late (`test_recorder_sync`, `test_bake_*`) started late and ran on alone. What changed: - `tests/run_all.py` starts the slowest checks first, by `tests/run_all_times.json` (each OS's checks of 2 s or more, measured from those runs; a check not in it counts as 1 s), and `--shard K/N` runs one of N parts split by those times. Every check is in exactly one part, whatever the times say: stale times only make the parts uneven. `--write-times` after a full run refreshes the file. `tests/test_run_all_schedule.py` checks the split. - Windows runs in two parts at once (`Python source checks (windows-2022, part 1/2)` and `part 2/2`); the MSVC and Builder build steps run in part 1. Linux stays one job, under the same name. - `tests/test_bake_skeleton.py` builds the tool once for the file and copies it into each test's folder; each test still translates on its own. - The SPIR-V fixture jobs build with `--parallel $(nproc)` instead of 2 (they were 190-317 s). No check is dropped, skipped or moved behind a path filter: every check still runs on every PR and push, on the same OS as before. Before/after: filled in from this PR's run below.
Commenting is not possible because the repository is archived.
No description provided.