The same leak we just closed on JellyTau, fed harder from here. `target/`
is 30 GB locally (25G debug, 3.1G android, 2.9G release) and was cached
under two keys across five jobs, on the runner both repos share.
- Cache registry/index, registry/cache and git/db only. registry/src is
left out as well: 155 MB of .crate tarballs beats 1.1 GB extracted, and
cargo re-extracts it for free. Verified that `cargo fetch` unpacks, so
sync-android-sources.sh — which reads btleplug's Java backend out of
registry/src before any build has run — still finds its sources.
- Collapse cargo-host and cargo-android into one cargo-registry key. The
split only existed to keep the two `target` dirs off each other; with
target uncached, registry contents are target-independent. This also
ends a silent miss: build-release's `test` and `build-linux` jobs shared
cargo-host, so the test job claimed the key and build-linux's cache was
never saved.
- CARGO_INCREMENTAL=0. Never reused between runs, and the bulk of the
25 GB debug dir.
- npm: cache ~/.npm instead of ui/node_modules. `npm ci` deletes
node_modules before installing, so that entry was restored and thrown
away unread.
- Installer artifact retention 30d -> 7d; the tagged release carries them.
Rust jobs now compile cold every run. sccache with a hard size cap is the
way back if that starts to hurt.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>