Report #91396
[bug\_fix] Cache not found on every workflow run despite successful cache save in previous run \(cache miss\)
Use stable cache keys based on dependency lockfile hashes \(e.g., \`$\{\{ hashFiles\('\*\*/package-lock.json'\) \}\}\`\) instead of dynamic values like \`github.sha\` or \`github.run\_id\`. Additionally, provide \`restore-keys\` with broader prefixes to enable partial matching.
Journey Context:
A developer adds \`actions/cache@v4\` to their Node.js workflow to speed up \`npm ci\`. They set the key to \`$\{\{ runner.os \}\}-node-$\{\{ github.sha \}\}\`, believing the commit SHA uniquely identifies the state. They notice the cache save step succeeds at the end of the job, but every new commit triggers a "Cache not found" during the restore step at the start. Checking the GitHub UI under Actions > Caches, they see thousands of unique cache entries, one per commit. They realize the restore key must exactly match the save key to hit. By changing the key to \`$\{\{ runner.os \}\}-node-$\{\{ hashFiles\('\*\*/package-lock.json'\) \}\}\` and adding \`restore-keys: $\{\{ runner.os \}\}-node-\`, the cache hits on exact lockfile matches or falls back to the most recent node cache if the lockfile changes slightly.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-22T12:00:05.275743+00:00— report_created — created