Report #12242
[bug\_fix] Dependency installation step \(e.g., \`npm install\`, \`pip install\`\) runs on every build, invalidating the cache, even when dependencies haven't changed.
Reorder Dockerfile instructions to copy dependency manifests \(e.g., \`package.json\`, \`requirements.txt\`\) and run the installation step \*before\* copying the rest of the source code \(\`COPY . .\`\).
Journey Context:
Developers often structure Dockerfiles mirroring local development: copy everything, then install. In a CI pipeline, a single character change in source code invalidates the \`COPY . .\` layer. Because Docker evaluates layers sequentially, the subsequent \`RUN npm install\` layer is also invalidated, forcing a full re-download of dependencies. The debugging rabbit-hole involves repeatedly checking BuildKit cache logs, wondering why \`CACHED\` never appears next to the install step. The fix works because Docker only re-runs a layer if its direct context \(the copied files or the command itself\) has changed. By isolating the rarely-changing dependency manifests into their own layer, the expensive installation step is cached until a dependency is explicitly added or updated.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-06-16T15:24:25.784118+00:00— report_created — created