-
Notifications
You must be signed in to change notification settings - Fork 1.3k
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
Slow post-action after v4 #878
Comments
I noticed that my workflow files didn't specify what node version to use for this workflow through any |
Thank you for detailed description of the issue! We'll investigate it and come back with details. |
My workflows do always specify I also have a flow log here which despite requesting lts/iron resolved |
Just want to report the same thing, from 5s -> 2m15s (Node 18) |
Same here in multiple projects using JS with Yarn. The It seems to me that this only happens when JS dependencies have been updated. Re-running the job (which causes a cache hit) is fast again - perhaps because the cache doesn't need to be saved. My conclusion: Saving the cache is significantly slower with v4 than with v3. |
Noticing this as well because I have an aggressive I concur with @ledermann that the issue is somewhere in cache-saving. With a cache hit, the post-action takes Without a cache hit, when trying to save the cache, the post-action times out: |
See ruby/setup-ruby#543 which explains a possible cause and fix. |
And here's the fix: ruby/setup-ruby@036ef45 that should probably be ported to setup-node |
* revert setup-node action to v3 because of slow post action step see issue: actions/setup-node#878 * fix build commands
@nikolai-laevskii I opened a PR in #907 that applies the same fix as https://github.com/ruby/setup-ruby (issue ruby/setup-ruby#543, PR ruby/setup-ruby#546), could you take a look at it? |
I'm also experiencing this on Node 18. |
@nrutman Actually this issue does not depend on the Node version you're using, but rather the Node version that the GitHub Action runner uses itself (in this case, the runner for |
Hello everyone. We've merged the fix for the issue. Could you please try to use |
Hi! Yeah, from some quick tests it seems to work better now. |
@dmitry-shibanov Just confirming that the fix has worked for us too We only really noticed it on Windows where all those tiny BeforeAfter |
@dmitry-shibanov Can you release the changes? |
Hello everyone. We released the changes yesterday. For now I am going to close the issue. If you have any concerns feel free to ping us. |
Issue was related to cmd failing, and for some reason NODE action hanged...once I fixed other issue, it works again. SRY to bother |
Hi all. I think I am still affected by this issue. In my app, the "Post Cache node_modules" step takes quite long for some reason (2m on average). As a result, if I install or remove a yarn dependency, the setup job alone takes around 3 minutes before any other job can start, while if I don't change any deps, it takes only 10 seconds, which is great and expected. But I would still like not to slow the process down when deps change. Is the behavior I described expected and is there anything I can do? I already changed Here's a link to one of the slow setup runs: https://github.com/domhhv/habitrack/actions/runs/11651863472/job/32442340624. |
Hello @domhhv, Thanks for sharing the details. The slow ""Post Cache node_modules"" step when dependencies change is somewhat expected, as it involves cache validation or recreation. This behavior is aligned with the caching mechanism used by actions/setup-node, which caches the global package cache (e.g., ~/.npm for npm, ~/.pnpm-store for pnpm), but does not directly cache the node_modules directory to prevent inconsistencies across different environments. Here are a few suggestions to optimize the process: Cache Key: Ensure your cache key includes both package.json and yarn.lock to invalidate the cache only when dependencies change. This minimizes unnecessary cache misses and speeds up subsequent jobs: key: ${{ runner.os }}-yarn-${{ hashFiles('/package.json', '/yarn.lock') }} Use yarn install --frozen-lockfile: This ensures that Yarn installs dependencies exactly as specified in yarn.lock, which can help prevent unnecessary updates and speed up the process:
Cache Yarn Cache: In addition to node_modules, consider caching the Yarn cache directory (~/.cache/yarn) to reduce the time spent downloading dependencies from scratch:
|
Hey guys! I wanted to share my experience here. Maybe it could help someone.
As you can notice the hashFiles function is looking for js, jsx, ts and tsx files. In my project we are talking about 1000s of files. So I split the job in restore and save parts and when saving I reuse the key from the restore job. This actually seems to have fixed the post action for me. |
@compojoom Good thought, but unfortunately that's not the case here. The cache key is calculated during the cache restore step (using only the lockfile) and is re-used without recalculation during the post-job action. I think this step really is just slow because the cache directory is huge, and thus takes a while to sync across to the cache. |
@simon-abbott oh sorry. I posted in the wrong repo. setup-node is fast in my jobs. I was having issues with the "actions/cache" job |
@aparnajyothi-y Hello, and thank you for getting back to me! Everything you described makes perfect sense to me. I can see that I'm only caching Thanks! |
Description:
The post-action step for this action seems to have become much slower after version 4.0.0 was released.
In the two included images, the only major difference should be the version of
actions/setup-node
.Before:
After:
Action version:
Using
actions/setup-node@v4
15 hours after 4.0.0 was released.Platform:
Runner type:
Tools version:
Node 18.18.2, and
Yarn@4.0.0
.The text was updated successfully, but these errors were encountered: