From 28cfea2580d23091e6b93c69b09c4d232a2d7d39 Mon Sep 17 00:00:00 2001
From: Sergey Dolin <dsame@github.com>
Date: Tue, 25 Jul 2023 19:29:37 +0200
Subject: [PATCH] cache-restore-only

---
 action.yml               | 3 +++
 dist/cache-save/index.js | 7 +++++++
 dist/setup/index.js      | 6 ++++++
 src/cache-save.ts        | 4 ++++
 src/constants.ts         | 5 ++++-
 src/main.ts              | 6 ++++++
 6 files changed, 30 insertions(+), 1 deletion(-)

diff --git a/action.yml b/action.yml
index 12b47b6..8ef2bb8 100644
--- a/action.yml
+++ b/action.yml
@@ -17,6 +17,9 @@ inputs:
     default: true
   cache-dependency-path:
     description: 'Used to specify the path to a dependency file - go.sum'
+  cache-restore-only:
+    description: Used to specify the cache . Set to true, if you'd like to reuse existing cache but did not update it
+    default: false
   architecture:
     description: 'Target architecture for Go to use. Examples: x86, x64. Will use system architecture by default.'
 outputs:
diff --git a/dist/cache-save/index.js b/dist/cache-save/index.js
index c1161a7..be37fb1 100644
--- a/dist/cache-save/index.js
+++ b/dist/cache-save/index.js
@@ -58457,6 +58457,10 @@ process.on('uncaughtException', e => {
 });
 function run() {
     return __awaiter(this, void 0, void 0, function* () {
+        if (core.getState(constants_1.State.CacheRestoreOnly) === constants_1.State.True) {
+            core.info('"cache-restore-only" set to true, skip caching');
+            return;
+        }
         try {
             yield cachePackages();
         }
@@ -58622,6 +58626,9 @@ var State;
 (function (State) {
     State["CachePrimaryKey"] = "CACHE_KEY";
     State["CacheMatchedKey"] = "CACHE_RESULT";
+    State["CacheRestoreOnly"] = "CACHE_RESTORE_ONLY";
+    State["True"] = "true";
+    State["False"] = "false";
 })(State = exports.State || (exports.State = {}));
 var Outputs;
 (function (Outputs) {
diff --git a/dist/setup/index.js b/dist/setup/index.js
index 378197f..b929398 100644
--- a/dist/setup/index.js
+++ b/dist/setup/index.js
@@ -61292,6 +61292,9 @@ var State;
 (function (State) {
     State["CachePrimaryKey"] = "CACHE_KEY";
     State["CacheMatchedKey"] = "CACHE_RESULT";
+    State["CacheRestoreOnly"] = "CACHE_RESTORE_ONLY";
+    State["True"] = "true";
+    State["False"] = "false";
 })(State = exports.State || (exports.State = {}));
 var Outputs;
 (function (Outputs) {
@@ -61690,6 +61693,7 @@ const cache_utils_1 = __nccwpck_require__(1678);
 const child_process_1 = __importDefault(__nccwpck_require__(2081));
 const fs_1 = __importDefault(__nccwpck_require__(7147));
 const os_1 = __importDefault(__nccwpck_require__(2037));
+const constants_1 = __nccwpck_require__(9042);
 function run() {
     return __awaiter(this, void 0, void 0, function* () {
         try {
@@ -61727,6 +61731,8 @@ function run() {
             core.debug(`add bin ${added}`);
             const goPath = yield io.which('go');
             const goVersion = (child_process_1.default.execSync(`${goPath} version`) || '').toString();
+            const cacheRestoreOnly = core.getBooleanInput('cache-restore-only');
+            core.saveState(constants_1.State.CacheRestoreOnly, cacheRestoreOnly ? constants_1.State.True : constants_1.State.False);
             if (cache && cache_utils_1.isCacheFeatureAvailable()) {
                 const packageManager = 'default';
                 const cacheDependencyPath = core.getInput('cache-dependency-path');
diff --git a/src/cache-save.ts b/src/cache-save.ts
index 584d0a6..7738044 100644
--- a/src/cache-save.ts
+++ b/src/cache-save.ts
@@ -13,6 +13,10 @@ process.on('uncaughtException', e => {
 });
 
 export async function run() {
+  if (core.getState(State.CacheRestoreOnly) === State.True) {
+    core.info('"cache-restore-only" set to true, skip caching');
+    return;
+  }
   try {
     await cachePackages();
   } catch (error) {
diff --git a/src/constants.ts b/src/constants.ts
index b43d18c..cdad255 100644
--- a/src/constants.ts
+++ b/src/constants.ts
@@ -1,6 +1,9 @@
 export enum State {
   CachePrimaryKey = 'CACHE_KEY',
-  CacheMatchedKey = 'CACHE_RESULT'
+  CacheMatchedKey = 'CACHE_RESULT',
+  CacheRestoreOnly = 'CACHE_RESTORE_ONLY',
+  True = 'true',
+  False = 'false'
 }
 
 export enum Outputs {
diff --git a/src/main.ts b/src/main.ts
index d3fb857..a75f26b 100644
--- a/src/main.ts
+++ b/src/main.ts
@@ -8,6 +8,7 @@ import {isCacheFeatureAvailable} from './cache-utils';
 import cp from 'child_process';
 import fs from 'fs';
 import os from 'os';
+import {State} from './constants';
 
 export async function run() {
   try {
@@ -64,6 +65,11 @@ export async function run() {
     const goPath = await io.which('go');
     const goVersion = (cp.execSync(`${goPath} version`) || '').toString();
 
+    const cacheRestoreOnly = core.getBooleanInput('cache-restore-only');
+    core.saveState(
+      State.CacheRestoreOnly,
+      cacheRestoreOnly ? State.True : State.False
+    );
     if (cache && isCacheFeatureAvailable()) {
       const packageManager = 'default';
       const cacheDependencyPath = core.getInput('cache-dependency-path');