Debug-action-cache
[debug] Resolved path: 'node_modules' -> '/home/runner/work/app/node_modules' [debug] Path exists: true [debug] Contents: [ 'react', 'lodash', '.bin' ] If you see Path exists: false , you know your working directory is wrong. Add working-directory: ./app to your step. You run a Windows runner and a Linux runner. They share the same cache key. Debug logs reveal:
"total_count": 1, "actions_caches": [ "id": 123456, "key": "Linux-node-abc123", "size_in_bytes": 245000000, "created_at": "2025-04-01T10:00:00Z", "last_accessed_at": "2025-04-02T10:00:00Z" ] debug-action-cache
You can query the GitHub API directly.
In this 2,500+ word guide, we will dissect the anatomy of action caching, explore why debugging is necessary, and provide a step-by-step playbook to master debug-action-cache . Before we debug, we must understand the problem. GitHub Actions cache is an immutable blob storage system. You write a cache using actions/cache@v3 or v4 , and later, you attempt to restore it using a key. They share the same cache key
[debug] Checking cache for key: Linux-node-abc123 [debug] restoreKeys: [ 'Linux-node-' ] [debug] Cache service URL: https://artifactcache.actions.githubusercontent.com/... [debug] Request headers: Authorization: 'Bearer ***', Accept: 'application/json' [debug] GET response: 404 (Not Found) [debug] Trying restore key: Linux-node- [debug] GET response: 200 OK [debug] Cache found: cacheKey: 'Linux-node-def456', archiveLocation: 'https://...' [debug] Downloading 234MB archive... [debug] Extracting to /home/runner/work/repo/node_modules Suddenly, you see why the wrong cache was restored (because the exact key failed, so it fell back to a prefix). Let's simulate a broken pipeline. You have a monorepo with Python and Node.js. Your Python cache keeps restoring a 3-month-old virtual environment. Step 1: Enable Debug Mode Set ACTIONS_STEP_DEBUG=true . Run the workflow. Step 2: Analyze the Cache Restoration Logic Look for the [debug] restoreKeys line: Before we debug, we must understand the problem