Skip to content

v0.11.0

Latest

Choose a tag to compare

@pecorino-bot pecorino-bot released this 21 Jul 15:42
Immutable release. Only release title and notes can be modified.
2aa704e

kache 0.11.0 — broader compiler coverage, and libc-aware keys

kache is a content-addressed build cache that plugs in as a RUSTC_WRAPPER (and a C/C++ compiler wrapper). 0.11.0 widens the set of toolchains and filesystems kache handles correctly — target-prefixed cross-compilers, zig, and non-reflink filesystems — and tightens several cache keys so more real builds hit soundly. It also landed contributions from a number of first-time contributors.

Why

A build cache is only as trustworthy as the weakest key it computes. This release chased down several places where the key was too loose (a musl binary and a glibc binary sharing an entry; a CUDA compile keyed on one preprocess) or the toolchain wasn't recognized at all (an aarch64-linux-gnu-gcc cross-compiler, a cargo-zigbuild zigcc wrapper). It also broadens zero-copy restore to filesystems that don't support reflinks.

What's new

  • More compilers recognized. Target-prefixed C/C++ cross-compilers (e.g. aarch64-linux-gnu-gcc) and cargo-zigbuild's zigcc wrapper are now treated as their real compiler family instead of being passed through uncached.
  • libc-aware Linux keys. Native Linux outputs are keyed by the host libc, so a glibc build and a musl build of the same source no longer collide on one cache entry.
  • CUDA compiles are refused, not mis-cached. clang -x cuda was being keyed on a single -E preprocess, but CUDA/HIP compile the same TU once per target with different predefined macros (__CUDA_ARCH__) — unsound to share. kache now declines them instead of risking a bad hit.
  • Hardlink fallback for non-reflink filesystems. On ext4-without-reflink or tmpfs, immutable blobs are hardlinked when a CoW reflink isn't available (dep-info, executables, and symlinks stay on the copy path), extending near-zero-copy restore beyond CoW volumes.
  • Opportunistic background GC for local workflows, atomic + synchronized log rotation, and a RemoteBackend trait extracted over the transport layer (paving the way for a filesystem backend alongside S3).
  • Cross-compilation key fixes. target_dir / workspace_root are derived correctly for cross builds, and unrecognized RUSTC_WORKSPACE_WRAPPER drivers are detected by their inner rustc.

Thanks

0.11.0 includes first contributions from @aqeelat, @jlucaso1, @KokaKiwi, @lwintermelon, @Skory and others — thank you.

These notes were drafted with LLM assistance and edited by the maintainers (@jleni, @emmanuelm41).


What's Changed

  • fix(rustc): detect unrecognized RUSTC_WORKSPACE_WRAPPER drivers by inner rustc by @aqeelat in #506
  • refactor(remote): extract RemoteBackend trait for transport-specific concerns (#414) by @jlucaso1 in #515
  • feat(gc): trigger background GC opportunistically for local workflows by @Ysh204 in #511
  • docs: stop claiming bare kache opens the TUI by @emmanuelm41 in #524
  • fix(events): make log rotation atomic and synchronized by @Ysh204 in #518
  • docs: add AUR install method to README by @KokaKiwi in #523
  • fix(compiler): detect bare workspace wrappers configured by Cargo by @Ysh204 in #519
  • fix(args): derive target_dir and workspace_root correctly for cross-compilation by @Ysh204 in #521
  • fix(daemon): add status subcommand the help text already promised by @aqeelat in #522
  • chore: bump kache to v0.11.0-rc.1 by @emmanuelm41 in #529
  • test(events): fix flaky concurrent tailer assertion on Windows by @emmanuelm41 in #536
  • cc: recognize cargo-zigbuild zigcc wrappers as Clang-family compilers by @lwintermelon in #520
  • refactor(store,events): extract shared atomic replace helper by @Ysh204 in #531
  • test(events): harden concurrent rotation tests and cover rename-reset mutation by @Ysh204 in #532
  • fix(compile): probe cargo outputs instead of readdir'ing out-dir by @Skory in #534
  • fix(link): clarify storage-block sharing warning by @Ysh204 in #537
  • feat(store): hardlink immutable blobs when CoW reflink is unavailable by @jleni in #548
  • Fix rustc cache key ordering and key locking by @jleni in #549
  • cc: refuse CUDA compiles instead of mis-caching or erroring by @jleni in #550
  • Recognize target-prefixed C/C++ compiler wrappers by @jleni in #566
  • Normalize configured container and sandbox roots by @jleni in #567
  • Key native Linux outputs by host libc by @jleni in #568
  • Avoid global env mutation in wrapper-chain tests by @jleni in #569
  • chore: bump kache to v0.11.0 by @emmanuelm41 in #570

New Contributors

Full Changelog: v0.10.0...v0.11.0