From 76a4cff9ae9abd877db3173c31637296d870a25b Mon Sep 17 00:00:00 2001
From: Maxim Lobanov <v-malob@microsoft.com>
Date: Thu, 5 Aug 2021 12:00:47 +0000
Subject: [PATCH] update readme and dist files

---
 README.md                |   44 +-
 action.yml               |    2 +-
 dist/cache-save/index.js |  338 +++++-----
 dist/setup/index.js      | 1330 +++++++++++++++++++-------------------
 docs/advanced-usage.md   |   50 +-
 5 files changed, 888 insertions(+), 876 deletions(-)

diff --git a/README.md b/README.md
index abec939b..8b405f9e 100644
--- a/README.md
+++ b/README.md
@@ -39,15 +39,13 @@ major versions: `12`, `14`, `16`
 more specific versions: `10.15`, `14.2.0`, `16.3.0`  
 nvm lts syntax: `lts/erbium`, `lts/fermium`, `lts/*`  
 
-### Caching packages dependencies
+## Caching packages dependencies
 
-The action has a built-in functionality for caching and restoring dependencies. It uses [actions/cache](https://github.com/actions/cache) under hood for caching dependencies but requires less configuration settings.
+The action has a built-in functionality for caching and restoring dependencies. It uses [actions/cache](https://github.com/actions/cache) under hood for caching dependencies but requires less configuration settings. Supported package managers are `npm`, `yarn`, `pnpm` (v6.10+). The `cache` input is optional, and caching is turned off by default.
 
-Supported package managers are `npm`, `yarn`, `pnpm`. The `cache` input is optional, and caching is turned off by default.
+The action defaults to search for the dependency file (`package-lock.json` or `yarn.lock`) in the repository root, and uses its hash as a part of the cache key. Use `cache-dependency-path` for cases when multiple dependency files are used, or they are located in different subdirectories.
 
-The action defaults to search for the dependency file (`package-lock.json` or `yarn.lock`) in the repository root, and uses its hash as a part of the cache key. Use `cache-dependency-path` for cases when multiple dependency files are used, or they are located in different subdirectories. See the examples of `cache-dependency-path` usage in the [Advanced usage](docs/advanced-usage.md#caching-packages-dependencies) guide.
-
-The action follows [actions/cache](https://github.com/actions/cache/blob/main/examples.md#node---npm) guidelines, and caches global cache on the machine instead of `node_modules`, so cache can be reused between different Node.js versions.
+See the examples of using cache for `yarn` / `pnpm` and  `cache-dependency-path` input in the [Advanced usage](docs/advanced-usage.md#caching-packages-dependencies) guide.
 
 **Caching npm dependencies:**
 ```yaml
@@ -61,42 +59,20 @@ steps:
 - run: npm test
 ```
 
-**Caching yarn dependencies:**
+**Caching npm dependencies in monorepos:**
 ```yaml
 steps:
 - uses: actions/checkout@v2
 - uses: actions/setup-node@v2
   with:
     node-version: '14'
-    cache: 'yarn'
-- run: yarn install
-- run: yarn test
-```
-Yarn caching handles both yarn versions: 1 or 2.
-
-**Caching pnpm (v6.10+) dependencies:**
-```yaml
-# This workflow uses actions that are not certified by GitHub.
-# They are provided by a third-party and are governed by
-# separate terms of service, privacy policy, and support
-# documentation.
-
-# NOTE: pnpm caching support requires pnpm version >= 6.10.0
-
-steps:
-- uses: actions/checkout@v2
-- uses: pnpm/action-setup@646cdf48217256a3d0b80361c5a50727664284f2
-  with:
-    version: 6.10.0
-- uses: actions/setup-node@v2
-  with:
-    node-version: '14'
-    cache: 'pnpm'
-- run: pnpm install
-- run: pnpm test
+    cache: 'npm'
+    cache-dependency-path: subdir/package-lock.json
+- run: npm install
+- run: npm test
 ```
 
-### Matrix Testing:
+## Matrix Testing:
 ```yaml
 jobs:
   build:
diff --git a/action.yml b/action.yml
index c9477643..66daef0c 100644
--- a/action.yml
+++ b/action.yml
@@ -22,7 +22,7 @@ inputs:
   cache:
     description: 'Used to specify a package manager for caching in the default directory. Supported values: npm, yarn, pnpm'
   cache-dependency-path:
-    description: 'Used to specify path to a dependencies file: package-lock.json, yarn.lock, etc. Supports wildcards or an array of file names.'
+    description: 'Used to specify the path to a dependency file: package-lock.json, yarn.lock, etc. Supports wildcards or a list of file names for caching multiple dependencies.'
 # TODO: add input to control forcing to pull from cloud or dist. 
 #       escape valve for someone having issues or needing the absolute latest which isn't cached yet
 # Deprecated option, do not use. Will not be supported after October 1, 2019
diff --git a/dist/cache-save/index.js b/dist/cache-save/index.js
index 1db32bb7..2a0dfa54 100644
--- a/dist/cache-save/index.js
+++ b/dist/cache-save/index.js
@@ -4265,87 +4265,87 @@ exports.debug = debug; // for test
 /***/ (function(__unusedmodule, exports, __webpack_require__) {
 
 "use strict";
-
-var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
-    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
-    return new (P || (P = Promise))(function (resolve, reject) {
-        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
-        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
-        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
-        step((generator = generator.apply(thisArg, _arguments || [])).next());
-    });
-};
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
-    result["default"] = mod;
-    return result;
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-const core = __importStar(__webpack_require__(470));
-const exec = __importStar(__webpack_require__(986));
-exports.supportedPackageManagers = {
-    npm: {
-        lockFilePatterns: ['package-lock.json', 'yarn.lock'],
-        getCacheFolderCommand: 'npm config get cache'
-    },
-    pnpm: {
-        lockFilePatterns: ['pnpm-lock.yaml'],
-        getCacheFolderCommand: 'pnpm store path'
-    },
-    yarn1: {
-        lockFilePatterns: ['yarn.lock'],
-        getCacheFolderCommand: 'yarn cache dir'
-    },
-    yarn2: {
-        lockFilePatterns: ['yarn.lock'],
-        getCacheFolderCommand: 'yarn config get cacheFolder'
-    }
-};
-exports.getCommandOutput = (toolCommand) => __awaiter(void 0, void 0, void 0, function* () {
-    const { stdout, stderr, exitCode } = yield exec.getExecOutput(toolCommand);
-    if (stderr) {
-        throw new Error(stderr);
-    }
-    return stdout.trim();
-});
-const getPackageManagerVersion = (packageManager, command) => __awaiter(void 0, void 0, void 0, function* () {
-    const stdOut = yield exports.getCommandOutput(`${packageManager} ${command}`);
-    if (!stdOut) {
-        throw new Error(`Could not retrieve version of ${packageManager}`);
-    }
-    return stdOut;
-});
-exports.getPackageManagerInfo = (packageManager) => __awaiter(void 0, void 0, void 0, function* () {
-    if (packageManager === 'npm') {
-        return exports.supportedPackageManagers.npm;
-    }
-    else if (packageManager === 'pnpm') {
-        return exports.supportedPackageManagers.pnpm;
-    }
-    else if (packageManager === 'yarn') {
-        const yarnVersion = yield getPackageManagerVersion('yarn', '--version');
-        core.debug(`Consumed yarn version is ${yarnVersion}`);
-        if (yarnVersion.startsWith('1.')) {
-            return exports.supportedPackageManagers.yarn1;
-        }
-        else {
-            return exports.supportedPackageManagers.yarn2;
-        }
-    }
-    else {
-        return null;
-    }
-});
-exports.getCacheDirectoryPath = (packageManagerInfo, packageManager) => __awaiter(void 0, void 0, void 0, function* () {
-    const stdOut = yield exports.getCommandOutput(packageManagerInfo.getCacheFolderCommand);
-    if (!stdOut) {
-        throw new Error(`Could not get cache folder path for ${packageManager}`);
-    }
-    core.debug(`${packageManager} path is ${stdOut}`);
-    return stdOut;
-});
+
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+    return new (P || (P = Promise))(function (resolve, reject) {
+        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+        step((generator = generator.apply(thisArg, _arguments || [])).next());
+    });
+};
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+    result["default"] = mod;
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const core = __importStar(__webpack_require__(470));
+const exec = __importStar(__webpack_require__(986));
+exports.supportedPackageManagers = {
+    npm: {
+        lockFilePatterns: ['package-lock.json', 'yarn.lock'],
+        getCacheFolderCommand: 'npm config get cache'
+    },
+    pnpm: {
+        lockFilePatterns: ['pnpm-lock.yaml'],
+        getCacheFolderCommand: 'pnpm store path'
+    },
+    yarn1: {
+        lockFilePatterns: ['yarn.lock'],
+        getCacheFolderCommand: 'yarn cache dir'
+    },
+    yarn2: {
+        lockFilePatterns: ['yarn.lock'],
+        getCacheFolderCommand: 'yarn config get cacheFolder'
+    }
+};
+exports.getCommandOutput = (toolCommand) => __awaiter(void 0, void 0, void 0, function* () {
+    const { stdout, stderr, exitCode } = yield exec.getExecOutput(toolCommand);
+    if (stderr) {
+        throw new Error(stderr);
+    }
+    return stdout.trim();
+});
+const getPackageManagerVersion = (packageManager, command) => __awaiter(void 0, void 0, void 0, function* () {
+    const stdOut = yield exports.getCommandOutput(`${packageManager} ${command}`);
+    if (!stdOut) {
+        throw new Error(`Could not retrieve version of ${packageManager}`);
+    }
+    return stdOut;
+});
+exports.getPackageManagerInfo = (packageManager) => __awaiter(void 0, void 0, void 0, function* () {
+    if (packageManager === 'npm') {
+        return exports.supportedPackageManagers.npm;
+    }
+    else if (packageManager === 'pnpm') {
+        return exports.supportedPackageManagers.pnpm;
+    }
+    else if (packageManager === 'yarn') {
+        const yarnVersion = yield getPackageManagerVersion('yarn', '--version');
+        core.debug(`Consumed yarn version is ${yarnVersion}`);
+        if (yarnVersion.startsWith('1.')) {
+            return exports.supportedPackageManagers.yarn1;
+        }
+        else {
+            return exports.supportedPackageManagers.yarn2;
+        }
+    }
+    else {
+        return null;
+    }
+});
+exports.getCacheDirectoryPath = (packageManagerInfo, packageManager) => __awaiter(void 0, void 0, void 0, function* () {
+    const stdOut = yield exports.getCommandOutput(packageManagerInfo.getCacheFolderCommand);
+    if (!stdOut) {
+        throw new Error(`Could not get cache folder path for ${packageManager}`);
+    }
+    core.debug(`${packageManager} path is ${stdOut}`);
+    return stdOut;
+});
 
 
 /***/ }),
@@ -5272,23 +5272,23 @@ module.exports = v1;
 /***/ (function(__unusedmodule, exports) {
 
 "use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var LockType;
-(function (LockType) {
-    LockType["Npm"] = "npm";
-    LockType["Pnpm"] = "pnpm";
-    LockType["Yarn"] = "yarn";
-})(LockType = exports.LockType || (exports.LockType = {}));
-var State;
-(function (State) {
-    State["CachePrimaryKey"] = "CACHE_KEY";
-    State["CacheMatchedKey"] = "CACHE_RESULT";
-})(State = exports.State || (exports.State = {}));
-var Outputs;
-(function (Outputs) {
-    Outputs["CacheHit"] = "cache-hit";
-})(Outputs = exports.Outputs || (exports.Outputs = {}));
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var LockType;
+(function (LockType) {
+    LockType["Npm"] = "npm";
+    LockType["Pnpm"] = "pnpm";
+    LockType["Yarn"] = "yarn";
+})(LockType = exports.LockType || (exports.LockType = {}));
+var State;
+(function (State) {
+    State["CachePrimaryKey"] = "CACHE_KEY";
+    State["CacheMatchedKey"] = "CACHE_RESULT";
+})(State = exports.State || (exports.State = {}));
+var Outputs;
+(function (Outputs) {
+    Outputs["CacheHit"] = "cache-hit";
+})(Outputs = exports.Outputs || (exports.Outputs = {}));
 
 
 /***/ }),
@@ -50588,77 +50588,77 @@ module.exports = require("stream");
 /***/ (function(__unusedmodule, exports, __webpack_require__) {
 
 "use strict";
-
-var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
-    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
-    return new (P || (P = Promise))(function (resolve, reject) {
-        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
-        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
-        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
-        step((generator = generator.apply(thisArg, _arguments || [])).next());
-    });
-};
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
-    result["default"] = mod;
-    return result;
-};
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-const core = __importStar(__webpack_require__(470));
-const cache = __importStar(__webpack_require__(692));
-const fs_1 = __importDefault(__webpack_require__(747));
-const constants_1 = __webpack_require__(196);
-const cache_utils_1 = __webpack_require__(143);
-function run() {
-    return __awaiter(this, void 0, void 0, function* () {
-        try {
-            const cacheLock = core.getInput('cache');
-            yield cachePackages(cacheLock);
-        }
-        catch (error) {
-            core.setFailed(error.message);
-        }
-    });
-}
-exports.run = run;
-const cachePackages = (packageManager) => __awaiter(void 0, void 0, void 0, function* () {
-    const state = core.getState(constants_1.State.CacheMatchedKey);
-    const primaryKey = core.getState(constants_1.State.CachePrimaryKey);
-    const packageManagerInfo = yield cache_utils_1.getPackageManagerInfo(packageManager);
-    if (!packageManagerInfo) {
-        core.debug(`Caching for '${packageManager}' is not supported`);
-        return;
-    }
-    const cachePath = yield cache_utils_1.getCacheDirectoryPath(packageManagerInfo, packageManager);
-    if (!fs_1.default.existsSync(cachePath)) {
-        throw new Error(`Cache folder path is retrieved for ${packageManager} but doesn't exist on disk: ${cachePath}`);
-    }
-    if (primaryKey === state) {
-        core.info(`Cache hit occurred on the primary key ${primaryKey}, not saving cache.`);
-        return;
-    }
-    try {
-        yield cache.saveCache([cachePath], primaryKey);
-        core.info(`Cache saved with the key: ${primaryKey}`);
-    }
-    catch (error) {
-        if (error.name === cache.ValidationError.name) {
-            throw error;
-        }
-        else if (error.name === cache.ReserveCacheError.name) {
-            core.info(error.message);
-        }
-        else {
-            core.warning(`${error.message}`);
-        }
-    }
-});
-run();
+
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+    return new (P || (P = Promise))(function (resolve, reject) {
+        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+        step((generator = generator.apply(thisArg, _arguments || [])).next());
+    });
+};
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+    result["default"] = mod;
+    return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const core = __importStar(__webpack_require__(470));
+const cache = __importStar(__webpack_require__(692));
+const fs_1 = __importDefault(__webpack_require__(747));
+const constants_1 = __webpack_require__(196);
+const cache_utils_1 = __webpack_require__(143);
+function run() {
+    return __awaiter(this, void 0, void 0, function* () {
+        try {
+            const cacheLock = core.getInput('cache');
+            yield cachePackages(cacheLock);
+        }
+        catch (error) {
+            core.setFailed(error.message);
+        }
+    });
+}
+exports.run = run;
+const cachePackages = (packageManager) => __awaiter(void 0, void 0, void 0, function* () {
+    const state = core.getState(constants_1.State.CacheMatchedKey);
+    const primaryKey = core.getState(constants_1.State.CachePrimaryKey);
+    const packageManagerInfo = yield cache_utils_1.getPackageManagerInfo(packageManager);
+    if (!packageManagerInfo) {
+        core.debug(`Caching for '${packageManager}' is not supported`);
+        return;
+    }
+    const cachePath = yield cache_utils_1.getCacheDirectoryPath(packageManagerInfo, packageManager);
+    if (!fs_1.default.existsSync(cachePath)) {
+        throw new Error(`Cache folder path is retrieved for ${packageManager} but doesn't exist on disk: ${cachePath}`);
+    }
+    if (primaryKey === state) {
+        core.info(`Cache hit occurred on the primary key ${primaryKey}, not saving cache.`);
+        return;
+    }
+    try {
+        yield cache.saveCache([cachePath], primaryKey);
+        core.info(`Cache saved with the key: ${primaryKey}`);
+    }
+    catch (error) {
+        if (error.name === cache.ValidationError.name) {
+            throw error;
+        }
+        else if (error.name === cache.ReserveCacheError.name) {
+            core.info(error.message);
+        }
+        else {
+            core.warning(`${error.message}`);
+        }
+    }
+});
+run();
 
 
 /***/ }),
