-
Notifications
You must be signed in to change notification settings - Fork 751
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Gradle cache increases by 400 MB every time updating Gradle wrapper version #269
Comments
Hello @DevCharly. Thank you for your report. We'll investigate the issue. |
I think so too, especially if there is not other cache eviction happening than this, which would mean it grows "forever" (if you access it once a week). |
Shouldn't the cache ID calculated from the (gradle) files in working directory, which was previously checked out from git? Currently it seems that the cache ID from the previous run is used,
Isn't this the expected behavior? |
It is, but when no cache with that id is found, like when you run the first time with a new dependency configuration, it falls back to a cache from a previous run. That fallback is defined with the
One could argue that when you change only one small dependency out of many others it may be more efficient to keep 2 versions of that in the cache instead of downloading all again. But as you said, when the cache never becomes dirty I would also prefer to start over with a completely empty cache whenever something changes. |
I put my suggestion into a PR here to make it more clear what I mean to prevent this problem. |
After a quick scan through the code it looks like it creates a single cache-key and includes both build/dependency caches and wrapper cache in said key. Would it not make more sense to have two separate caches/keys with different restore policies? In addition to that, when saving the build/dependency caches we should be able to exclude files older than a configurable number of hours/days. That way old dependencies will be evicted over time and we can have the best of both worlds. Same issue will need to be solved within #245 . |
What is the policy for bumping? This is a bump! |
Is this why my cache is now 3GB in size, actions/setup-java@v3 takes ~12 minutes to run (downloading and restoring the cache), and why my post run setup-java action is failing? Is there some way to purge the cache and get a clean slate at least for the time being? |
i have the same question... |
Yes, that is true, but that did not change in the PR.
I also think that could make sense. But I would see that as additional improvement, which could be addressed in a separate PR. I think your issue actions/cache#788 is already going in that direction. |
@mandrachek and @fl250144
I don't know your setup, but the cache filling up over time sounds like you have this issue.
One thing you could do for now is to not use the built-in cache of |
@schuenadel - that's exactly the approach I wound up taking. @fl250144 - here's what I used instead of the built-in cache: # This works around an issue in setup-java which allows the dependency cache to grow each time the gradle wrapper is upgraded
- name: Cache Gradle Wrapper and Dependencies
uses: actions/cache@v3
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
key: ${{ runner.os }}-gradle-cache-${{ hashFiles('**/*.gradle', '**/*.gradle.kts', '**/gradle/wrapper/gradle-wrapper.properties') }} It adds the hash of gradle-wrapper.properties, so when the gradle version is updated, the cache is rebuilt. My cache is now back down under a gig. |
Also switches to good ol actions/cache because of actions/setup-java#269
You can now use REST APIs to purge a cache based on key or id (id can be fetched using the another API which lists caches) |
There is a nuance. If there are more recently used caches in a repo and the total size is more than 10 GB even a weekly accessed cache will get evicted. Essentially the eviction logic find caches which need to be purged to bring total cache usage size to 10GB and it purges the ones which are oldest till the size goal is met. |
Hello @DevCharly It seems i found the root cause and can suggest at least the workaround which can be called a solution as well. The origin of the problem is the logic of As a result, despite Thus, to resolve the problem it is necessary either 1) changes the logic of My opinion is: neither of above can be applied because of 1) is breaking change and 2) is not flexible enough I'd suggest to add the project specific step to the pipeline, something like:
This way completely solves the issue but leaves an ability to fine tuning the specific build. |
The issue is to be closed due to the merged PR. |
I use Maven without a wrapper and I don't have a problem with increasing cache size. Since actions/setup-java no longer restores the old cache when the pom.xml file has changed, it needs to download all dependencies anew with every small configuration change in the pom.xml file, and it takes 20 minutes each time for my project. |
Description:
When updating the Gradle wrapper to a new version (changed
gradle-wrapper.properties
), thenChanging Gradle wrapper version again increases the cache file size by 400 MB to 1200 MB, and so on...
Here is a run where it happened: https://github.com/JFormDesigner/FlatLaf/runs/4705134891
In "Setup Java 17" the outdated cache is restored (https://github.com/JFormDesigner/FlatLaf/runs/4705134891#step:4:35):
In "Post Setup Java 17" a new cache with ~836 MB is created (https://github.com/JFormDesigner/FlatLaf/runs/4705134891#step:11:5):
Note the different hash keys in the cache file names!
Task version:
actions/checkout@v2
Platform:
Runner type:
Repro steps:
See above description.
Expected behavior:
When changing
gradle-wrapper.properties
(orbuild.gradle
), then the cache should be not restored.Actual behavior:
Cache is restored even if
gradle-wrapper.properties
(orbuild.gradle
) changed, which increases the size of the cache file by aboud 400 MB every time a new Gradle wrapper version is used.The text was updated successfully, but these errors were encountered: