diff --git a/.licenses/npm/@actions/cache.dep.yml b/.licenses/npm/@actions/cache.dep.yml index ffc3360..b37997f 100644 --- a/.licenses/npm/@actions/cache.dep.yml +++ b/.licenses/npm/@actions/cache.dep.yml @@ -1,6 +1,6 @@ --- name: "@actions/cache" -version: 3.2.3 +version: 3.2.4 type: npm summary: Actions cache lib homepage: https://github.com/actions/toolkit/tree/main/packages/cache diff --git a/RELEASES.md b/RELEASES.md index e81cb3e..e70823e 100644 --- a/RELEASES.md +++ b/RELEASES.md @@ -1,77 +1,54 @@ # Releases -### 3.0.0 +### 4.0.2 -- Updated minimum runner version support from node 12 -> node 16 +- Fixed restore `fail-on-cache-miss` not working. -### 3.0.1 +### 4.0.1 -- Added support for caching from GHES 3.5. -- Fixed download issue for files > 2GB during restore. +- Updated `isGhes` check -### 3.0.2 +### 4.0.0 -- Added support for dynamic cache size cap on GHES. +- Updated minimum runner version support from node 12 -> node 20 -### 3.0.3 +### 3.3.3 -- Fixed avoiding empty cache save when no files are available for caching. ([issue](https://github.com/actions/cache/issues/624)) +- Updates @actions/cache to v3.2.3 to fix accidental mutated path arguments to `getCacheVersion` [actions/toolkit#1378](https://github.com/actions/toolkit/pull/1378) +- Additional audit fixes of npm package(s) -### 3.0.4 +### 3.3.2 -- Fixed tar creation error while trying to create tar with path as `~/` home folder on `ubuntu-latest`. ([issue](https://github.com/actions/cache/issues/689)) +- Fixes bug with Azure SDK causing blob downloads to get stuck. -### 3.0.5 +### 3.3.1 -- Removed error handling by consuming actions/cache 3.0 toolkit, Now cache server error handling will be done by toolkit. ([PR](https://github.com/actions/cache/pull/834)) +- Reduced segment size to 128MB and segment timeout to 10 minutes to fail fast in case the cache download is stuck. -### 3.0.6 +### 3.3.0 -- Fixed [#809](https://github.com/actions/cache/issues/809) - zstd -d: no such file or directory error -- Fixed [#833](https://github.com/actions/cache/issues/833) - cache doesn't work with github workspace directory +- Added option to lookup cache without downloading it. -### 3.0.7 +### 3.2.6 -- Fixed [#810](https://github.com/actions/cache/issues/810) - download stuck issue. A new timeout is introduced in the download process to abort the download if it gets stuck and doesn't finish within an hour. +- Fix zstd not being used after zstd version upgrade to 1.5.4 on hosted runners. -### 3.0.8 +### 3.2.5 -- Fix zstd not working for windows on gnu tar in issues [#888](https://github.com/actions/cache/issues/888) and [#891](https://github.com/actions/cache/issues/891). -- Allowing users to provide a custom timeout as input for aborting download of a cache segment using an environment variable `SEGMENT_DOWNLOAD_TIMEOUT_MINS`. Default is 60 minutes. +- Added fix to prevent from setting MYSYS environment variable globally. -### 3.0.9 +### 3.2.4 -- Enhanced the warning message for cache unavailablity in case of GHES. +- Added option to fail job on cache miss. -### 3.0.10 +### 3.2.3 -- Fix a bug with sorting inputs. -- Update definition for restore-keys in README.md +- Support cross os caching on Windows as an opt-in feature. +- Fix issue with symlink restoration on Windows for cross-os caches. -### 3.0.11 +### 3.2.2 -- Update toolkit version to 3.0.5 to include `@actions/core@^1.10.0` -- Update `@actions/cache` to use updated `saveState` and `setOutput` functions from `@actions/core@^1.10.0` - -### 3.1.0-beta.1 - -- Update `@actions/cache` on windows to use gnu tar and zstd by default and fallback to bsdtar and zstd if gnu tar is not available. ([issue](https://github.com/actions/cache/issues/984)) - -### 3.1.0-beta.2 - -- Added support for fallback to gzip to restore old caches on windows. - -### 3.1.0-beta.3 - -- Bug fixes for bsdtar fallback if gnutar not available and gzip fallback if cache saved using old cache action on windows. - -### 3.2.0-beta.1 - -- Added two new actions - [restore](restore/action.yml) and [save](save/action.yml) for granular control on cache. - -### 3.2.0 - -- Released the two new actions - [restore](restore/action.yml) and [save](save/action.yml) for granular control on cache +- Reverted the changes made in 3.2.1 to use gnu tar and zstd by default on windows. ### 3.2.1 @@ -79,44 +56,75 @@ - Added support for fallback to gzip to restore old caches on windows. - Added logs for cache version in case of a cache miss. -### 3.2.2 +### 3.2.0 -- Reverted the changes made in 3.2.1 to use gnu tar and zstd by default on windows. +- Released the two new actions - [restore](restore/action.yml) and [save](save/action.yml) for granular control on cache -### 3.2.3 +### 3.2.0-beta.1 -- Support cross os caching on Windows as an opt-in feature. -- Fix issue with symlink restoration on Windows for cross-os caches. +- Added two new actions - [restore](restore/action.yml) and [save](save/action.yml) for granular control on cache. -### 3.2.4 +### 3.1.0-beta.3 -- Added option to fail job on cache miss. +- Bug fixes for bsdtar fallback if gnutar not available and gzip fallback if cache saved using old cache action on windows. -### 3.2.5 +### 3.1.0-beta.2 -- Added fix to prevent from setting MYSYS environment variable globally. +- Added support for fallback to gzip to restore old caches on windows. -### 3.2.6 +### 3.1.0-beta.1 -- Fix zstd not being used after zstd version upgrade to 1.5.4 on hosted runners. +- Update `@actions/cache` on windows to use gnu tar and zstd by default and fallback to bsdtar and zstd if gnu tar is not available. ([issue](https://github.com/actions/cache/issues/984)) -### 3.3.0 +### 3.0.11 -- Added option to lookup cache without downloading it. +- Update toolkit version to 3.0.5 to include `@actions/core@^1.10.0` +- Update `@actions/cache` to use updated `saveState` and `setOutput` functions from `@actions/core@^1.10.0` -### 3.3.1 +### 3.0.10 -- Reduced segment size to 128MB and segment timeout to 10 minutes to fail fast in case the cache download is stuck. +- Fix a bug with sorting inputs. +- Update definition for restore-keys in README.md -### 3.3.2 +### 3.0.9 -- Fixes bug with Azure SDK causing blob downloads to get stuck. +- Enhanced the warning message for cache unavailablity in case of GHES. -### 3.3.3 +### 3.0.8 -- Updates @actions/cache to v3.2.3 to fix accidental mutated path arguments to `getCacheVersion` [actions/toolkit#1378](https://github.com/actions/toolkit/pull/1378) -- Additional audit fixes of npm package(s) +- Fix zstd not working for windows on gnu tar in issues [#888](https://github.com/actions/cache/issues/888) and [#891](https://github.com/actions/cache/issues/891). +- Allowing users to provide a custom timeout as input for aborting download of a cache segment using an environment variable `SEGMENT_DOWNLOAD_TIMEOUT_MINS`. Default is 60 minutes. -### 4.0.0 +### 3.0.7 -- Updated minimum runner version support from node 12 -> node 20 +- Fixed [#810](https://github.com/actions/cache/issues/810) - download stuck issue. A new timeout is introduced in the download process to abort the download if it gets stuck and doesn't finish within an hour. + +### 3.0.6 + +- Fixed [#809](https://github.com/actions/cache/issues/809) - zstd -d: no such file or directory error +- Fixed [#833](https://github.com/actions/cache/issues/833) - cache doesn't work with github workspace directory + +### 3.0.5 + +- Removed error handling by consuming actions/cache 3.0 toolkit, Now cache server error handling will be done by toolkit. ([PR](https://github.com/actions/cache/pull/834)) + +### 3.0.4 + +- Fixed tar creation error while trying to create tar with path as `~/` home folder on `ubuntu-latest`. ([issue](https://github.com/actions/cache/issues/689)) + +### 3.0.3 + +- Fixed avoiding empty cache save when no files are available for caching. ([issue](https://github.com/actions/cache/issues/624)) + +### 3.0.2 + +- Added support for dynamic cache size cap on GHES. + +### 3.0.1 + +- Added support for caching from GHES 3.5. +- Fixed download issue for files > 2GB during restore. + +### 3.0.0 + +- Updated minimum runner version support from node 12 -> node 16 diff --git a/__tests__/restoreImpl.test.ts b/__tests__/restoreImpl.test.ts index 8bab894..16f5f72 100644 --- a/__tests__/restoreImpl.test.ts +++ b/__tests__/restoreImpl.test.ts @@ -449,3 +449,19 @@ test("restore with lookup-only set", async () => { ); expect(failedMock).toHaveBeenCalledTimes(0); }); + +test("restore failure with earlyExit should call process exit", async () => { + testUtils.setInput(Inputs.Path, "node_modules"); + const failedMock = jest.spyOn(core, "setFailed"); + const restoreCacheMock = jest.spyOn(cache, "restoreCache"); + const processExitMock = jest.spyOn(process, "exit").mockImplementation(); + + // call restoreImpl with `earlyExit` set to true + await restoreImpl(new StateProvider(), true); + + expect(restoreCacheMock).toHaveBeenCalledTimes(0); + expect(failedMock).toHaveBeenCalledWith( + "Input required and not supplied: key" + ); + expect(processExitMock).toHaveBeenCalledWith(1); +}); diff --git a/dist/restore-only/index.js b/dist/restore-only/index.js index 9b3592c..bba89d9 100644 --- a/dist/restore-only/index.js +++ b/dist/restore-only/index.js @@ -93775,7 +93775,7 @@ const lib_storage_1 = __nccwpck_require__(3087); const downloadUtils_1 = __nccwpck_require__(6968); // if executing from RunsOn, unset any existing AWS env variables so that we can use the IAM instance profile for credentials // see unsetCredentials() in https://github.com/aws-actions/configure-aws-credentials/blob/v4.0.2/src/helpers.ts#L44 -if (process.env.RUNS_ON_RUNNER_NAME) { +if (process.env.RUNS_ON_RUNNER_NAME && process.env.RUNS_ON_RUNNER_NAME !== "") { delete process.env.AWS_ACCESS_KEY_ID; delete process.env.AWS_SECRET_ACCESS_KEY; delete process.env.AWS_SESSION_TOKEN; @@ -94464,7 +94464,7 @@ const stateProvider_1 = __nccwpck_require__(1527); const utils = __importStar(__nccwpck_require__(6850)); const custom = __importStar(__nccwpck_require__(1082)); const canSaveToS3 = process.env["RUNS_ON_S3_BUCKET_CACHE"] !== undefined; -function restoreImpl(stateProvider) { +function restoreImpl(stateProvider, earlyExit) { return __awaiter(this, void 0, void 0, function* () { try { if (!utils.isCacheFeatureAvailable()) { @@ -94517,21 +94517,16 @@ function restoreImpl(stateProvider) { } catch (error) { core.setFailed(error.message); + if (earlyExit) { + process.exit(1); + } } }); } exports.restoreImpl = restoreImpl; function run(stateProvider, earlyExit) { return __awaiter(this, void 0, void 0, function* () { - try { - yield restoreImpl(stateProvider); - } - catch (err) { - console.error(err); - if (earlyExit) { - process.exit(1); - } - } + yield restoreImpl(stateProvider, earlyExit); // node will stay alive if any promises are not resolved, // which is a possibility if HTTP requests are dangling // due to retries or timeouts. We know that if we got here diff --git a/dist/restore/index.js b/dist/restore/index.js index 4a2f3fe..5795956 100644 --- a/dist/restore/index.js +++ b/dist/restore/index.js @@ -94464,7 +94464,7 @@ const stateProvider_1 = __nccwpck_require__(1527); const utils = __importStar(__nccwpck_require__(6850)); const custom = __importStar(__nccwpck_require__(1082)); const canSaveToS3 = process.env["RUNS_ON_S3_BUCKET_CACHE"] !== undefined; -function restoreImpl(stateProvider) { +function restoreImpl(stateProvider, earlyExit) { return __awaiter(this, void 0, void 0, function* () { try { if (!utils.isCacheFeatureAvailable()) { @@ -94517,21 +94517,16 @@ function restoreImpl(stateProvider) { } catch (error) { core.setFailed(error.message); + if (earlyExit) { + process.exit(1); + } } }); } exports.restoreImpl = restoreImpl; function run(stateProvider, earlyExit) { return __awaiter(this, void 0, void 0, function* () { - try { - yield restoreImpl(stateProvider); - } - catch (err) { - console.error(err); - if (earlyExit) { - process.exit(1); - } - } + yield restoreImpl(stateProvider, earlyExit); // node will stay alive if any promises are not resolved, // which is a possibility if HTTP requests are dangling // due to retries or timeouts. We know that if we got here diff --git a/dist/save-only/index.js b/dist/save-only/index.js index 0909c56..7ab2a86 100644 --- a/dist/save-only/index.js +++ b/dist/save-only/index.js @@ -93775,7 +93775,7 @@ const lib_storage_1 = __nccwpck_require__(3087); const downloadUtils_1 = __nccwpck_require__(6968); // if executing from RunsOn, unset any existing AWS env variables so that we can use the IAM instance profile for credentials // see unsetCredentials() in https://github.com/aws-actions/configure-aws-credentials/blob/v4.0.2/src/helpers.ts#L44 -if (process.env.RUNS_ON_RUNNER_NAME) { +if (process.env.RUNS_ON_RUNNER_NAME && process.env.RUNS_ON_RUNNER_NAME !== "") { delete process.env.AWS_ACCESS_KEY_ID; delete process.env.AWS_SECRET_ACCESS_KEY; delete process.env.AWS_SESSION_TOKEN; diff --git a/package-lock.json b/package-lock.json index e38a97f..6d2eb08 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "cache", - "version": "4.0.0", + "version": "4.0.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "cache", - "version": "4.0.0", + "version": "4.0.2", "license": "MIT", "dependencies": { "@actions/cache": "^3.2.4", diff --git a/package.json b/package.json index 93efd66..c0bff98 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cache", - "version": "4.0.0", + "version": "4.0.2", "private": true, "description": "Cache dependencies and build outputs", "main": "dist/restore/index.js", diff --git a/src/restoreImpl.ts b/src/restoreImpl.ts index d517ca3..98f319a 100644 --- a/src/restoreImpl.ts +++ b/src/restoreImpl.ts @@ -13,7 +13,8 @@ import * as custom from "./custom/cache"; const canSaveToS3 = process.env["RUNS_ON_S3_BUCKET_CACHE"] !== undefined; export async function restoreImpl( - stateProvider: IStateProvider + stateProvider: IStateProvider, + earlyExit?: boolean | undefined ): Promise { try { if (!utils.isCacheFeatureAvailable()) { @@ -100,6 +101,9 @@ export async function restoreImpl( return cacheKey; } catch (error: unknown) { core.setFailed((error as Error).message); + if (earlyExit) { + process.exit(1); + } } } @@ -107,14 +111,7 @@ async function run( stateProvider: IStateProvider, earlyExit: boolean | undefined ): Promise { - try { - await restoreImpl(stateProvider); - } catch (err) { - console.error(err); - if (earlyExit) { - process.exit(1); - } - } + await restoreImpl(stateProvider, earlyExit); // node will stay alive if any promises are not resolved, // which is a possibility if HTTP requests are dangling