diff --git a/dist/setup/index.js b/dist/setup/index.js
index 440767b0..d0f495dd 100644
--- a/dist/setup/index.js
+++ b/dist/setup/index.js
@@ -5257,10 +5257,10 @@ exports.partialMatch = partialMatch;
 /***/ (function(__unusedmodule, exports, __webpack_require__) {
 
 "use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-const main_1 = __webpack_require__(131);
-main_1.run();
+
+Object.defineProperty(exports, "__esModule", { value: true });
+const main_1 = __webpack_require__(131);
+main_1.run();
 
 
 /***/ }),
@@ -6832,86 +6832,86 @@ module.exports = require("child_process");
 /***/ (function(__unusedmodule, exports, __webpack_require__) {
 
 "use strict";
-
-var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
-    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
-    return new (P || (P = Promise))(function (resolve, reject) {
-        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
-        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
-        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
-        step((generator = generator.apply(thisArg, _arguments || [])).next());
-    });
-};
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
-    result["default"] = mod;
-    return result;
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-const core = __importStar(__webpack_require__(470));
-const installer = __importStar(__webpack_require__(923));
-const auth = __importStar(__webpack_require__(749));
-const path = __importStar(__webpack_require__(622));
-const cache_restore_1 = __webpack_require__(409);
-const url_1 = __webpack_require__(835);
-const os = __webpack_require__(87);
-function run() {
-    return __awaiter(this, void 0, void 0, function* () {
-        try {
-            //
-            // Version is optional.  If supplied, install / use from the tool cache
-            // If not supplied then task is still used to setup proxy, auth, etc...
-            //
-            let version = core.getInput('node-version');
-            if (!version) {
-                version = core.getInput('version');
-            }
-            let arch = core.getInput('architecture');
-            const cache = core.getInput('cache');
-            // if architecture supplied but node-version is not
-            // if we don't throw a warning, the already installed x64 node will be used which is not probably what user meant.
-            if (arch && !version) {
-                core.warning('`architecture` is provided but `node-version` is missing. In this configuration, the version/architecture of Node will not be changed. To fix this, provide `architecture` in combination with `node-version`');
-            }
-            if (!arch) {
-                arch = os.arch();
-            }
-            if (version) {
-                let token = core.getInput('token');
-                let auth = !token || isGhes() ? undefined : `token ${token}`;
-                let stable = (core.getInput('stable') || 'true').toUpperCase() === 'TRUE';
-                const checkLatest = (core.getInput('check-latest') || 'false').toUpperCase() === 'TRUE';
-                yield installer.getNode(version, stable, checkLatest, auth, arch);
-            }
-            const registryUrl = core.getInput('registry-url');
-            const alwaysAuth = core.getInput('always-auth');
-            if (registryUrl) {
-                auth.configAuthentication(registryUrl, alwaysAuth);
-            }
-            if (cache) {
-                if (isGhes()) {
-                    throw new Error('Caching is not supported on GHES');
-                }
-                const cacheDependencyPath = core.getInput('cache-dependency-path');
-                yield cache_restore_1.restoreCache(cache, cacheDependencyPath);
-            }
-            const matchersPath = path.join(__dirname, '../..', '.github');
-            core.info(`##[add-matcher]${path.join(matchersPath, 'tsc.json')}`);
-            core.info(`##[add-matcher]${path.join(matchersPath, 'eslint-stylish.json')}`);
-            core.info(`##[add-matcher]${path.join(matchersPath, 'eslint-compact.json')}`);
-        }
-        catch (error) {
-            core.setFailed(error.message);
-        }
-    });
-}
-exports.run = run;
-function isGhes() {
-    const ghUrl = new url_1.URL(process.env['GITHUB_SERVER_URL'] || 'https://github.com');
-    return ghUrl.hostname.toUpperCase() !== 'GITHUB.COM';
-}
+
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+    return new (P || (P = Promise))(function (resolve, reject) {
+        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+        step((generator = generator.apply(thisArg, _arguments || [])).next());
+    });
+};
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+    result["default"] = mod;
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const core = __importStar(__webpack_require__(470));
+const installer = __importStar(__webpack_require__(923));
+const auth = __importStar(__webpack_require__(749));
+const path = __importStar(__webpack_require__(622));
+const cache_restore_1 = __webpack_require__(409);
+const url_1 = __webpack_require__(835);
+const os = __webpack_require__(87);
+function run() {
+    return __awaiter(this, void 0, void 0, function* () {
+        try {
+            //
+            // Version is optional.  If supplied, install / use from the tool cache
+            // If not supplied then task is still used to setup proxy, auth, etc...
+            //
+            let version = core.getInput('node-version');
+            if (!version) {
+                version = core.getInput('version');
+            }
+            let arch = core.getInput('architecture');
+            const cache = core.getInput('cache');
+            // if architecture supplied but node-version is not
+            // if we don't throw a warning, the already installed x64 node will be used which is not probably what user meant.
+            if (arch && !version) {
+                core.warning('`architecture` is provided but `node-version` is missing. In this configuration, the version/architecture of Node will not be changed. To fix this, provide `architecture` in combination with `node-version`');
+            }
+            if (!arch) {
+                arch = os.arch();
+            }
+            if (version) {
+                let token = core.getInput('token');
+                let auth = !token || isGhes() ? undefined : `token ${token}`;
+                let stable = (core.getInput('stable') || 'true').toUpperCase() === 'TRUE';
+                const checkLatest = (core.getInput('check-latest') || 'false').toUpperCase() === 'TRUE';
+                yield installer.getNode(version, stable, checkLatest, auth, arch);
+            }
+            const registryUrl = core.getInput('registry-url');
+            const alwaysAuth = core.getInput('always-auth');
+            if (registryUrl) {
+                auth.configAuthentication(registryUrl, alwaysAuth);
+            }
+            if (cache) {
+                if (isGhes()) {
+                    throw new Error('Caching is not supported on GHES');
+                }
+                const cacheDependencyPath = core.getInput('cache-dependency-path');
+                yield cache_restore_1.restoreCache(cache, cacheDependencyPath);
+            }
+            const matchersPath = path.join(__dirname, '../..', '.github');
+            core.info(`##[add-matcher]${path.join(matchersPath, 'tsc.json')}`);
+            core.info(`##[add-matcher]${path.join(matchersPath, 'eslint-stylish.json')}`);
+            core.info(`##[add-matcher]${path.join(matchersPath, 'eslint-compact.json')}`);
+        }
+        catch (error) {
+            core.setFailed(error.message);
+        }
+    });
+}
+exports.run = run;
+function isGhes() {
+    const ghUrl = new url_1.URL(process.env['GITHUB_SERVER_URL'] || 'https://github.com');
+    return ghUrl.hostname.toUpperCase() !== 'GITHUB.COM';
+}
 
 
 /***/ }),
@@ -8648,23 +8648,23 @@ function authenticationPlugin(octokit, options) {
 /***/ (function(__unusedmodule, exports) {
 
 "use strict";
-
-Object.defineProperty(exports, "__esModule", { value: true });
-var LockType;
-(function (LockType) {
-    LockType["Npm"] = "npm";
-    LockType["Pnpm"] = "pnpm";
-    LockType["Yarn"] = "yarn";
-})(LockType = exports.LockType || (exports.LockType = {}));
-var State;
-(function (State) {
-    State["CachePrimaryKey"] = "CACHE_KEY";
-    State["CacheMatchedKey"] = "CACHE_RESULT";
-})(State = exports.State || (exports.State = {}));
-var Outputs;
-(function (Outputs) {
-    Outputs["CacheHit"] = "cache-hit";
-})(Outputs = exports.Outputs || (exports.Outputs = {}));
+
+Object.defineProperty(exports, "__esModule", { value: true });
+var LockType;
+(function (LockType) {
+    LockType["Npm"] = "npm";
+    LockType["Pnpm"] = "pnpm";
+    LockType["Yarn"] = "yarn";
+})(LockType = exports.LockType || (exports.LockType = {}));
+var State;
+(function (State) {
+    State["CachePrimaryKey"] = "CACHE_KEY";
+    State["CacheMatchedKey"] = "CACHE_RESULT";
+})(State = exports.State || (exports.State = {}));
+var Outputs;
+(function (Outputs) {
+    Outputs["CacheHit"] = "cache-hit";
+})(Outputs = exports.Outputs || (exports.Outputs = {}));
 
 
 /***/ }),
@@ -8762,7 +8762,7 @@ module.exports = require("timers");
 /* 215 */
 /***/ (function(module) {
 
-module.exports = {"_args":[["@octokit/rest@16.38.1","C:\\Repos\\Mine\\setup-node"]],"_from":"@octokit/rest@16.38.1","_id":"@octokit/rest@16.38.1","_inBundle":false,"_integrity":"sha512-zyNFx+/Bd1EXt7LQjfrc6H4wryBQ/oDuZeZhGMBSFr1eMPFDmpEweFQR3R25zjKwBQpDY7L5GQO6A3XSaOfV1w==","_location":"/@octokit/rest","_phantomChildren":{"os-name":"3.1.0"},"_requested":{"type":"version","registry":true,"raw":"@octokit/rest@16.38.1","name":"@octokit/rest","escapedName":"@octokit%2frest","scope":"@octokit","rawSpec":"16.38.1","saveSpec":null,"fetchSpec":"16.38.1"},"_requiredBy":["/@actions/github"],"_resolved":"https://registry.npmjs.org/@octokit/rest/-/rest-16.38.1.tgz","_spec":"16.38.1","_where":"C:\\Repos\\Mine\\setup-node","author":{"name":"Gregor Martynus","url":"https://github.com/gr2m"},"bugs":{"url":"https://github.com/octokit/rest.js/issues"},"bundlesize":[{"path":"./dist/octokit-rest.min.js.gz","maxSize":"33 kB"}],"contributors":[{"name":"Mike de Boer","email":"info@mikedeboer.nl"},{"name":"Fabian Jakobs","email":"fabian@c9.io"},{"name":"Joe Gallo","email":"joe@brassafrax.com"},{"name":"Gregor Martynus","url":"https://github.com/gr2m"}],"dependencies":{"@octokit/auth-token":"^2.4.0","@octokit/request":"^5.2.0","@octokit/request-error":"^1.0.2","atob-lite":"^2.0.0","before-after-hook":"^2.0.0","btoa-lite":"^1.0.0","deprecation":"^2.0.0","lodash.get":"^4.4.2","lodash.set":"^4.3.2","lodash.uniq":"^4.5.0","octokit-pagination-methods":"^1.1.0","once":"^1.4.0","universal-user-agent":"^4.0.0"},"description":"GitHub REST API client for Node.js","devDependencies":{"@gimenete/type-writer":"^0.1.3","@octokit/auth":"^1.1.1","@octokit/fixtures-server":"^5.0.6","@octokit/graphql":"^4.2.0","@types/node":"^13.1.0","bundlesize":"^0.18.0","chai":"^4.1.2","compression-webpack-plugin":"^3.1.0","cypress":"^3.0.0","glob":"^7.1.2","http-proxy-agent":"^3.0.0","lodash.camelcase":"^4.3.0","lodash.merge":"^4.6.1","lodash.upperfirst":"^4.3.1","mkdirp":"^0.5.1","mocha":"^6.0.0","mustache":"^4.0.0","nock":"^11.3.3","npm-run-all":"^4.1.2","nyc":"^15.0.0","prettier":"^1.14.2","proxy":"^1.0.0","semantic-release":"^16.0.0","sinon":"^8.0.0","sinon-chai":"^3.0.0","sort-keys":"^4.0.0","string-to-arraybuffer":"^1.0.0","string-to-jsdoc-comment":"^1.0.0","typescript":"^3.3.1","webpack":"^4.0.0","webpack-bundle-analyzer":"^3.0.0","webpack-cli":"^3.0.0"},"files":["index.js","index.d.ts","lib","plugins"],"homepage":"https://github.com/octokit/rest.js#readme","keywords":["octokit","github","rest","api-client"],"license":"MIT","name":"@octokit/rest","nyc":{"ignore":["test"]},"publishConfig":{"access":"public"},"release":{"publish":["@semantic-release/npm",{"path":"@semantic-release/github","assets":["dist/*","!dist/*.map.gz"]}]},"repository":{"type":"git","url":"git+https://github.com/octokit/rest.js.git"},"scripts":{"build":"npm-run-all build:*","build:browser":"npm-run-all build:browser:*","build:browser:development":"webpack --mode development --entry . --output-library=Octokit --output=./dist/octokit-rest.js --profile --json > dist/bundle-stats.json","build:browser:production":"webpack --mode production --entry . --plugin=compression-webpack-plugin --output-library=Octokit --output-path=./dist --output-filename=octokit-rest.min.js --devtool source-map","build:ts":"npm run -s update-endpoints:typescript","coverage":"nyc report --reporter=html && open coverage/index.html","generate-bundle-report":"webpack-bundle-analyzer dist/bundle-stats.json --mode=static --no-open --report dist/bundle-report.html","lint":"prettier --check '{lib,plugins,scripts,test}/**/*.{js,json,ts}' 'docs/*.{js,json}' 'docs/src/**/*' index.js README.md package.json","lint:fix":"prettier --write '{lib,plugins,scripts,test}/**/*.{js,json,ts}' 'docs/*.{js,json}' 'docs/src/**/*' index.js README.md package.json","postvalidate:ts":"tsc --noEmit --target es6 test/typescript-validate.ts","prebuild:browser":"mkdirp dist/","pretest":"npm run -s lint","prevalidate:ts":"npm run -s build:ts","start-fixtures-server":"octokit-fixtures-server","test":"nyc mocha test/mocha-node-setup.js \"test/*/**/*-test.js\"","test:browser":"cypress run --browser chrome","update-endpoints":"npm-run-all update-endpoints:*","update-endpoints:code":"node scripts/update-endpoints/code","update-endpoints:fetch-json":"node scripts/update-endpoints/fetch-json","update-endpoints:typescript":"node scripts/update-endpoints/typescript","validate:ts":"tsc --target es6 --noImplicitAny index.d.ts"},"types":"index.d.ts","version":"16.38.1"};
+module.exports = {"name":"@octokit/rest","version":"16.38.1","publishConfig":{"access":"public"},"description":"GitHub REST API client for Node.js","keywords":["octokit","github","rest","api-client"],"author":"Gregor Martynus (https://github.com/gr2m)","contributors":[{"name":"Mike de Boer","email":"info@mikedeboer.nl"},{"name":"Fabian Jakobs","email":"fabian@c9.io"},{"name":"Joe Gallo","email":"joe@brassafrax.com"},{"name":"Gregor Martynus","url":"https://github.com/gr2m"}],"repository":"https://github.com/octokit/rest.js","dependencies":{"@octokit/auth-token":"^2.4.0","@octokit/request":"^5.2.0","@octokit/request-error":"^1.0.2","atob-lite":"^2.0.0","before-after-hook":"^2.0.0","btoa-lite":"^1.0.0","deprecation":"^2.0.0","lodash.get":"^4.4.2","lodash.set":"^4.3.2","lodash.uniq":"^4.5.0","octokit-pagination-methods":"^1.1.0","once":"^1.4.0","universal-user-agent":"^4.0.0"},"devDependencies":{"@gimenete/type-writer":"^0.1.3","@octokit/auth":"^1.1.1","@octokit/fixtures-server":"^5.0.6","@octokit/graphql":"^4.2.0","@types/node":"^13.1.0","bundlesize":"^0.18.0","chai":"^4.1.2","compression-webpack-plugin":"^3.1.0","cypress":"^3.0.0","glob":"^7.1.2","http-proxy-agent":"^3.0.0","lodash.camelcase":"^4.3.0","lodash.merge":"^4.6.1","lodash.upperfirst":"^4.3.1","mkdirp":"^0.5.1","mocha":"^6.0.0","mustache":"^4.0.0","nock":"^11.3.3","npm-run-all":"^4.1.2","nyc":"^15.0.0","prettier":"^1.14.2","proxy":"^1.0.0","semantic-release":"^16.0.0","sinon":"^8.0.0","sinon-chai":"^3.0.0","sort-keys":"^4.0.0","string-to-arraybuffer":"^1.0.0","string-to-jsdoc-comment":"^1.0.0","typescript":"^3.3.1","webpack":"^4.0.0","webpack-bundle-analyzer":"^3.0.0","webpack-cli":"^3.0.0"},"types":"index.d.ts","scripts":{"coverage":"nyc report --reporter=html && open coverage/index.html","lint":"prettier --check '{lib,plugins,scripts,test}/**/*.{js,json,ts}' 'docs/*.{js,json}' 'docs/src/**/*' index.js README.md package.json","lint:fix":"prettier --write '{lib,plugins,scripts,test}/**/*.{js,json,ts}' 'docs/*.{js,json}' 'docs/src/**/*' index.js README.md package.json","pretest":"npm run -s lint","test":"nyc mocha test/mocha-node-setup.js \"test/*/**/*-test.js\"","test:browser":"cypress run --browser chrome","build":"npm-run-all build:*","build:ts":"npm run -s update-endpoints:typescript","prebuild:browser":"mkdirp dist/","build:browser":"npm-run-all build:browser:*","build:browser:development":"webpack --mode development --entry . --output-library=Octokit --output=./dist/octokit-rest.js --profile --json > dist/bundle-stats.json","build:browser:production":"webpack --mode production --entry . --plugin=compression-webpack-plugin --output-library=Octokit --output-path=./dist --output-filename=octokit-rest.min.js --devtool source-map","generate-bundle-report":"webpack-bundle-analyzer dist/bundle-stats.json --mode=static --no-open --report dist/bundle-report.html","update-endpoints":"npm-run-all update-endpoints:*","update-endpoints:fetch-json":"node scripts/update-endpoints/fetch-json","update-endpoints:code":"node scripts/update-endpoints/code","update-endpoints:typescript":"node scripts/update-endpoints/typescript","prevalidate:ts":"npm run -s build:ts","validate:ts":"tsc --target es6 --noImplicitAny index.d.ts","postvalidate:ts":"tsc --noEmit --target es6 test/typescript-validate.ts","start-fixtures-server":"octokit-fixtures-server"},"license":"MIT","files":["index.js","index.d.ts","lib","plugins"],"nyc":{"ignore":["test"]},"release":{"publish":["@semantic-release/npm",{"path":"@semantic-release/github","assets":["dist/*","!dist/*.map.gz"]}]},"bundlesize":[{"path":"./dist/octokit-rest.min.js.gz","maxSize":"33 kB"}],"_resolved":"https://registry.npmjs.org/@octokit/rest/-/rest-16.38.1.tgz","_integrity":"sha512-zyNFx+/Bd1EXt7LQjfrc6H4wryBQ/oDuZeZhGMBSFr1eMPFDmpEweFQR3R25zjKwBQpDY7L5GQO6A3XSaOfV1w==","_from":"@octokit/rest@16.38.1"};
 
 /***/ }),
 /* 216 */,
@@ -14239,7 +14239,7 @@ function expand(str, isTop) {
 /* 314 */
 /***/ (function(module) {
 
-module.exports = {"_args":[["@octokit/graphql@2.1.3","C:\\Repos\\Mine\\setup-node"]],"_from":"@octokit/graphql@2.1.3","_id":"@octokit/graphql@2.1.3","_inBundle":false,"_integrity":"sha512-XoXJqL2ondwdnMIW3wtqJWEwcBfKk37jO/rYkoxNPEVeLBDGsGO1TCWggrAlq3keGt/O+C/7VepXnukUxwt5vA==","_location":"/@octokit/graphql","_phantomChildren":{},"_requested":{"type":"version","registry":true,"raw":"@octokit/graphql@2.1.3","name":"@octokit/graphql","escapedName":"@octokit%2fgraphql","scope":"@octokit","rawSpec":"2.1.3","saveSpec":null,"fetchSpec":"2.1.3"},"_requiredBy":["/@actions/github"],"_resolved":"https://registry.npmjs.org/@octokit/graphql/-/graphql-2.1.3.tgz","_spec":"2.1.3","_where":"C:\\Repos\\Mine\\setup-node","author":{"name":"Gregor Martynus","url":"https://github.com/gr2m"},"bugs":{"url":"https://github.com/octokit/graphql.js/issues"},"bundlesize":[{"path":"./dist/octokit-graphql.min.js.gz","maxSize":"5KB"}],"dependencies":{"@octokit/request":"^5.0.0","universal-user-agent":"^2.0.3"},"description":"GitHub GraphQL API client for browsers and Node","devDependencies":{"chai":"^4.2.0","compression-webpack-plugin":"^2.0.0","coveralls":"^3.0.3","cypress":"^3.1.5","fetch-mock":"^7.3.1","mkdirp":"^0.5.1","mocha":"^6.0.0","npm-run-all":"^4.1.3","nyc":"^14.0.0","semantic-release":"^15.13.3","simple-mock":"^0.8.0","standard":"^12.0.1","webpack":"^4.29.6","webpack-bundle-analyzer":"^3.1.0","webpack-cli":"^3.2.3"},"files":["lib"],"homepage":"https://github.com/octokit/graphql.js#readme","keywords":["octokit","github","api","graphql"],"license":"MIT","main":"index.js","name":"@octokit/graphql","publishConfig":{"access":"public"},"release":{"publish":["@semantic-release/npm",{"path":"@semantic-release/github","assets":["dist/*","!dist/*.map.gz"]}]},"repository":{"type":"git","url":"git+https://github.com/octokit/graphql.js.git"},"scripts":{"build":"npm-run-all build:*","build:development":"webpack --mode development --entry . --output-library=octokitGraphql --output=./dist/octokit-graphql.js --profile --json > dist/bundle-stats.json","build:production":"webpack --mode production --entry . --plugin=compression-webpack-plugin --output-library=octokitGraphql --output-path=./dist --output-filename=octokit-graphql.min.js --devtool source-map","bundle-report":"webpack-bundle-analyzer dist/bundle-stats.json --mode=static --no-open --report dist/bundle-report.html","coverage":"nyc report --reporter=html && open coverage/index.html","coverage:upload":"nyc report --reporter=text-lcov | coveralls","prebuild":"mkdirp dist/","pretest":"standard","test":"nyc mocha test/*-test.js","test:browser":"cypress run --browser chrome"},"standard":{"globals":["describe","before","beforeEach","afterEach","after","it","expect"]},"version":"2.1.3"};
+module.exports = {"name":"@octokit/graphql","version":"2.1.3","publishConfig":{"access":"public"},"description":"GitHub GraphQL API client for browsers and Node","main":"index.js","scripts":{"prebuild":"mkdirp dist/","build":"npm-run-all build:*","build:development":"webpack --mode development --entry . --output-library=octokitGraphql --output=./dist/octokit-graphql.js --profile --json > dist/bundle-stats.json","build:production":"webpack --mode production --entry . --plugin=compression-webpack-plugin --output-library=octokitGraphql --output-path=./dist --output-filename=octokit-graphql.min.js --devtool source-map","bundle-report":"webpack-bundle-analyzer dist/bundle-stats.json --mode=static --no-open --report dist/bundle-report.html","coverage":"nyc report --reporter=html && open coverage/index.html","coverage:upload":"nyc report --reporter=text-lcov | coveralls","pretest":"standard","test":"nyc mocha test/*-test.js","test:browser":"cypress run --browser chrome"},"repository":{"type":"git","url":"https://github.com/octokit/graphql.js.git"},"keywords":["octokit","github","api","graphql"],"author":"Gregor Martynus (https://github.com/gr2m)","license":"MIT","bugs":{"url":"https://github.com/octokit/graphql.js/issues"},"homepage":"https://github.com/octokit/graphql.js#readme","dependencies":{"@octokit/request":"^5.0.0","universal-user-agent":"^2.0.3"},"devDependencies":{"chai":"^4.2.0","compression-webpack-plugin":"^2.0.0","coveralls":"^3.0.3","cypress":"^3.1.5","fetch-mock":"^7.3.1","mkdirp":"^0.5.1","mocha":"^6.0.0","npm-run-all":"^4.1.3","nyc":"^14.0.0","semantic-release":"^15.13.3","simple-mock":"^0.8.0","standard":"^12.0.1","webpack":"^4.29.6","webpack-bundle-analyzer":"^3.1.0","webpack-cli":"^3.2.3"},"bundlesize":[{"path":"./dist/octokit-graphql.min.js.gz","maxSize":"5KB"}],"release":{"publish":["@semantic-release/npm",{"path":"@semantic-release/github","assets":["dist/*","!dist/*.map.gz"]}]},"standard":{"globals":["describe","before","beforeEach","afterEach","after","it","expect"]},"files":["lib"],"_resolved":"https://registry.npmjs.org/@octokit/graphql/-/graphql-2.1.3.tgz","_integrity":"sha512-XoXJqL2ondwdnMIW3wtqJWEwcBfKk37jO/rYkoxNPEVeLBDGsGO1TCWggrAlq3keGt/O+C/7VepXnukUxwt5vA==","_from":"@octokit/graphql@2.1.3"};
 
 /***/ }),
 /* 315 */,
@@ -44628,69 +44628,69 @@ module.exports = require("buffer");
 /***/ (function(__unusedmodule, exports, __webpack_require__) {
 
 "use strict";
-
-var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
-    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
-    return new (P || (P = Promise))(function (resolve, reject) {
-        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
-        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
-        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
-        step((generator = generator.apply(thisArg, _arguments || [])).next());
-    });
-};
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
-    result["default"] = mod;
-    return result;
-};
-var __importDefault = (this && this.__importDefault) || function (mod) {
-    return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-const cache = __importStar(__webpack_require__(638));
-const core = __importStar(__webpack_require__(470));
-const glob = __importStar(__webpack_require__(281));
-const path_1 = __importDefault(__webpack_require__(622));
-const fs_1 = __importDefault(__webpack_require__(747));
-const constants_1 = __webpack_require__(196);
-const cache_utils_1 = __webpack_require__(570);
-exports.restoreCache = (packageManager, cacheDependencyPath) => __awaiter(void 0, void 0, void 0, function* () {
-    const packageManagerInfo = yield cache_utils_1.getPackageManagerInfo(packageManager);
-    if (!packageManagerInfo) {
-        throw new Error(`Caching for '${packageManager}' is not supported`);
-    }
-    const platform = process.env.RUNNER_OS;
-    const cachePath = yield cache_utils_1.getCacheDirectoryPath(packageManagerInfo, packageManager);
-    const lockFilePath = cacheDependencyPath
-        ? cacheDependencyPath
-        : findLockFile(packageManagerInfo);
-    const fileHash = yield glob.hashFiles(lockFilePath);
-    if (!fileHash) {
-        throw new Error('Some specified paths were not resolved, unable to cache dependencies.');
-    }
-    const primaryKey = `node-cache-${platform}-${packageManager}-${fileHash}`;
-    core.debug(`primary key is ${primaryKey}`);
-    core.saveState(constants_1.State.CachePrimaryKey, primaryKey);
-    const cacheKey = yield cache.restoreCache([cachePath], primaryKey);
-    if (!cacheKey) {
-        core.info(`${packageManager} cache is not found`);
-        return;
-    }
-    core.saveState(constants_1.State.CacheMatchedKey, cacheKey);
-    core.info(`Cache restored from key: ${cacheKey}`);
-});
-const findLockFile = (packageManager) => {
-    let lockFiles = packageManager.lockFilePatterns;
-    const workspace = process.env.GITHUB_WORKSPACE;
-    const rootContent = fs_1.default.readdirSync(workspace);
-    const lockFile = lockFiles.find(item => rootContent.includes(item));
-    if (!lockFile) {
-        throw new Error(`Dependencies lock file is not found in ${workspace}. Supported file patterns: ${lockFiles.toString()}`);
-    }
-    return path_1.default.join(workspace, lockFile);
-};
+
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+    return new (P || (P = Promise))(function (resolve, reject) {
+        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+        step((generator = generator.apply(thisArg, _arguments || [])).next());
+    });
+};
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+    result["default"] = mod;
+    return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+    return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const cache = __importStar(__webpack_require__(638));
+const core = __importStar(__webpack_require__(470));
+const glob = __importStar(__webpack_require__(281));
+const path_1 = __importDefault(__webpack_require__(622));
+const fs_1 = __importDefault(__webpack_require__(747));
+const constants_1 = __webpack_require__(196);
+const cache_utils_1 = __webpack_require__(570);
+exports.restoreCache = (packageManager, cacheDependencyPath) => __awaiter(void 0, void 0, void 0, function* () {
+    const packageManagerInfo = yield cache_utils_1.getPackageManagerInfo(packageManager);
+    if (!packageManagerInfo) {
+        throw new Error(`Caching for '${packageManager}' is not supported`);
+    }
+    const platform = process.env.RUNNER_OS;
+    const cachePath = yield cache_utils_1.getCacheDirectoryPath(packageManagerInfo, packageManager);
+    const lockFilePath = cacheDependencyPath
+        ? cacheDependencyPath
+        : findLockFile(packageManagerInfo);
+    const fileHash = yield glob.hashFiles(lockFilePath);
+    if (!fileHash) {
+        throw new Error('Some specified paths were not resolved, unable to cache dependencies.');
+    }
+    const primaryKey = `node-cache-${platform}-${packageManager}-${fileHash}`;
+    core.debug(`primary key is ${primaryKey}`);
+    core.saveState(constants_1.State.CachePrimaryKey, primaryKey);
+    const cacheKey = yield cache.restoreCache([cachePath], primaryKey);
+    if (!cacheKey) {
+        core.info(`${packageManager} cache is not found`);
+        return;
+    }
+    core.saveState(constants_1.State.CacheMatchedKey, cacheKey);
+    core.info(`Cache restored from key: ${cacheKey}`);
+});
+const findLockFile = (packageManager) => {
+    let lockFiles = packageManager.lockFilePatterns;
+    const workspace = process.env.GITHUB_WORKSPACE;
+    const rootContent = fs_1.default.readdirSync(workspace);
+    const lockFile = lockFiles.find(item => rootContent.includes(item));
+    if (!lockFile) {
+        throw new Error(`Dependencies lock file is not found in ${workspace}. Supported file patterns: ${lockFiles.toString()}`);
+    }
+    return path_1.default.join(workspace, lockFile);
+};
 
 
 /***/ }),
