ci: speed up Windows build with sccache + Qt/FFTW caching#1913
Merged
Conversation
Owner
Author
|
Added a follow-up commit bumping the Qt version in this job from 6.7.3 → 6.8.3 (aetherclaude/issue-1910 was just fixed via /bigobj — the bug only reproduces on Qt 6.8.x because of the higher MOC symbol volume). This way CI will catch any future C1128-class issue before it reaches users on the same Qt version they actually run. Note: the bumped Qt cache key invalidates the cache, so this PR's first run is cold across the board. 73, Jeremy KK7GWY & Claude (AI dev partner) |
Windows CI was taking ~14 min per run, of which ~12.5 min was the MSVC build itself. Adds three layers of caching: * Qt install dir — `cache: true` on jurplel/install-qt-action (saves ~40s) * FFTW3 third_party dir — actions/cache keyed on setup-fftw.ps1 hash (saves ~37s, also the script is already idempotent so a hit no-ops) * MSVC object files — sccache via GitHub Actions cache backend, with CMAKE_C/CXX_COMPILER_LAUNCHER=sccache and Embedded debug-info format so MSVC writes /Z7 (in-object) instead of /Zi (separate PDB) which sccache can't share across runs Expected runtime: cold cache ~5 min, warm cache ~2-3 min (vs ~14 min today). Brings the Windows gate in line with our Linux CI Docker image timing so auto-merge isn't blocked for 12 min on every release. Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
Aligns CI with what community Windows builders are running, and is high enough Qt to expose MOC-volume issues like #1910 (MSVC COFF section limit, just fixed in main via /bigobj). Without this bump the check-windows job stays on 6.7.3 — fewer MOC symbols, fewer sections, and the C1128-class bug doesn't reproduce. Co-Authored-By: Claude Opus 4.7 (1M context) <[email protected]>
7e3b6c0 to
0ae4eb0
Compare
3 tasks
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.
Summary
Windows CI runs in ~14 min per PR right now, blocking auto-merge for ~12 min on every release. The build step alone is ~87% of total runtime because nothing is cached between runs — Qt is reinstalled, FFTW is re-downloaded, every C++ TU is recompiled from scratch.
This adds three layers of caching:
cache: trueonjurplel/install-qt-action@v4third_partydiractions/cache@v4keyed onsetup-fftw.ps1hashmozilla-actions/[email protected]via GHA cache backendCMAKE_MSVC_DEBUG_INFORMATION_FORMAT=Embeddedis set so MSVC emits/Z7(in-object debug info) instead of/Zi(separate PDB), which sccache can't share across runs. For a Release build onwindows-latestthis is the safer setting anyway.Expected impact
This brings Windows CI in line with our Linux CI Docker image timing so auto-merge isn't gated on a 12 min Windows build.
Verification
--allow-emptycommit) should land in the 2-3 min target.sccache --show-statsstep at the end of the job prints hit-rate so we can verify the cache is effective.Test plan
sccache --show-statsshows >70% hit rate on the second runAetherSDR.exe🤖 Generated with Claude Code