utils/.github/workflows
Krzysztof kuhy Rudnicki 8a556f8d7d Cache .mypy_cache so mypy stops re-analysing the stdlib every run
Profiled the 23s hook step per hook. It is not evenly spread: mypy ~10s and
pylint ~9s are the whole of it, and the remaining 21 hooks share ~4s. Local
timings with a warm cache put mypy at 0.25s against 5.7s cold, so nearly all
of its CI cost is re-analysing the stdlib and third-party stubs from scratch
into a 19MB cache dir that was then thrown away.

Keyed on the config rather than on the sources. The mypy cache metadata
already records the interpreter, the flag set and a hash per source file, so
mypy re-checks whatever actually changed and a restored cache cannot let
stale code pass. The config hash is in the key regardless, so bumping the
mypy rev or editing its args busts it.

Deliberately not keyed on github.sha, which is the other common pattern:
that re-saves 19MB x3 on every commit and would evict the 68MB hook caches
under the 10GB LRU budget for the repo. A fixed key keeps the dependency
analysis, which is the part that costs the 10s.

pylint needs no change -- it already runs --jobs=4.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019kMvSMtsVMB3d2uoZ56pbp
2026-09-12 18:28:58 +02:00
..
crdt-sync-dart-tests.yml crdt_sync_dart: latest stable + exact pins, 100% coverage, CI for both crdt_sync packages 2026-08-28 12:32:24 +02:00
crdt-sync-flutter-tests.yml crdt_sync_dart: latest stable + exact pins, 100% coverage, CI for both crdt_sync packages 2026-08-28 12:32:24 +02:00
crdt-sync-precommit.yml Cache .mypy_cache so mypy stops re-analysing the stdlib every run 2026-09-12 18:28:58 +02:00
crdt-sync-tests.yml Cache pre-commit hooks per package, and pip, so CI stops reinstalling 2026-09-12 18:16:51 +02:00
dependency-freshness.yml Refuse to overwrite utils' own checker with the delegate shim 2026-08-28 16:02:34 +02:00
design-system-tests.yml Wire design_system into CI, and drop EmptyState's speculative action slot 2026-08-14 23:08:59 +02:00
file-length.yml One Python per repo, always the newest, and the gate that enforces it 2026-08-28 20:58:19 +02:00
freedays-precommit.yml Cache .mypy_cache so mypy stops re-analysing the stdlib every run 2026-09-12 18:28:58 +02:00
freedays-tests.yml Cache pre-commit hooks per package, and pip, so CI stops reinstalling 2026-09-12 18:16:51 +02:00
gatelock-precommit.yml Cache .mypy_cache so mypy stops re-analysing the stdlib every run 2026-09-12 18:28:58 +02:00
gatelock-tests.yml Cache pre-commit hooks per package, and pip, so CI stops reinstalling 2026-09-12 18:16:51 +02:00
github-device-auth-tests.yml github_device_auth: extract the GitHub device flow from four apps 2026-08-15 15:57:19 +02:00
md-naming.yml Add the shared markdown-naming gate and migrate utils' own docs 2026-08-24 15:53:12 +02:00
music-theory-tests.yml music_theory: music theory from first principles, as code you can hear 2026-09-11 18:29:13 +02:00
palette-drift.yml One Python per repo, always the newest, and the gate that enforces it 2026-08-28 20:58:19 +02:00
shared-gates-tests.yml One Python per repo, always the newest, and the gate that enforces it 2026-08-28 20:58:19 +02:00
sync-settings-ui-tests.yml Add sync_settings_ui: shared Firebase-only sync settings screen 2026-08-12 23:10:17 +02:00
ts-core-tests.yml Move ts_core and web_ui to vitest 5, React 19.3 and pnpm 12 2026-09-12 17:52:30 +02:00
web-ui-tests.yml Move ts_core and web_ui to vitest 5, React 19.3 and pnpm 12 2026-09-12 17:52:30 +02:00