@@ -51569,87 +51569,87 @@ module.exports = parse;
 /***/ (function(__unusedmodule, exports, __webpack_require__) {
 
 "use strict";
-
-var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
-    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
-    return new (P || (P = Promise))(function (resolve, reject) {
-        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
-        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
-        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
-        step((generator = generator.apply(thisArg, _arguments || [])).next());
-    });
-};
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
-    result["default"] = mod;
-    return result;
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-const core = __importStar(__webpack_require__(470));
-const exec = __importStar(__webpack_require__(986));
-exports.supportedPackageManagers = {
-    npm: {
-        lockFilePatterns: ['package-lock.json', 'yarn.lock'],
-        getCacheFolderCommand: 'npm config get cache'
-    },
-    pnpm: {
-        lockFilePatterns: ['pnpm-lock.yaml'],
-        getCacheFolderCommand: 'pnpm store path'
-    },
-    yarn1: {
-        lockFilePatterns: ['yarn.lock'],
-        getCacheFolderCommand: 'yarn cache dir'
-    },
-    yarn2: {
-        lockFilePatterns: ['yarn.lock'],
-        getCacheFolderCommand: 'yarn config get cacheFolder'
-    }
-};
-exports.getCommandOutput = (toolCommand) => __awaiter(void 0, void 0, void 0, function* () {
-    const { stdout, stderr, exitCode } = yield exec.getExecOutput(toolCommand);
-    if (stderr) {
-        throw new Error(stderr);
-    }
-    return stdout.trim();
-});
-const getPackageManagerVersion = (packageManager, command) => __awaiter(void 0, void 0, void 0, function* () {
-    const stdOut = yield exports.getCommandOutput(`${packageManager} ${command}`);
-    if (!stdOut) {
-        throw new Error(`Could not retrieve version of ${packageManager}`);
-    }
-    return stdOut;
-});
-exports.getPackageManagerInfo = (packageManager) => __awaiter(void 0, void 0, void 0, function* () {
-    if (packageManager === 'npm') {
-        return exports.supportedPackageManagers.npm;
-    }
-    else if (packageManager === 'pnpm') {
-        return exports.supportedPackageManagers.pnpm;
-    }
-    else if (packageManager === 'yarn') {
-        const yarnVersion = yield getPackageManagerVersion('yarn', '--version');
-        core.debug(`Consumed yarn version is ${yarnVersion}`);
-        if (yarnVersion.startsWith('1.')) {
-            return exports.supportedPackageManagers.yarn1;
-        }
-        else {
-            return exports.supportedPackageManagers.yarn2;
-        }
-    }
-    else {
-        return null;
-    }
-});
-exports.getCacheDirectoryPath = (packageManagerInfo, packageManager) => __awaiter(void 0, void 0, void 0, function* () {
-    const stdOut = yield exports.getCommandOutput(packageManagerInfo.getCacheFolderCommand);
-    if (!stdOut) {
-        throw new Error(`Could not get cache folder path for ${packageManager}`);
-    }
-    core.debug(`${packageManager} path is ${stdOut}`);
-    return stdOut;
-});
+
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+    return new (P || (P = Promise))(function (resolve, reject) {
+        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+        step((generator = generator.apply(thisArg, _arguments || [])).next());
+    });
+};
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+    result["default"] = mod;
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const core = __importStar(__webpack_require__(470));
+const exec = __importStar(__webpack_require__(986));
+exports.supportedPackageManagers = {
+    npm: {
+        lockFilePatterns: ['package-lock.json', 'yarn.lock'],
+        getCacheFolderCommand: 'npm config get cache'
+    },
+    pnpm: {
+        lockFilePatterns: ['pnpm-lock.yaml'],
+        getCacheFolderCommand: 'pnpm store path'
+    },
+    yarn1: {
+        lockFilePatterns: ['yarn.lock'],
+        getCacheFolderCommand: 'yarn cache dir'
+    },
+    yarn2: {
+        lockFilePatterns: ['yarn.lock'],
+        getCacheFolderCommand: 'yarn config get cacheFolder'
+    }
+};
+exports.getCommandOutput = (toolCommand) => __awaiter(void 0, void 0, void 0, function* () {
+    const { stdout, stderr, exitCode } = yield exec.getExecOutput(toolCommand);
+    if (stderr) {
+        throw new Error(stderr);
+    }
+    return stdout.trim();
+});
+const getPackageManagerVersion = (packageManager, command) => __awaiter(void 0, void 0, void 0, function* () {
+    const stdOut = yield exports.getCommandOutput(`${packageManager} ${command}`);
+    if (!stdOut) {
+        throw new Error(`Could not retrieve version of ${packageManager}`);
+    }
+    return stdOut;
+});
+exports.getPackageManagerInfo = (packageManager) => __awaiter(void 0, void 0, void 0, function* () {
+    if (packageManager === 'npm') {
+        return exports.supportedPackageManagers.npm;
+    }
+    else if (packageManager === 'pnpm') {
+        return exports.supportedPackageManagers.pnpm;
+    }
+    else if (packageManager === 'yarn') {
+        const yarnVersion = yield getPackageManagerVersion('yarn', '--version');
+        core.debug(`Consumed yarn version is ${yarnVersion}`);
+        if (yarnVersion.startsWith('1.')) {
+            return exports.supportedPackageManagers.yarn1;
+        }
+        else {
+            return exports.supportedPackageManagers.yarn2;
+        }
+    }
+    else {
+        return null;
+    }
+});
+exports.getCacheDirectoryPath = (packageManagerInfo, packageManager) => __awaiter(void 0, void 0, void 0, function* () {
+    const stdOut = yield exports.getCommandOutput(packageManagerInfo.getCacheFolderCommand);
+    if (!stdOut) {
+        throw new Error(`Could not get cache folder path for ${packageManager}`);
+    }
+    core.debug(`${packageManager} path is ${stdOut}`);
+    return stdOut;
+});
 
 
 /***/ }),
