diff --git a/README.md b/README.md index 3da1ae0..9da9474 100644 --- a/README.md +++ b/README.md @@ -54,7 +54,7 @@ If you are using a `self-hosted` Windows runner, `GNU tar` and `zstd` are requir * `key` - An explicit key for a cache entry. See [creating a cache key](#creating-a-cache-key). * `path` - A list of files, directories, and wildcard patterns to cache and restore. See [`@actions/glob`](https://github.com/actions/toolkit/tree/main/packages/glob) for supported patterns. -* `restore-keys` - An ordered list of prefix-matched keys to use for restoring stale cache if no cache hit occurred for key. +* `restore-keys` - An ordered multiline string listing the prefix-matched keys, that are used for restoring stale cache if no cache hit occurred for key. * `enableCrossOsArchive` - An optional boolean when enabled, allows Windows runners to save or restore caches that can be restored or saved respectively on other platforms. Default: `false` * `fail-on-cache-miss` - Fail the workflow if cache entry is not found. Default: `false` * `lookup-only` - If true, only checks if cache entry exists and skips download. Does not change save cache behavior. Default: `false` diff --git a/__tests__/restore.test.ts b/__tests__/restore.test.ts index 250f7ef..9b066eb 100644 --- a/__tests__/restore.test.ts +++ b/__tests__/restore.test.ts @@ -260,7 +260,7 @@ test("Fail restore when fail on cache miss is enabled and primary + restore keys ); expect(stateMock).toHaveBeenCalledWith("CACHE_KEY", key); - expect(setCacheHitOutputMock).toHaveBeenCalledTimes(0); + expect(setCacheHitOutputMock).toHaveBeenCalledTimes(1); expect(failedMock).toHaveBeenCalledWith( `Failed to restore cache entry. Exiting as fail-on-cache-miss is set. Input key: ${key}` diff --git a/__tests__/restoreOnly.test.ts b/__tests__/restoreOnly.test.ts index 81e5bca..840307d 100644 --- a/__tests__/restoreOnly.test.ts +++ b/__tests__/restoreOnly.test.ts @@ -86,7 +86,8 @@ test("restore with no cache found", async () => { ); expect(outputMock).toHaveBeenCalledWith("cache-primary-key", key); - expect(outputMock).toHaveBeenCalledTimes(1); + expect(outputMock).toHaveBeenCalledWith("cache-hit", "false"); + expect(outputMock).toHaveBeenCalledTimes(2); expect(failedMock).toHaveBeenCalledTimes(0); expect(infoMock).toHaveBeenCalledWith( diff --git a/action.yml b/action.yml index 0125281..14f247f 100644 --- a/action.yml +++ b/action.yml @@ -9,7 +9,7 @@ inputs: description: 'An explicit key for restoring and saving the cache' required: true restore-keys: - description: 'An ordered list of keys to use for restoring stale cache if no cache hit occurred for key. Note `cache-hit` returns false in this case.' + description: 'An ordered multiline string listing the prefix-matched keys, that are used for restoring stale cache if no cache hit occurred for key. Note `cache-hit` returns false in this case.' required: false upload-chunk-size: description: 'The chunk size used to split up large files during upload, in bytes' diff --git a/dist/restore-only/index.js b/dist/restore-only/index.js index 9a59ac0..d2f3631 100644 --- a/dist/restore-only/index.js +++ b/dist/restore-only/index.js @@ -59415,6 +59415,7 @@ function restoreImpl(stateProvider, earlyExit) { const lookupOnly = utils.getInputAsBool(constants_1.Inputs.LookupOnly); const cacheKey = yield cache.restoreCache(cachePaths, primaryKey, restoreKeys, { lookupOnly: lookupOnly }, enableCrossOsArchive); if (!cacheKey) { + core.setOutput(constants_1.Outputs.CacheHit, false.toString()); if (failOnCacheMiss) { throw new Error(`Failed to restore cache entry. Exiting as fail-on-cache-miss is set. Input key: ${primaryKey}`); } diff --git a/dist/restore/index.js b/dist/restore/index.js index 03a12b5..842eaa6 100644 --- a/dist/restore/index.js +++ b/dist/restore/index.js @@ -59415,6 +59415,7 @@ function restoreImpl(stateProvider, earlyExit) { const lookupOnly = utils.getInputAsBool(constants_1.Inputs.LookupOnly); const cacheKey = yield cache.restoreCache(cachePaths, primaryKey, restoreKeys, { lookupOnly: lookupOnly }, enableCrossOsArchive); if (!cacheKey) { + core.setOutput(constants_1.Outputs.CacheHit, false.toString()); if (failOnCacheMiss) { throw new Error(`Failed to restore cache entry. Exiting as fail-on-cache-miss is set. Input key: ${primaryKey}`); } diff --git a/examples.md b/examples.md index 2bd2231..d47780b 100644 --- a/examples.md +++ b/examples.md @@ -513,6 +513,7 @@ jobs: ```yaml - name: Get pip cache dir id: pip-cache + shell: bash run: | echo "dir=$(pip cache dir)" >> $GITHUB_OUTPUT diff --git a/restore/action.yml b/restore/action.yml index 194669f..3c5e5ae 100644 --- a/restore/action.yml +++ b/restore/action.yml @@ -9,7 +9,7 @@ inputs: description: 'An explicit key for restoring the cache' required: true restore-keys: - description: 'An ordered list of keys to use for restoring stale cache if no cache hit occurred for key. Note `cache-hit` returns false in this case.' + description: 'An ordered multiline string listing the prefix-matched keys, that are used for restoring stale cache if no cache hit occurred for key. Note `cache-hit` returns false in this case.' required: false enableCrossOsArchive: description: 'An optional boolean when enabled, allows windows runners to restore caches that were saved on other platforms' diff --git a/src/restoreImpl.ts b/src/restoreImpl.ts index 74a366d..bb302ac 100644 --- a/src/restoreImpl.ts +++ b/src/restoreImpl.ts @@ -51,6 +51,7 @@ export async function restoreImpl( ); if (!cacheKey) { + core.setOutput(Outputs.CacheHit, false.toString()); if (failOnCacheMiss) { throw new Error( `Failed to restore cache entry. Exiting as fail-on-cache-miss is set. Input key: ${primaryKey}` @@ -62,7 +63,6 @@ export async function restoreImpl( ...restoreKeys ].join(", ")}` ); - return; }