diff --git a/packages/cache/README.md b/packages/cache/README.md index 541b1155..58f959ec 100644 --- a/packages/cache/README.md +++ b/packages/cache/README.md @@ -42,3 +42,8 @@ const restoreKeys = [ const cacheKey = await cache.restoreCache(paths, key, restoreKeys) ``` +##### Cache segment restore timeout + +Starting `v3.0.5` of `actions/toolkit`, in case any issue occurs while downloading the cache, the download will be aborted by default within 1 hour if any `segment` doesn't download completely. A `segment` is limited to size of `1GB` for a `32-bit` runner and `2GB` for a `64-bit` runner. So for any cache that exceeds the size of one segment, multiple segments will be downloaded in sequence to complete the download. + +To customise the `segment` download timeout, an environment variable `SEGMENT_DOWNLOAD_TIMEOUT_MINS` needs to be set with the timeout minutes. This way the download wouldn't get stuck forever and proceed to next step in the workflow without any problem. diff --git a/packages/cache/RELEASES.md b/packages/cache/RELEASES.md index 8ffe364c..f654b0a0 100644 --- a/packages/cache/RELEASES.md +++ b/packages/cache/RELEASES.md @@ -83,4 +83,4 @@ - Bug fixes for download stuck issue [#810](https://github.com/actions/cache/issues/810). ### 3.0.4 -- Allowing users to provide a custom timeout as input for aborting cache download using an environment variable `CACHE_DOWNLOAD_TIMEOUT_MINS`. Default is 1 hour. \ No newline at end of file +- Allowing users to provide a custom timeout as input for aborting download of a cache segment using an environment variable `CACHE_DOWNLOAD_TIMEOUT_MINS`. Default is 1 hour. \ No newline at end of file diff --git a/packages/cache/__tests__/options.test.ts b/packages/cache/__tests__/options.test.ts index e2cdf468..83d9b227 100644 --- a/packages/cache/__tests__/options.test.ts +++ b/packages/cache/__tests__/options.test.ts @@ -63,7 +63,7 @@ test('getDownloadOptions overrides download timeout minutes', async () => { timeoutInMs: 20000, segmentTimeoutInMs: 3600000 } - process.env.CACHE_DOWNLOAD_TIMEOUT_MINS = '10' + process.env.SEGMENT_DOWNLOAD_TIMEOUT_MINS = '10' const actualOptions = getDownloadOptions(expectedOptions) expect(actualOptions.useAzureSdk).toEqual(expectedOptions.useAzureSdk) diff --git a/packages/cache/src/options.ts b/packages/cache/src/options.ts index d3f716b8..652899a2 100644 --- a/packages/cache/src/options.ts +++ b/packages/cache/src/options.ts @@ -112,20 +112,21 @@ export function getDownloadOptions(copy?: DownloadOptions): DownloadOptions { result.segmentTimeoutInMs = copy.segmentTimeoutInMs } } - const customDownloadTimeoutMins = process.env['CACHE_DOWNLOAD_TIMEOUT_MINS'] + const segmentDownloadTimeoutMins = + process.env['SEGMENT_DOWNLOAD_TIMEOUT_MINS'] if ( - customDownloadTimeoutMins && - !isNaN(Number(customDownloadTimeoutMins)) && - isFinite(Number(customDownloadTimeoutMins)) + segmentDownloadTimeoutMins && + !isNaN(Number(segmentDownloadTimeoutMins)) && + isFinite(Number(segmentDownloadTimeoutMins)) ) { - result.segmentTimeoutInMs = Number(customDownloadTimeoutMins) * 60 * 1000 + result.segmentTimeoutInMs = Number(segmentDownloadTimeoutMins) * 60 * 1000 } core.debug(`Use Azure SDK: ${result.useAzureSdk}`) core.debug(`Download concurrency: ${result.downloadConcurrency}`) core.debug(`Request timeout (ms): ${result.timeoutInMs}`) core.debug( - `Cache download timeout mins env var: ${process.env['CACHE_DOWNLOAD_TIMEOUT_MINS']}` + `Cache segment download timeout mins env var: ${process.env['SEGMENT_DOWNLOAD_TIMEOUT_MINS']}` ) core.debug(`Segment download timeout (ms): ${result.segmentTimeoutInMs}`)