Skip to content

ci: speed up Windows build with sccache + Qt/FFTW caching#1913

Merged
ten9876 merged 2 commits intomainfrom
claude/sccache-windows-ci
Apr 25, 2026
Merged

ci: speed up Windows build with sccache + Qt/FFTW caching#1913
ten9876 merged 2 commits intomainfrom
claude/sccache-windows-ci

Conversation

@ten9876
Copy link
Copy Markdown
Owner

@ten9876 ten9876 commented Apr 25, 2026

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:

Layer Mechanism Saves
Qt install dir cache: true on jurplel/install-qt-action@v4 ~40 s
FFTW3 third_party dir actions/cache@v4 keyed on setup-fftw.ps1 hash ~37 s
MSVC object files mozilla-actions/[email protected] via GHA cache backend the rest

CMAKE_MSVC_DEBUG_INFORMATION_FORMAT=Embedded is 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 on windows-latest this is the safer setting anyway.

Expected impact

  • Today: ~14 min per Windows CI run
  • Cold cache (first run on this PR): ~5 min
  • Warm cache (subsequent runs): ~2-3 min

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

  • The first run on this PR will populate the caches — runtime won't drop yet.
  • Subsequent pushes (e.g. a no-op --allow-empty commit) should land in the 2-3 min target.
  • The added sccache --show-stats step at the end of the job prints hit-rate so we can verify the cache is effective.

Test plan

  • First CI run completes in roughly the same time as today (cold cache populating)
  • Second run on this branch (force-push or no-op commit) completes in ~2-3 min
  • sccache --show-stats shows >70% hit rate on the second run
  • No regressions in build correctness — produces a working AetherSDR.exe

🤖 Generated with Claude Code

@ten9876
Copy link
Copy Markdown
Owner Author

ten9876 commented Apr 25, 2026

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)

ten9876 and others added 2 commits April 24, 2026 19:41
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]>
@ten9876 ten9876 force-pushed the claude/sccache-windows-ci branch from 7e3b6c0 to 0ae4eb0 Compare April 25, 2026 02:42
@ten9876 ten9876 merged commit bf4374b into main Apr 25, 2026
5 checks passed
@ten9876 ten9876 deleted the claude/sccache-windows-ci branch April 25, 2026 03:22
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant