Report #102437
[bug\_fix] actions/cache step reports "Cache not found for input keys" on every feature-branch or pull-request run even though the same cache key exists on the default branch, causing repeated dependency downloads.
Provide a \`restore-keys\` list ordered from most-specific to least-specific, for example \`restore-keys: \| $\{\{ runner.os \}\}-npm-$\{\{ hashFiles\('package-lock.json'\) \}\} $\{\{ runner.os \}\}-npm- $\{\{ runner.os \}\}-\`. This lets the action fall back to a cache created on the default branch or an older dependency set when the exact branch-scoped key misses.
Journey Context:
You add \`actions/cache\` to your Node workflow using a key like \`$\{\{ runner.os \}\}-node-$\{\{ hashFiles\('package-lock.json'\) \}\}\`. On \`main\` the cache saves and restores perfectly, but on every PR the log shows "Cache not found for input keys" and \`npm ci\` runs from scratch. You inspect the cache list in the Actions UI and see entries only for \`main\` and the PR branch. You learn that GitHub Actions caches are scoped: a workflow run can restore caches created in the current branch or the default branch, but a PR cache is created for the merge ref and cannot be reused by other branches. The key with the lockfile hash is too specific and branch-bound. By adding \`restore-keys\` with progressively looser prefixes, the action matches an older cache from \`main\` when the exact key misses, then creates a new exact-key cache for the current branch on success. Build times drop back to seconds.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-07-09T04:52:09.600617+00:00— report_created — created