Expose BuildCacheKey to task execution [PoC] #28998
Closed
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.
Context
This PR is a proof of concept, just for possible discussion, curious about opinions of Gradle maintainers as well. In the prototype the
BuildCacheKey
is exposed in theorg.gradle.api.internal.cache
package assuming there is no guarantee of forward compatibility unless it's clarified.Some tasks may need Gradle calculated cache key to align standard cache semantics, not to duplicate artifact hash itself.
E.g. there are web artifact compiling tasks, that produce output with URL query parameters like
...?v={version}
whereversion
can be random UUID or git commit or timestamp or whatever. The similar approach can be helpful if the output creates some manifest with unique build id.The idea of this change is to reuse the Gradle build cache in the task.
Advantages:
But it has a major drawback: if the build is executed without build cache, Gradle skips cache calculation. So the task output will not be reproducible between
--build-cache
and--no-build-cache
Alternative solutions
Manually calculate build cache key in the task implementation - taking into calculation at least:
Contributor Checklist
<subproject>/src/integTest
) to verify changes from a user perspective.<subproject>/src/test
) to verify logic../gradlew sanityCheck
../gradlew <changed-subproject>:quickTest
.Reviewing cheatsheet
Before merging the PR, comments starting with