@@ -57585,62 +57585,62 @@ var __createBinding;
 /***/ (function(__unusedmodule, exports, __webpack_require__) {
 
 "use strict";
-
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
-    result["default"] = mod;
-    return result;
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-const fs = __importStar(__webpack_require__(747));
-const os = __importStar(__webpack_require__(87));
-const path = __importStar(__webpack_require__(622));
-const core = __importStar(__webpack_require__(470));
-const github = __importStar(__webpack_require__(469));
-function configAuthentication(registryUrl, alwaysAuth) {
-    const npmrc = path.resolve(process.env['RUNNER_TEMP'] || process.cwd(), '.npmrc');
-    if (!registryUrl.endsWith('/')) {
-        registryUrl += '/';
-    }
-    writeRegistryToFile(registryUrl, npmrc, alwaysAuth);
-}
-exports.configAuthentication = configAuthentication;
-function writeRegistryToFile(registryUrl, fileLocation, alwaysAuth) {
-    let scope = core.getInput('scope');
-    if (!scope && registryUrl.indexOf('npm.pkg.github.com') > -1) {
-        scope = github.context.repo.owner;
-    }
-    if (scope && scope[0] != '@') {
-        scope = '@' + scope;
-    }
-    if (scope) {
-        scope = scope.toLowerCase();
-    }
-    core.debug(`Setting auth in ${fileLocation}`);
-    let newContents = '';
-    if (fs.existsSync(fileLocation)) {
-        const curContents = fs.readFileSync(fileLocation, 'utf8');
-        curContents.split(os.EOL).forEach((line) => {
-            // Add current contents unless they are setting the registry
-            if (!line.toLowerCase().startsWith('registry')) {
-                newContents += line + os.EOL;
-            }
-        });
-    }
-    // Remove http: or https: from front of registry.
-    const authString = registryUrl.replace(/(^\w+:|^)/, '') + ':_authToken=${NODE_AUTH_TOKEN}';
-    const registryString = scope
-        ? `${scope}:registry=${registryUrl}`
-        : `registry=${registryUrl}`;
-    const alwaysAuthString = `always-auth=${alwaysAuth}`;
-    newContents += `${authString}${os.EOL}${registryString}${os.EOL}${alwaysAuthString}`;
-    fs.writeFileSync(fileLocation, newContents);
-    core.exportVariable('NPM_CONFIG_USERCONFIG', fileLocation);
-    // Export empty node_auth_token if didn't exist so npm doesn't complain about not being able to find it
-    core.exportVariable('NODE_AUTH_TOKEN', process.env.NODE_AUTH_TOKEN || 'XXXXX-XXXXX-XXXXX-XXXXX');
-}
+
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+    result["default"] = mod;
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const fs = __importStar(__webpack_require__(747));
+const os = __importStar(__webpack_require__(87));
+const path = __importStar(__webpack_require__(622));
+const core = __importStar(__webpack_require__(470));
+const github = __importStar(__webpack_require__(469));
+function configAuthentication(registryUrl, alwaysAuth) {
+    const npmrc = path.resolve(process.env['RUNNER_TEMP'] || process.cwd(), '.npmrc');
+    if (!registryUrl.endsWith('/')) {
+        registryUrl += '/';
+    }
+    writeRegistryToFile(registryUrl, npmrc, alwaysAuth);
+}
+exports.configAuthentication = configAuthentication;
+function writeRegistryToFile(registryUrl, fileLocation, alwaysAuth) {
+    let scope = core.getInput('scope');
+    if (!scope && registryUrl.indexOf('npm.pkg.github.com') > -1) {
+        scope = github.context.repo.owner;
+    }
+    if (scope && scope[0] != '@') {
+        scope = '@' + scope;
+    }
+    if (scope) {
+        scope = scope.toLowerCase();
+    }
+    core.debug(`Setting auth in ${fileLocation}`);
+    let newContents = '';
+    if (fs.existsSync(fileLocation)) {
+        const curContents = fs.readFileSync(fileLocation, 'utf8');
+        curContents.split(os.EOL).forEach((line) => {
+            // Add current contents unless they are setting the registry
+            if (!line.toLowerCase().startsWith('registry')) {
+                newContents += line + os.EOL;
+            }
+        });
+    }
+    // Remove http: or https: from front of registry.
+    const authString = registryUrl.replace(/(^\w+:|^)/, '') + ':_authToken=${NODE_AUTH_TOKEN}';
+    const registryString = scope
+        ? `${scope}:registry=${registryUrl}`
+        : `registry=${registryUrl}`;
+    const alwaysAuthString = `always-auth=${alwaysAuth}`;
+    newContents += `${authString}${os.EOL}${registryString}${os.EOL}${alwaysAuthString}`;
+    fs.writeFileSync(fileLocation, newContents);
+    core.exportVariable('NPM_CONFIG_USERCONFIG', fileLocation);
+    // Export empty node_auth_token if didn't exist so npm doesn't complain about not being able to find it
+    core.exportVariable('NODE_AUTH_TOKEN', process.env.NODE_AUTH_TOKEN || 'XXXXX-XXXXX-XXXXX-XXXXX');
+}
 
 
 /***/ }),
