From 7dd9af18b03d37ae222b1e6f2e2d0782c39e2fb8 Mon Sep 17 00:00:00 2001 From: Frank Prins <25006490+PrinsFrank@users.noreply.github.com> Date: Mon, 22 Jan 2024 18:54:37 +0100 Subject: [PATCH] Add force-overwrite for cache --- README.md | 4 ++++ action.yml | 6 +++++- src/constants.ts | 3 ++- src/saveImpl.ts | 10 ++++++++-- 4 files changed, 19 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index d1d2aef..2291279 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,10 @@ See ["Caching dependencies to speed up workflows"](https://docs.github.com/en/ac ## What's New +### Unreleased + +* Added the `force-overwrite` flag to force overwrite any existing cache for incremental caching + ### v4 * Updated to node 20 diff --git a/action.yml b/action.yml index 0125281..9680835 100644 --- a/action.yml +++ b/action.yml @@ -29,7 +29,11 @@ inputs: save-always: description: 'Run the post step to save the cache even if another step before fails' default: 'false' - required: false + required: false + force-overwrite: + description: 'Delete any previous (incremental) cache before pushing a new cache even if a cache for the primary cache key exists' + default: 'false' + required: false outputs: cache-hit: description: 'A boolean value to indicate an exact match was found for the primary key' diff --git a/src/constants.ts b/src/constants.ts index 0158ae0..4d90a66 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -5,7 +5,8 @@ export enum Inputs { UploadChunkSize = "upload-chunk-size", // Input for cache, save action EnableCrossOsArchive = "enableCrossOsArchive", // Input for cache, restore, save action FailOnCacheMiss = "fail-on-cache-miss", // Input for cache, restore action - LookupOnly = "lookup-only" // Input for cache, restore action + LookupOnly = "lookup-only", // Input for cache, restore action + ForceOverwrite = "force-overwrite" // Input for cache action } export enum Outputs { diff --git a/src/saveImpl.ts b/src/saveImpl.ts index 4e5c312..2013b23 100644 --- a/src/saveImpl.ts +++ b/src/saveImpl.ts @@ -8,6 +8,7 @@ import { StateProvider } from "./stateProvider"; import * as utils from "./utils/actionUtils"; +import { issueCommand } from "@actions/core/lib/command"; // Catch and log any unhandled exceptions. These exceptions can leak out of the uploadChunk method in // @actions/toolkit when a failed upload closes the file descriptor causing any in-process reads to @@ -47,13 +48,18 @@ export async function saveImpl( // NO-OP in case of SaveOnly action const restoredKey = stateProvider.getCacheState(); - if (utils.isExactKeyMatch(primaryKey, restoredKey)) { + const forceOverwrite = utils.getInputAsBool(Inputs.ForceOverwrite); + if (utils.isExactKeyMatch(primaryKey, restoredKey) && !forceOverwrite) { core.info( - `Cache hit occurred on the primary key ${primaryKey}, not saving cache.` + `Cache hit occurred on the primary key ${primaryKey} and force-overwrite is disabled, not saving cache.` ); return; } + if (utils.isExactKeyMatch(primaryKey, restoredKey) && forceOverwrite) { + await issueCommand('actions-cache delete', {}, primaryKey); + } + const cachePaths = utils.getInputAsArray(Inputs.Path, { required: true });