diff --git a/action.yml b/action.yml index 2606455..7861d7b 100644 --- a/action.yml +++ b/action.yml @@ -1,5 +1,9 @@ name: 'Cache' -description: 'Cache artifacts like dependencies and build outputs to improve workflow execution time' +description: | + Cache artifacts like dependencies and build outputs to improve workflow execution time + + OneVizion Improvements: + - Added ability to change primary key after restore cache. This is required when primary key initially can't be generated, only after cache restore author: 'GitHub' inputs: path: @@ -34,6 +38,9 @@ inputs: save-always does not work as intended and will be removed in a future release. A separate `actions/cache/restore` step should be used instead. See https://github.com/actions/cache/tree/main/save#always-save-cache for more details. + override-primary-key-env-variable: + description: 'Environment variable to override primary key' + required: false outputs: cache-hit: description: 'A boolean value to indicate an exact match was found for the primary key' diff --git a/dist/save/index.js b/dist/save/index.js index ee00f8d..727e56b 100644 --- a/dist/save/index.js +++ b/dist/save/index.js @@ -46257,12 +46257,18 @@ function saveImpl(stateProvider) { } // If restore has stored a primary key in state, reuse that // Else re-evaluate from inputs - const primaryKey = stateProvider.getState(constants_1.State.CachePrimaryKey) || + let primaryKey = stateProvider.getState(constants_1.State.CachePrimaryKey) || core.getInput(constants_1.Inputs.Key); if (!primaryKey) { utils.logWarning(`Key is not specified.`); return; } + const overridePrimaryKeyEnvVariable = core.getInput('override-primary-key-env-variable'); + if (overridePrimaryKeyEnvVariable !== undefined && process.env[overridePrimaryKeyEnvVariable] !== '') { + core.info(`Primary key has been overridden to ${process.env[overridePrimaryKeyEnvVariable]}, was ${primaryKey}.`); + primaryKey = process.env[overridePrimaryKeyEnvVariable] || ''; + } + // If matched restore key is same as primary key, then do not save cache // NO-OP in case of SaveOnly action const restoredKey = stateProvider.getCacheState(); diff --git a/package-lock.json b/package-lock.json index 9e06535..5bf3971 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "cache", - "version": "5.0.2", + "version": "5.0.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "cache", - "version": "5.0.2", + "version": "5.0.3", "license": "MIT", "dependencies": { "@actions/cache": "^5.0.5", diff --git a/src/saveImpl.ts b/src/saveImpl.ts index 4e5c312..fa07e66 100644 --- a/src/saveImpl.ts +++ b/src/saveImpl.ts @@ -34,7 +34,7 @@ export async function saveImpl( // If restore has stored a primary key in state, reuse that // Else re-evaluate from inputs - const primaryKey = + let primaryKey = stateProvider.getState(State.CachePrimaryKey) || core.getInput(Inputs.Key); @@ -43,6 +43,12 @@ export async function saveImpl( return; } + const overridePrimaryKeyEnvVariable = core.getInput('override-primary-key-env-variable'); + if (overridePrimaryKeyEnvVariable !== undefined && process.env[overridePrimaryKeyEnvVariable] !== '') { + core.info(`Primary key has been overridden to ${process.env[overridePrimaryKeyEnvVariable]}, was ${primaryKey}.`); + primaryKey = process.env[overridePrimaryKeyEnvVariable] || ''; + } + // If matched restore key is same as primary key, then do not save cache // NO-OP in case of SaveOnly action const restoredKey = stateProvider.getCacheState();