@@ -65038,368 +65038,368 @@ exports.NOOP_TEXT_MAP_PROPAGATOR = new NoopTextMapPropagator();
 /***/ (function(module, exports, __webpack_require__) {
 
 "use strict";
-
-var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
-    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
-    return new (P || (P = Promise))(function (resolve, reject) {
-        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
-        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
-        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
-        step((generator = generator.apply(thisArg, _arguments || [])).next());
-    });
-};
-var __importStar = (this && this.__importStar) || function (mod) {
-    if (mod && mod.__esModule) return mod;
-    var result = {};
-    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
-    result["default"] = mod;
-    return result;
-};
-Object.defineProperty(exports, "__esModule", { value: true });
-const os = __webpack_require__(87);
-const assert = __importStar(__webpack_require__(357));
-const core = __importStar(__webpack_require__(470));
-const hc = __importStar(__webpack_require__(539));
-const io = __importStar(__webpack_require__(1));
-const tc = __importStar(__webpack_require__(533));
-const path = __importStar(__webpack_require__(622));
-const semver = __importStar(__webpack_require__(280));
-const fs = __webpack_require__(747);
-function getNode(versionSpec, stable, checkLatest, auth, arch = os.arch()) {
-    return __awaiter(this, void 0, void 0, function* () {
-        // Store manifest data to avoid multiple calls
-        let manifest;
-        let osPlat = os.platform();
-        let osArch = translateArchToDistUrl(arch);
-        if (isLtsAlias(versionSpec)) {
-            core.info('Attempt to resolve LTS alias from manifest...');
-            // No try-catch since it's not possible to resolve LTS alias without manifest
-            manifest = yield getManifest(auth);
-            versionSpec = resolveLtsAliasFromManifest(versionSpec, stable, manifest);
-        }
-        if (checkLatest) {
-            core.info('Attempt to resolve the latest version from manifest...');
-            const resolvedVersion = yield resolveVersionFromManifest(versionSpec, stable, auth, osArch, manifest);
-            if (resolvedVersion) {
-                versionSpec = resolvedVersion;
-                core.info(`Resolved as '${versionSpec}'`);
-            }
-            else {
-                core.info(`Failed to resolve version ${versionSpec} from manifest`);
-            }
-        }
-        // check cache
-        let toolPath;
-        toolPath = tc.find('node', versionSpec, osArch);
-        // If not found in cache, download
-        if (toolPath) {
-            core.info(`Found in cache @ ${toolPath}`);
-        }
-        else {
-            core.info(`Attempting to download ${versionSpec}...`);
-            let downloadPath = '';
-            let info = null;
-            //
-            // Try download from internal distribution (popular versions only)
-            //
-            try {
-                info = yield getInfoFromManifest(versionSpec, stable, auth, osArch, manifest);
-                if (info) {
-                    core.info(`Acquiring ${info.resolvedVersion} - ${info.arch} from ${info.downloadUrl}`);
-                    downloadPath = yield tc.downloadTool(info.downloadUrl, undefined, auth);
-                }
-                else {
-                    core.info('Not found in manifest.  Falling back to download directly from Node');
-                }
-            }
-            catch (err) {
-                // Rate limit?
-                if (err instanceof tc.HTTPError &&
-                    (err.httpStatusCode === 403 || err.httpStatusCode === 429)) {
-                    core.info(`Received HTTP status code ${err.httpStatusCode}.  This usually indicates the rate limit has been exceeded`);
-                }
-                else {
-                    core.info(err.message);
-                }
-                core.debug(err.stack);
-                core.info('Falling back to download directly from Node');
-            }
-            //
-            // Download from nodejs.org
-            //
-            if (!downloadPath) {
-                info = yield getInfoFromDist(versionSpec, arch);
-                if (!info) {
-                    throw new Error(`Unable to find Node version '${versionSpec}' for platform ${osPlat} and architecture ${osArch}.`);
-                }
-                core.info(`Acquiring ${info.resolvedVersion} - ${info.arch} from ${info.downloadUrl}`);
-                try {
-                    downloadPath = yield tc.downloadTool(info.downloadUrl);
-                }
-                catch (err) {
-                    if (err instanceof tc.HTTPError && err.httpStatusCode == 404) {
-                        return yield acquireNodeFromFallbackLocation(info.resolvedVersion, info.arch);
-                    }
-                    throw err;
-                }
-            }
-            //
-            // Extract
-            //
-            core.info('Extracting ...');
-            let extPath;
-            info = info || {}; // satisfy compiler, never null when reaches here
-            if (osPlat == 'win32') {
-                let _7zPath = path.join(__dirname, '../..', 'externals', '7zr.exe');
-                extPath = yield tc.extract7z(downloadPath, undefined, _7zPath);
-                // 7z extracts to folder matching file name
-                let nestedPath = path.join(extPath, path.basename(info.fileName, '.7z'));
-                if (fs.existsSync(nestedPath)) {
-                    extPath = nestedPath;
-                }
-            }
-            else {
-                extPath = yield tc.extractTar(downloadPath, undefined, [
-                    'xz',
-                    '--strip',
-                    '1'
-                ]);
-            }
-            //
-            // Install into the local tool cache - node extracts with a root folder that matches the fileName downloaded
-            //
-            core.info('Adding to the cache ...');
-            toolPath = yield tc.cacheDir(extPath, 'node', info.resolvedVersion, info.arch);
-            core.info('Done');
-        }
-        //
-        // a tool installer initimately knows details about the layout of that tool
-        // for example, node binary is in the bin folder after the extract on Mac/Linux.
-        // layouts could change by version, by platform etc... but that's the tool installers job
-        //
-        if (osPlat != 'win32') {
-            toolPath = path.join(toolPath, 'bin');
-        }
-        //
-        // prepend the tools path. instructs the agent to prepend for future tasks
-        core.addPath(toolPath);
-    });
-}
-exports.getNode = getNode;
-function isLtsAlias(versionSpec) {
-    return versionSpec.startsWith('lts/');
-}
-function getManifest(auth) {
-    core.debug('Getting manifest from actions/node-versions@main');
-    return tc.getManifestFromRepo('actions', 'node-versions', auth, 'main');
-}
-function resolveLtsAliasFromManifest(versionSpec, stable, manifest) {
-    var _a;
-    const alias = (_a = versionSpec.split('lts/')[1]) === null || _a === void 0 ? void 0 : _a.toLowerCase();
-    if (!alias) {
-        throw new Error(`Unable to parse LTS alias for Node version '${versionSpec}'`);
-    }
-    core.debug(`LTS alias '${alias}' for Node version '${versionSpec}'`);
-    // Supported formats are `lts/<alias>` and `lts/*`. Where asterisk means highest possible LTS.
-    const release = alias === '*'
-        ? manifest.find(x => !!x.lts && x.stable === stable)
-        : manifest.find(x => { var _a; return ((_a = x.lts) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === alias && x.stable === stable; });
-    if (!release) {
-        throw new Error(`Unable to find LTS release '${alias}' for Node version '${versionSpec}'.`);
-    }
-    core.debug(`Found LTS release '${release.version}' for Node version '${versionSpec}'`);
-    return release.version.split('.')[0];
-}
-function getInfoFromManifest(versionSpec, stable, auth, osArch = translateArchToDistUrl(os.arch()), manifest) {
-    return __awaiter(this, void 0, void 0, function* () {
-        let info = null;
-        if (!manifest) {
-            core.debug('No manifest cached');
-            manifest = yield getManifest(auth);
-        }
-        const rel = yield tc.findFromManifest(versionSpec, stable, manifest, osArch);
-        if (rel && rel.files.length > 0) {
-            info = {};
-            info.resolvedVersion = rel.version;
-            info.arch = rel.files[0].arch;
-            info.downloadUrl = rel.files[0].download_url;
-            info.fileName = rel.files[0].filename;
-        }
-        return info;
-    });
-}
-function getInfoFromDist(versionSpec, arch = os.arch()) {
-    return __awaiter(this, void 0, void 0, function* () {
-        let osPlat = os.platform();
-        let osArch = translateArchToDistUrl(arch);
-        let version;
-        version = yield queryDistForMatch(versionSpec, arch);
-        if (!version) {
-            return null;
-        }
-        //
-        // Download - a tool installer intimately knows how to get the tool (and construct urls)
-        //
-        version = semver.clean(version) || '';
-        let fileName = osPlat == 'win32'
-            ? `node-v${version}-win-${osArch}`
-            : `node-v${version}-${osPlat}-${osArch}`;
-        let urlFileName = osPlat == 'win32' ? `${fileName}.7z` : `${fileName}.tar.gz`;
-        let url = `https://nodejs.org/dist/v${version}/${urlFileName}`;
-        return {
-            downloadUrl: url,
-            resolvedVersion: version,
-            arch: arch,
-            fileName: fileName
-        };
-    });
-}
-function resolveVersionFromManifest(versionSpec, stable, auth, osArch = translateArchToDistUrl(os.arch()), manifest) {
-    return __awaiter(this, void 0, void 0, function* () {
-        try {
-            const info = yield getInfoFromManifest(versionSpec, stable, auth, osArch, manifest);
-            return info === null || info === void 0 ? void 0 : info.resolvedVersion;
-        }
-        catch (err) {
-            core.info('Unable to resolve version from manifest...');
-            core.debug(err.message);
-        }
-    });
-}
-// TODO - should we just export this from @actions/tool-cache? Lifted directly from there
-function evaluateVersions(versions, versionSpec) {
-    let version = '';
-    core.debug(`evaluating ${versions.length} versions`);
-    versions = versions.sort((a, b) => {
-        if (semver.gt(a, b)) {
-            return 1;
-        }
-        return -1;
-    });
-    for (let i = versions.length - 1; i >= 0; i--) {
-        const potential = versions[i];
-        const satisfied = semver.satisfies(potential, versionSpec);
-        if (satisfied) {
-            version = potential;
-            break;
-        }
-    }
-    if (version) {
-        core.debug(`matched: ${version}`);
-    }
-    else {
-        core.debug('match not found');
-    }
-    return version;
-}
-function queryDistForMatch(versionSpec, arch = os.arch()) {
-    return __awaiter(this, void 0, void 0, function* () {
-        let osPlat = os.platform();
-        let osArch = translateArchToDistUrl(arch);
-        // node offers a json list of versions
-        let dataFileName;
-        switch (osPlat) {
-            case 'linux':
-                dataFileName = `linux-${osArch}`;
-                break;
-            case 'darwin':
-                dataFileName = `osx-${osArch}-tar`;
-                break;
-            case 'win32':
-                dataFileName = `win-${osArch}-exe`;
-                break;
-            default:
-                throw new Error(`Unexpected OS '${osPlat}'`);
-        }
-        let versions = [];
-        let nodeVersions = yield module.exports.getVersionsFromDist();
-        nodeVersions.forEach((nodeVersion) => {
-            // ensure this version supports your os and platform
-            if (nodeVersion.files.indexOf(dataFileName) >= 0) {
-                versions.push(nodeVersion.version);
-            }
-        });
-        // get the latest version that matches the version spec
-        let version = evaluateVersions(versions, versionSpec);
-        return version;
-    });
-}
-function getVersionsFromDist() {
-    return __awaiter(this, void 0, void 0, function* () {
-        let dataUrl = 'https://nodejs.org/dist/index.json';
-        let httpClient = new hc.HttpClient('setup-node', [], {
-            allowRetries: true,
-            maxRetries: 3
-        });
-        let response = yield httpClient.getJson(dataUrl);
-        return response.result || [];
-    });
-}
-exports.getVersionsFromDist = getVersionsFromDist;
-// For non LTS versions of Node, the files we need (for Windows) are sometimes located
-// in a different folder than they normally are for other versions.
-// Normally the format is similar to: https://nodejs.org/dist/v5.10.1/node-v5.10.1-win-x64.7z
-// In this case, there will be two files located at:
-//      /dist/v5.10.1/win-x64/node.exe
-//      /dist/v5.10.1/win-x64/node.lib
-// If this is not the structure, there may also be two files located at:
-//      /dist/v0.12.18/node.exe
-//      /dist/v0.12.18/node.lib
-// This method attempts to download and cache the resources from these alternative locations.
-// Note also that the files are normally zipped but in this case they are just an exe
-// and lib file in a folder, not zipped.
-function acquireNodeFromFallbackLocation(version, arch = os.arch()) {
-    return __awaiter(this, void 0, void 0, function* () {
-        let osPlat = os.platform();
-        let osArch = translateArchToDistUrl(arch);
-        // Create temporary folder to download in to
-        const tempDownloadFolder = 'temp_' + Math.floor(Math.random() * 2000000000);
-        const tempDirectory = process.env['RUNNER_TEMP'] || '';
-        assert.ok(tempDirectory, 'Expected RUNNER_TEMP to be defined');
-        const tempDir = path.join(tempDirectory, tempDownloadFolder);
-        yield io.mkdirP(tempDir);
-        let exeUrl;
-        let libUrl;
-        try {
-            exeUrl = `https://nodejs.org/dist/v${version}/win-${osArch}/node.exe`;
-            libUrl = `https://nodejs.org/dist/v${version}/win-${osArch}/node.lib`;
-            core.info(`Downloading only node binary from ${exeUrl}`);
-            const exePath = yield tc.downloadTool(exeUrl);
-            yield io.cp(exePath, path.join(tempDir, 'node.exe'));
-            const libPath = yield tc.downloadTool(libUrl);
-            yield io.cp(libPath, path.join(tempDir, 'node.lib'));
-        }
-        catch (err) {
-            if (err instanceof tc.HTTPError && err.httpStatusCode == 404) {
-                exeUrl = `https://nodejs.org/dist/v${version}/node.exe`;
-                libUrl = `https://nodejs.org/dist/v${version}/node.lib`;
-                const exePath = yield tc.downloadTool(exeUrl);
-                yield io.cp(exePath, path.join(tempDir, 'node.exe'));
-                const libPath = yield tc.downloadTool(libUrl);
-                yield io.cp(libPath, path.join(tempDir, 'node.lib'));
-            }
-            else {
-                throw err;
-            }
-        }
-        let toolPath = yield tc.cacheDir(tempDir, 'node', version, arch);
-        core.addPath(toolPath);
-        return toolPath;
-    });
-}
-// os.arch does not always match the relative download url, e.g.
-// os.arch == 'arm' != node-v12.13.1-linux-armv7l.tar.gz
-// All other currently supported architectures match, e.g.:
-//   os.arch = arm64 => https://nodejs.org/dist/v{VERSION}/node-v{VERSION}-{OS}-arm64.tar.gz
-//   os.arch = x64 => https://nodejs.org/dist/v{VERSION}/node-v{VERSION}-{OS}-x64.tar.gz
-function translateArchToDistUrl(arch) {
-    switch (arch) {
-        case 'arm':
-            return 'armv7l';
-        default:
-            return arch;
-    }
-}
+
+var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
+    function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
+    return new (P || (P = Promise))(function (resolve, reject) {
+        function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
+        function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
+        function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
+        step((generator = generator.apply(thisArg, _arguments || [])).next());
+    });
+};
+var __importStar = (this && this.__importStar) || function (mod) {
+    if (mod && mod.__esModule) return mod;
+    var result = {};
+    if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
+    result["default"] = mod;
+    return result;
+};
+Object.defineProperty(exports, "__esModule", { value: true });
+const os = __webpack_require__(87);
+const assert = __importStar(__webpack_require__(357));
+const core = __importStar(__webpack_require__(470));
+const hc = __importStar(__webpack_require__(539));
+const io = __importStar(__webpack_require__(1));
+const tc = __importStar(__webpack_require__(533));
+const path = __importStar(__webpack_require__(622));
+const semver = __importStar(__webpack_require__(280));
+const fs = __webpack_require__(747);
+function getNode(versionSpec, stable, checkLatest, auth, arch = os.arch()) {
+    return __awaiter(this, void 0, void 0, function* () {
+        // Store manifest data to avoid multiple calls
+        let manifest;
+        let osPlat = os.platform();
+        let osArch = translateArchToDistUrl(arch);
+        if (isLtsAlias(versionSpec)) {
+            core.info('Attempt to resolve LTS alias from manifest...');
+            // No try-catch since it's not possible to resolve LTS alias without manifest
+            manifest = yield getManifest(auth);
+            versionSpec = resolveLtsAliasFromManifest(versionSpec, stable, manifest);
+        }
+        if (checkLatest) {
+            core.info('Attempt to resolve the latest version from manifest...');
+            const resolvedVersion = yield resolveVersionFromManifest(versionSpec, stable, auth, osArch, manifest);
+            if (resolvedVersion) {
+                versionSpec = resolvedVersion;
+                core.info(`Resolved as '${versionSpec}'`);
+            }
+            else {
+                core.info(`Failed to resolve version ${versionSpec} from manifest`);
+            }
+        }
+        // check cache
+        let toolPath;
+        toolPath = tc.find('node', versionSpec, osArch);
+        // If not found in cache, download
+        if (toolPath) {
+            core.info(`Found in cache @ ${toolPath}`);
+        }
+        else {
+            core.info(`Attempting to download ${versionSpec}...`);
+            let downloadPath = '';
+            let info = null;
+            //
+            // Try download from internal distribution (popular versions only)
+            //
+            try {
+                info = yield getInfoFromManifest(versionSpec, stable, auth, osArch, manifest);
+                if (info) {
+                    core.info(`Acquiring ${info.resolvedVersion} - ${info.arch} from ${info.downloadUrl}`);
+                    downloadPath = yield tc.downloadTool(info.downloadUrl, undefined, auth);
+                }
+                else {
+                    core.info('Not found in manifest.  Falling back to download directly from Node');
+                }
+            }
+            catch (err) {
+                // Rate limit?
+                if (err instanceof tc.HTTPError &&
+                    (err.httpStatusCode === 403 || err.httpStatusCode === 429)) {
+                    core.info(`Received HTTP status code ${err.httpStatusCode}.  This usually indicates the rate limit has been exceeded`);
+                }
+                else {
+                    core.info(err.message);
+                }
+                core.debug(err.stack);
+                core.info('Falling back to download directly from Node');
+            }
+            //
+            // Download from nodejs.org
+            //
+            if (!downloadPath) {
+                info = yield getInfoFromDist(versionSpec, arch);
+                if (!info) {
+                    throw new Error(`Unable to find Node version '${versionSpec}' for platform ${osPlat} and architecture ${osArch}.`);
+                }
+                core.info(`Acquiring ${info.resolvedVersion} - ${info.arch} from ${info.downloadUrl}`);
+                try {
+                    downloadPath = yield tc.downloadTool(info.downloadUrl);
+                }
+                catch (err) {
+                    if (err instanceof tc.HTTPError && err.httpStatusCode == 404) {
+                        return yield acquireNodeFromFallbackLocation(info.resolvedVersion, info.arch);
+                    }
+                    throw err;
+                }
+            }
+            //
+            // Extract
+            //
+            core.info('Extracting ...');
+            let extPath;
+            info = info || {}; // satisfy compiler, never null when reaches here
+            if (osPlat == 'win32') {
+                let _7zPath = path.join(__dirname, '../..', 'externals', '7zr.exe');
+                extPath = yield tc.extract7z(downloadPath, undefined, _7zPath);
+                // 7z extracts to folder matching file name
+                let nestedPath = path.join(extPath, path.basename(info.fileName, '.7z'));
+                if (fs.existsSync(nestedPath)) {
+                    extPath = nestedPath;
+                }
+            }
+            else {
+                extPath = yield tc.extractTar(downloadPath, undefined, [
+                    'xz',
+                    '--strip',
+                    '1'
+                ]);
+            }
+            //
+            // Install into the local tool cache - node extracts with a root folder that matches the fileName downloaded
+            //
+            core.info('Adding to the cache ...');
+            toolPath = yield tc.cacheDir(extPath, 'node', info.resolvedVersion, info.arch);
+            core.info('Done');
+        }
+        //
+        // a tool installer initimately knows details about the layout of that tool
+        // for example, node binary is in the bin folder after the extract on Mac/Linux.
+        // layouts could change by version, by platform etc... but that's the tool installers job
+        //
+        if (osPlat != 'win32') {
+            toolPath = path.join(toolPath, 'bin');
+        }
+        //
+        // prepend the tools path. instructs the agent to prepend for future tasks
+        core.addPath(toolPath);
+    });
+}
+exports.getNode = getNode;
+function isLtsAlias(versionSpec) {
+    return versionSpec.startsWith('lts/');
+}
+function getManifest(auth) {
+    core.debug('Getting manifest from actions/node-versions@main');
+    return tc.getManifestFromRepo('actions', 'node-versions', auth, 'main');
+}
+function resolveLtsAliasFromManifest(versionSpec, stable, manifest) {
+    var _a;
+    const alias = (_a = versionSpec.split('lts/')[1]) === null || _a === void 0 ? void 0 : _a.toLowerCase();
+    if (!alias) {
+        throw new Error(`Unable to parse LTS alias for Node version '${versionSpec}'`);
+    }
+    core.debug(`LTS alias '${alias}' for Node version '${versionSpec}'`);
+    // Supported formats are `lts/<alias>` and `lts/*`. Where asterisk means highest possible LTS.
+    const release = alias === '*'
+        ? manifest.find(x => !!x.lts && x.stable === stable)
+        : manifest.find(x => { var _a; return ((_a = x.lts) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === alias && x.stable === stable; });
+    if (!release) {
+        throw new Error(`Unable to find LTS release '${alias}' for Node version '${versionSpec}'.`);
+    }
+    core.debug(`Found LTS release '${release.version}' for Node version '${versionSpec}'`);
+    return release.version.split('.')[0];
+}
+function getInfoFromManifest(versionSpec, stable, auth, osArch = translateArchToDistUrl(os.arch()), manifest) {
+    return __awaiter(this, void 0, void 0, function* () {
+        let info = null;
+        if (!manifest) {
+            core.debug('No manifest cached');
+            manifest = yield getManifest(auth);
+        }
+        const rel = yield tc.findFromManifest(versionSpec, stable, manifest, osArch);
+        if (rel && rel.files.length > 0) {
+            info = {};
+            info.resolvedVersion = rel.version;
+            info.arch = rel.files[0].arch;
+            info.downloadUrl = rel.files[0].download_url;
+            info.fileName = rel.files[0].filename;
+        }
+        return info;
+    });
+}
+function getInfoFromDist(versionSpec, arch = os.arch()) {
+    return __awaiter(this, void 0, void 0, function* () {
+        let osPlat = os.platform();
+        let osArch = translateArchToDistUrl(arch);
+        let version;
+        version = yield queryDistForMatch(versionSpec, arch);
+        if (!version) {
+            return null;
+        }
+        //
+        // Download - a tool installer intimately knows how to get the tool (and construct urls)
+        //
+        version = semver.clean(version) || '';
+        let fileName = osPlat == 'win32'
+            ? `node-v${version}-win-${osArch}`
+            : `node-v${version}-${osPlat}-${osArch}`;
+        let urlFileName = osPlat == 'win32' ? `${fileName}.7z` : `${fileName}.tar.gz`;
+        let url = `https://nodejs.org/dist/v${version}/${urlFileName}`;
+        return {
+            downloadUrl: url,
+            resolvedVersion: version,
+            arch: arch,
+            fileName: fileName
+        };
+    });
+}
+function resolveVersionFromManifest(versionSpec, stable, auth, osArch = translateArchToDistUrl(os.arch()), manifest) {
+    return __awaiter(this, void 0, void 0, function* () {
+        try {
+            const info = yield getInfoFromManifest(versionSpec, stable, auth, osArch, manifest);
+            return info === null || info === void 0 ? void 0 : info.resolvedVersion;
+        }
+        catch (err) {
+            core.info('Unable to resolve version from manifest...');
+            core.debug(err.message);
+        }
+    });
+}
+// TODO - should we just export this from @actions/tool-cache? Lifted directly from there
+function evaluateVersions(versions, versionSpec) {
+    let version = '';
+    core.debug(`evaluating ${versions.length} versions`);
+    versions = versions.sort((a, b) => {
+        if (semver.gt(a, b)) {
+            return 1;
+        }
+        return -1;
+    });
+    for (let i = versions.length - 1; i >= 0; i--) {
+        const potential = versions[i];
+        const satisfied = semver.satisfies(potential, versionSpec);
+        if (satisfied) {
+            version = potential;
+            break;
+        }
+    }
+    if (version) {
+        core.debug(`matched: ${version}`);
+    }
+    else {
+        core.debug('match not found');
+    }
+    return version;
+}
+function queryDistForMatch(versionSpec, arch = os.arch()) {
+    return __awaiter(this, void 0, void 0, function* () {
+        let osPlat = os.platform();
+        let osArch = translateArchToDistUrl(arch);
+        // node offers a json list of versions
+        let dataFileName;
+        switch (osPlat) {
+            case 'linux':
+                dataFileName = `linux-${osArch}`;
+                break;
+            case 'darwin':
+                dataFileName = `osx-${osArch}-tar`;
+                break;
+            case 'win32':
+                dataFileName = `win-${osArch}-exe`;
+                break;
+            default:
+                throw new Error(`Unexpected OS '${osPlat}'`);
+        }
+        let versions = [];
+        let nodeVersions = yield module.exports.getVersionsFromDist();
+        nodeVersions.forEach((nodeVersion) => {
+            // ensure this version supports your os and platform
+            if (nodeVersion.files.indexOf(dataFileName) >= 0) {
+                versions.push(nodeVersion.version);
+            }
+        });
+        // get the latest version that matches the version spec
+        let version = evaluateVersions(versions, versionSpec);
+        return version;
+    });
+}
+function getVersionsFromDist() {
+    return __awaiter(this, void 0, void 0, function* () {
+        let dataUrl = 'https://nodejs.org/dist/index.json';
+        let httpClient = new hc.HttpClient('setup-node', [], {
+            allowRetries: true,
+            maxRetries: 3
+        });
+        let response = yield httpClient.getJson(dataUrl);
+        return response.result || [];
+    });
+}
+exports.getVersionsFromDist = getVersionsFromDist;
+// For non LTS versions of Node, the files we need (for Windows) are sometimes located
+// in a different folder than they normally are for other versions.
+// Normally the format is similar to: https://nodejs.org/dist/v5.10.1/node-v5.10.1-win-x64.7z
+// In this case, there will be two files located at:
+//      /dist/v5.10.1/win-x64/node.exe
+//      /dist/v5.10.1/win-x64/node.lib
+// If this is not the structure, there may also be two files located at:
+//      /dist/v0.12.18/node.exe
+//      /dist/v0.12.18/node.lib
+// This method attempts to download and cache the resources from these alternative locations.
+// Note also that the files are normally zipped but in this case they are just an exe
+// and lib file in a folder, not zipped.
+function acquireNodeFromFallbackLocation(version, arch = os.arch()) {
+    return __awaiter(this, void 0, void 0, function* () {
+        let osPlat = os.platform();
+        let osArch = translateArchToDistUrl(arch);
+        // Create temporary folder to download in to
+        const tempDownloadFolder = 'temp_' + Math.floor(Math.random() * 2000000000);
+        const tempDirectory = process.env['RUNNER_TEMP'] || '';
+        assert.ok(tempDirectory, 'Expected RUNNER_TEMP to be defined');
+        const tempDir = path.join(tempDirectory, tempDownloadFolder);
+        yield io.mkdirP(tempDir);
+        let exeUrl;
+        let libUrl;
+        try {
+            exeUrl = `https://nodejs.org/dist/v${version}/win-${osArch}/node.exe`;
+            libUrl = `https://nodejs.org/dist/v${version}/win-${osArch}/node.lib`;
+            core.info(`Downloading only node binary from ${exeUrl}`);
+            const exePath = yield tc.downloadTool(exeUrl);
+            yield io.cp(exePath, path.join(tempDir, 'node.exe'));
+            const libPath = yield tc.downloadTool(libUrl);
+            yield io.cp(libPath, path.join(tempDir, 'node.lib'));
+        }
+        catch (err) {
+            if (err instanceof tc.HTTPError && err.httpStatusCode == 404) {
+                exeUrl = `https://nodejs.org/dist/v${version}/node.exe`;
+                libUrl = `https://nodejs.org/dist/v${version}/node.lib`;
+                const exePath = yield tc.downloadTool(exeUrl);
+                yield io.cp(exePath, path.join(tempDir, 'node.exe'));
+                const libPath = yield tc.downloadTool(libUrl);
+                yield io.cp(libPath, path.join(tempDir, 'node.lib'));
+            }
+            else {
+                throw err;
+            }
+        }
+        let toolPath = yield tc.cacheDir(tempDir, 'node', version, arch);
+        core.addPath(toolPath);
+        return toolPath;
+    });
+}
+// os.arch does not always match the relative download url, e.g.
+// os.arch == 'arm' != node-v12.13.1-linux-armv7l.tar.gz
+// All other currently supported architectures match, e.g.:
+//   os.arch = arm64 => https://nodejs.org/dist/v{VERSION}/node-v{VERSION}-{OS}-arm64.tar.gz
+//   os.arch = x64 => https://nodejs.org/dist/v{VERSION}/node-v{VERSION}-{OS}-x64.tar.gz
+function translateArchToDistUrl(arch) {
+    switch (arch) {
+        case 'arm':
+            return 'armv7l';
+        default:
+            return arch;
+    }
+}
 
 
 /***/ }),
