The previous restores predate the detection line, which is why this only started failing on 2026-08-17. Suppress the pipeline status with '|| true' — FIRST_ENTRY still captures the first archive entry, and a genuinely unreadable archive degrades to the legacy fallback / cache-hit=false path as before.
Restore only used the path input for a redundant mkdir and then extracted
to / using the absolute path baked into the archive, which pointed at the
stale per-run workspace of whichever run saved it. Extract relative
archives (<basename>/...) into the parent of the requested path; keep a
legacy fallback (extract to /) for old archives, which report cache-hit
only when the requested path actually gains content.
Record last use by touching the archive so the retention policy can
expire by access time, and run prune.sh after every restore (even on
miss) to keep the shared store trimmed: keep the 3 newest archives per
key-prefix family, expire anything older than 7 days, hard-cap the store
at 2 GB (oldest first, trumping the keep set), never touch files younger
than 1h, and drop stale run workspaces under ~/.cache/act older than 2
days.
- Store cache as tar.xz archives on runner filesystem at ~/.cache/.cache-store/
- No external API calls, no node.js, no curl needed
- Restore extracts archive if key matches, save creates one on miss
- Drastically simpler and more reliable for self-hosted runners
- Remove actions/cache@v5 dependency, implement cache API calls directly
using curl, tar, and zstd against Gitea's /_apis/artifactcache/ API
- Drop 'key' input, add required 'key-prefix' and 'key-file' inputs
- Cache key is generated as key-prefix-<sha256-of-key-file>
- Update README with revised inputs and Rust-only examples
Convert the composite action from Checkout to Cache that:
- Stores build files under ~/.cache/ by default
- Auto-generates cache keys from lockfile hashes
- Uses actions/cache@v5 for restore and save
- Supports custom path, key, key-file, and restore-keys inputs
- Exposes cache-hit output for conditional workflow steps