fix(ci): properly cache dependencies in Docker layer for GHA cache#11
Merged
Conversation
- Remove setup-java/setup-node steps (no longer run Maven/npm on runner) - Remove pre-build version modification (was invalidating Docker cache) - Pass VERSION as Docker build-arg instead - Remove BuildKit cache mounts (ephemeral, not persisted by GHA) - Store dependencies in Docker layer (cached by type=gha) - Change npm install to npm ci for faster CI builds The key fix: pom.xml stays at 0.0.0-dev in repo, so the dependency download layer has a stable cache key. Version is set inside Docker after deps are downloaded, so only the final build step runs on subsequent builds with the same dependencies.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fixes build caching so Maven and npm dependencies are not re-downloaded on every build.
Root Causes Fixed
pom.xml was modified before Docker build - The workflow ran
./mvnw versions:seton the runner, modifying pom.xml before sending it to Docker. Since version changed each build, the Docker layer cache was invalidated every time.BuildKit cache mounts are ephemeral - The
--mount=type=cachesyntax only persists within the BuildKit daemon, which is destroyed after each GHA run. Thetype=ghacache backend caches Docker layers only, NOT cache mount contents.Changes
setup-javaandsetup-nodesteps (no longer needed)npm installtonpm cifor faster CI buildsHow Caching Now Works