diff --git a/docs/advanced-usage.md b/docs/advanced-usage.md
index e344d34b..c84918fa 100644
--- a/docs/advanced-usage.md
+++ b/docs/advanced-usage.md
@@ -1,6 +1,6 @@
 # Advanced usage
 
-### Check latest version
+## Check latest version
 
 The `check-latest` flag defaults to `false`. When set to `false`, the action will first check the local cache for a semver match. If unable to find a specific version in the cache, the action will attempt to download a version of Node.js. It will pull LTS versions from [node-versions releases](https://github.com/actions/node-versions/releases) and on miss or failure will fall back to the previous behavior of downloading directly from [node dist](https://nodejs.org/dist/). Use the default or set `check-latest` to `false` if you prefer stability and if you want to ensure a specific version of Node.js is always used.
 
@@ -19,7 +19,7 @@ steps:
 - run: npm test
 ```
 
-### Architecture
+## Architecture
 
 You can use any of the [supported operating systems](https://docs.github.com/en/actions/reference/virtual-environments-for-github-hosted-runners), and the compatible `architecture` can be selected using `architecture`. Values are `x86`, `x64`, `arm64`, `armv6l`, `armv7l`, `ppc64le`, `s390x` (not all of the architectures are available on all platforms).
 
@@ -39,7 +39,43 @@ jobs:
       - run: npm test
 ```
 
-### Caching packages dependencies
+## Caching packages dependencies
+The action follows [actions/cache](https://github.com/actions/cache/blob/main/examples.md#node---npm) guidelines, and caches global cache on the machine instead of `node_modules`, so cache can be reused between different Node.js versions.
+
+**Caching yarn dependencies:**  
+Yarn caching handles both yarn versions: 1 or 2.
+```yaml
+steps:
+- uses: actions/checkout@v2
+- uses: actions/setup-node@v2
+  with:
+    node-version: '14'
+    cache: 'yarn'
+- run: yarn install
+- run: yarn test
+```
+
+**Caching pnpm (v6.10+) dependencies:**
+```yaml
+# This workflow uses actions that are not certified by GitHub.
+# They are provided by a third-party and are governed by
+# separate terms of service, privacy policy, and support
+# documentation.
+
+# NOTE: pnpm caching support requires pnpm version >= 6.10.0
+
+steps:
+- uses: actions/checkout@v2
+- uses: pnpm/action-setup@646cdf48217256a3d0b80361c5a50727664284f2
+  with:
+    version: 6.10.0
+- uses: actions/setup-node@v2
+  with:
+    node-version: '14'
+    cache: 'pnpm'
+- run: pnpm install
+- run: pnpm test
+```
 
 **Using wildcard patterns to cache dependencies**
 ```yaml
@@ -69,7 +105,7 @@ steps:
 - run: npm test
 ```
 
-### Multiple Operating Systems and Architectures
+## Multiple Operating Systems and Architectures
 
 ```yaml
 jobs:
@@ -104,7 +140,7 @@ jobs:
       - run: npm test
 ```
 
-### Publish to npmjs and GPR with npm
+## Publish to npmjs and GPR with npm
 ```yaml
 steps:
 - uses: actions/checkout@v2
@@ -124,7 +160,7 @@ steps:
     NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 ```
 
-### Publish to npmjs and GPR with yarn
+## Publish to npmjs and GPR with yarn
 ```yaml
 steps:
 - uses: actions/checkout@v2
@@ -144,7 +180,7 @@ steps:
     NODE_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
 ```
 
-### Use private packages
+## Use private packages
 ```yaml
 steps:
 - uses: actions/checkout@v2