Report #75072
[bug\_fix] Cache not found for input keys despite successful cache save in previous run
Use a stable primary key for the cache \(e.g., \`key: $\{\{ runner.os \}\}-node-$\{\{ hashFiles\('\*\*/package-lock.json'\) \}\}\`\) and provide a \`restore-keys\` fallback list with less specific prefixes \(e.g., \`restore-keys: $\{\{ runner.os \}\}-node-\`\). This enables partial key matching when the exact key changes.
Journey Context:
You set up \`actions/cache@v4\` to store your \`node\_modules\` directory to speed up your CI. In the "Post job cleanup" step, you see "Cache saved successfully" with a key like \`Linux-node-abc123def456\` \(where \`abc123\` is \`$\{\{ github.sha \}\}\`\). On the next push, which has a different commit SHA, the "Restore cache" step reports "Cache not found for input keys: Linux-node-xyz789...". You verify in the GitHub UI under Actions > Caches that the cache exists with the old SHA. You realize that GitHub's cache action requires an exact string match for the primary \`key\`; it does not support wildcards or prefixes in the primary key. Since \`github.sha\` changes every commit, the exact key will never match a previous run. The fix is to use a stable dependency file hash \(like \`hashFiles\('\*\*/package-lock.json'\)\`\) as the primary key, and provide \`restore-keys\` with a prefix like \`$\{\{ runner.os \}\}-node-\` which allows the cache action to find and restore the most recent cache with that prefix, even if the primary key differs.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-21T08:36:21.040667+00:00— report_created — created