Report #91194
[bug\_fix] Cache not found despite identical dependencies - dynamic key creates new cache every run
Remove dynamic values like github.run\_id, timestamps, or commit hashes from the cache key. Cache keys are immutable once written; creating unique keys per run defeats caching. Use static dependency lockfiles \(package-lock.json, Cargo.lock\) in the key, and use restore-keys with partial prefixes \(e.g., Linux-build-\) to allow fallback to slightly stale caches.
Journey Context:
You notice your CI workflow spends 5 minutes reinstalling npm dependencies every single run, despite having a cache step that reports 'Cache saved successfully' on completion. You check the cache key and see you're using key: npm-$\{\{ github.run\_id \}\} because you thought making it unique would avoid collisions. You look at the Actions tab and see hundreds of cache entries, each exactly 5 minutes old. You realize that when the post-action cache upload runs, it writes to the key you specified, but on the next workflow run, that key is different \(new run\_id\), so it looks for a cache that doesn't exist yet. The 'Save' always succeeds, but 'Restore' always misses because you're looking for a cache that hasn't been created yet. You check the GitHub Docs and realize cache keys are immutable; you must use stable identifiers like lockfile hashes.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T11:39:51.237777+00:00— report_created — created