Fix a bug that forced the init
Action to run for at least two minutes on JavaScript
#1494
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.
The bug is that we wait for timeouts to elapse at the end of the
init
Action, even if the operation we were applying the timeout to already finished.Context
Some of the Actions caching APIs we call don't have reliable timeouts, so we implement our own timeout on top of this. Once this timeout elapses, the Action continues executing without downloading / uploading the cache. However, once the top level of the Action has finished executing, the Node runtime will continue waiting on the background tasks to finish executing. We get around this by adding a call to
util.checkForTimeout()
to the end of the top level of the Action. This kills the Node process after 30 seconds if there was a timeout at some point during the Action's execution (see #1354 for more).However it turns out we're liable to the same waiting problem with the timeouts themselves. If the cache operation finishes before the timeout, we'll still wait for the timeout itself to finish executing before the Action exits. This impacts JavaScript runs, which use TRAP caching. The TRAP caching timeout is currently two minutes, so the
init
Action will now wait for up to 2 minutes to finish on any workflows that run a language that supports TRAP caching.Fix
To fix this, we immediately
unref
the timer so that Node won't wait for it to finish.Merge / deployment checklist