diff --git a/.licenses/npm/lodash.memoize.dep.yml b/.licenses/npm/lodash.memoize.dep.yml
new file mode 100644
index 00000000..243faf67
--- /dev/null
+++ b/.licenses/npm/lodash.memoize.dep.yml
@@ -0,0 +1,58 @@
+---
+name: lodash.memoize
+version: 4.1.2
+type: npm
+summary: The lodash method `_.memoize` exported as a module.
+homepage: https://lodash.com/
+license: mit
+licenses:
+- sources: LICENSE
+ text: |
+ Copyright jQuery Foundation and other contributors
+
+ Based on Underscore.js, copyright Jeremy Ashkenas,
+ DocumentCloud and Investigative Reporters & Editors
+
+ This software consists of voluntary contributions made by many
+ individuals. For exact contribution history, see the revision history
+ available at https://github.com/lodash/lodash
+
+ The following license applies to all parts of this software except as
+ documented below:
+
+ ====
+
+ Permission is hereby granted, free of charge, to any person obtaining
+ a copy of this software and associated documentation files (the
+ "Software"), to deal in the Software without restriction, including
+ without limitation the rights to use, copy, modify, merge, publish,
+ distribute, sublicense, and/or sell copies of the Software, and to
+ permit persons to whom the Software is furnished to do so, subject to
+ the following conditions:
+
+ The above copyright notice and this permission notice shall be
+ included in all copies or substantial portions of the Software.
+
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
+ ====
+
+ Copyright and related rights for sample code are waived via CC0. Sample
+ code is defined as all source code displayed within the prose of the
+ documentation.
+
+ CC0: http://creativecommons.org/publicdomain/zero/1.0/
+
+ ====
+
+ Files located in the node_modules and vendor directories are externally
+ maintained libraries used by this software which have their own
+ licenses; we recommend you read them, as their terms may differ from the
+ terms above.
+notices: []
diff --git a/__tests__/cache-utils.test.ts b/__tests__/cache-utils.test.ts
index a8c881e5..1fc90e48 100644
--- a/__tests__/cache-utils.test.ts
+++ b/__tests__/cache-utils.test.ts
@@ -6,8 +6,7 @@ import {
PackageManagerInfo,
isCacheFeatureAvailable,
supportedPackageManagers,
- getCommandOutput,
- resetProjectDirectoriesMemoized
+ getProjectDirectoriesFromCacheDependencyPath
} from '../src/cache-utils';
import fs from 'fs';
import * as cacheUtils from '../src/cache-utils';
@@ -123,7 +122,7 @@ describe('cache-utils', () => {
MockGlobber.create(['/foo', '/bar'])
);
- resetProjectDirectoriesMemoized();
+ getProjectDirectoriesFromCacheDependencyPath.cache.clear?.();
});
afterEach(() => {
diff --git a/dist/cache-save/index.js b/dist/cache-save/index.js
index 2287d08a..22144198 100644
--- a/dist/cache-save/index.js
+++ b/dist/cache-save/index.js
@@ -46782,6 +46782,689 @@ DelayedStream.prototype._checkIfMaxDataSizeExceeded = function() {
};
+/***/ }),
+
+/***/ 4538:
+/***/ ((module) => {
+
+/**
+ * lodash (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright jQuery Foundation and other contributors
+ * Released under MIT license
+ * Based on Underscore.js 1.8.3
+ * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ */
+
+/** Used as the `TypeError` message for "Functions" methods. */
+var FUNC_ERROR_TEXT = 'Expected a function';
+
+/** Used to stand-in for `undefined` hash values. */
+var HASH_UNDEFINED = '__lodash_hash_undefined__';
+
+/** `Object#toString` result references. */
+var funcTag = '[object Function]',
+ genTag = '[object GeneratorFunction]';
+
+/**
+ * Used to match `RegExp`
+ * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
+ */
+var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
+
+/** Used to detect host constructors (Safari). */
+var reIsHostCtor = /^\[object .+?Constructor\]$/;
+
+/** Detect free variable `global` from Node.js. */
+var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
+
+/** Detect free variable `self`. */
+var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
+
+/** Used as a reference to the global object. */
+var root = freeGlobal || freeSelf || Function('return this')();
+
+/**
+ * Gets the value at `key` of `object`.
+ *
+ * @private
+ * @param {Object} [object] The object to query.
+ * @param {string} key The key of the property to get.
+ * @returns {*} Returns the property value.
+ */
+function getValue(object, key) {
+ return object == null ? undefined : object[key];
+}
+
+/**
+ * Checks if `value` is a host object in IE < 9.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a host object, else `false`.
+ */
+function isHostObject(value) {
+ // Many host objects are `Object` objects that can coerce to strings
+ // despite having improperly defined `toString` methods.
+ var result = false;
+ if (value != null && typeof value.toString != 'function') {
+ try {
+ result = !!(value + '');
+ } catch (e) {}
+ }
+ return result;
+}
+
+/** Used for built-in method references. */
+var arrayProto = Array.prototype,
+ funcProto = Function.prototype,
+ objectProto = Object.prototype;
+
+/** Used to detect overreaching core-js shims. */
+var coreJsData = root['__core-js_shared__'];
+
+/** Used to detect methods masquerading as native. */
+var maskSrcKey = (function() {
+ var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
+ return uid ? ('Symbol(src)_1.' + uid) : '';
+}());
+
+/** Used to resolve the decompiled source of functions. */
+var funcToString = funcProto.toString;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/**
+ * Used to resolve the
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objectToString = objectProto.toString;
+
+/** Used to detect if a method is native. */
+var reIsNative = RegExp('^' +
+ funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
+ .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
+);
+
+/** Built-in value references. */
+var splice = arrayProto.splice;
+
+/* Built-in method references that are verified to be native. */
+var Map = getNative(root, 'Map'),
+ nativeCreate = getNative(Object, 'create');
+
+/**
+ * Creates a hash object.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+function Hash(entries) {
+ var index = -1,
+ length = entries ? entries.length : 0;
+
+ this.clear();
+ while (++index < length) {
+ var entry = entries[index];
+ this.set(entry[0], entry[1]);
+ }
+}
+
+/**
+ * Removes all key-value entries from the hash.
+ *
+ * @private
+ * @name clear
+ * @memberOf Hash
+ */
+function hashClear() {
+ this.__data__ = nativeCreate ? nativeCreate(null) : {};
+}
+
+/**
+ * Removes `key` and its value from the hash.
+ *
+ * @private
+ * @name delete
+ * @memberOf Hash
+ * @param {Object} hash The hash to modify.
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function hashDelete(key) {
+ return this.has(key) && delete this.__data__[key];
+}
+
+/**
+ * Gets the hash value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf Hash
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function hashGet(key) {
+ var data = this.__data__;
+ if (nativeCreate) {
+ var result = data[key];
+ return result === HASH_UNDEFINED ? undefined : result;
+ }
+ return hasOwnProperty.call(data, key) ? data[key] : undefined;
+}
+
+/**
+ * Checks if a hash value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf Hash
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function hashHas(key) {
+ var data = this.__data__;
+ return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);
+}
+
+/**
+ * Sets the hash `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf Hash
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the hash instance.
+ */
+function hashSet(key, value) {
+ var data = this.__data__;
+ data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
+ return this;
+}
+
+// Add methods to `Hash`.
+Hash.prototype.clear = hashClear;
+Hash.prototype['delete'] = hashDelete;
+Hash.prototype.get = hashGet;
+Hash.prototype.has = hashHas;
+Hash.prototype.set = hashSet;
+
+/**
+ * Creates an list cache object.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+function ListCache(entries) {
+ var index = -1,
+ length = entries ? entries.length : 0;
+
+ this.clear();
+ while (++index < length) {
+ var entry = entries[index];
+ this.set(entry[0], entry[1]);
+ }
+}
+
+/**
+ * Removes all key-value entries from the list cache.
+ *
+ * @private
+ * @name clear
+ * @memberOf ListCache
+ */
+function listCacheClear() {
+ this.__data__ = [];
+}
+
+/**
+ * Removes `key` and its value from the list cache.
+ *
+ * @private
+ * @name delete
+ * @memberOf ListCache
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function listCacheDelete(key) {
+ var data = this.__data__,
+ index = assocIndexOf(data, key);
+
+ if (index < 0) {
+ return false;
+ }
+ var lastIndex = data.length - 1;
+ if (index == lastIndex) {
+ data.pop();
+ } else {
+ splice.call(data, index, 1);
+ }
+ return true;
+}
+
+/**
+ * Gets the list cache value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf ListCache
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function listCacheGet(key) {
+ var data = this.__data__,
+ index = assocIndexOf(data, key);
+
+ return index < 0 ? undefined : data[index][1];
+}
+
+/**
+ * Checks if a list cache value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf ListCache
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function listCacheHas(key) {
+ return assocIndexOf(this.__data__, key) > -1;
+}
+
+/**
+ * Sets the list cache `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf ListCache
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the list cache instance.
+ */
+function listCacheSet(key, value) {
+ var data = this.__data__,
+ index = assocIndexOf(data, key);
+
+ if (index < 0) {
+ data.push([key, value]);
+ } else {
+ data[index][1] = value;
+ }
+ return this;
+}
+
+// Add methods to `ListCache`.
+ListCache.prototype.clear = listCacheClear;
+ListCache.prototype['delete'] = listCacheDelete;
+ListCache.prototype.get = listCacheGet;
+ListCache.prototype.has = listCacheHas;
+ListCache.prototype.set = listCacheSet;
+
+/**
+ * Creates a map cache object to store key-value pairs.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+function MapCache(entries) {
+ var index = -1,
+ length = entries ? entries.length : 0;
+
+ this.clear();
+ while (++index < length) {
+ var entry = entries[index];
+ this.set(entry[0], entry[1]);
+ }
+}
+
+/**
+ * Removes all key-value entries from the map.
+ *
+ * @private
+ * @name clear
+ * @memberOf MapCache
+ */
+function mapCacheClear() {
+ this.__data__ = {
+ 'hash': new Hash,
+ 'map': new (Map || ListCache),
+ 'string': new Hash
+ };
+}
+
+/**
+ * Removes `key` and its value from the map.
+ *
+ * @private
+ * @name delete
+ * @memberOf MapCache
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function mapCacheDelete(key) {
+ return getMapData(this, key)['delete'](key);
+}
+
+/**
+ * Gets the map value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf MapCache
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function mapCacheGet(key) {
+ return getMapData(this, key).get(key);
+}
+
+/**
+ * Checks if a map value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf MapCache
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function mapCacheHas(key) {
+ return getMapData(this, key).has(key);
+}
+
+/**
+ * Sets the map `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf MapCache
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the map cache instance.
+ */
+function mapCacheSet(key, value) {
+ getMapData(this, key).set(key, value);
+ return this;
+}
+
+// Add methods to `MapCache`.
+MapCache.prototype.clear = mapCacheClear;
+MapCache.prototype['delete'] = mapCacheDelete;
+MapCache.prototype.get = mapCacheGet;
+MapCache.prototype.has = mapCacheHas;
+MapCache.prototype.set = mapCacheSet;
+
+/**
+ * Gets the index at which the `key` is found in `array` of key-value pairs.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {*} key The key to search for.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+function assocIndexOf(array, key) {
+ var length = array.length;
+ while (length--) {
+ if (eq(array[length][0], key)) {
+ return length;
+ }
+ }
+ return -1;
+}
+
+/**
+ * The base implementation of `_.isNative` without bad shim checks.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a native function,
+ * else `false`.
+ */
+function baseIsNative(value) {
+ if (!isObject(value) || isMasked(value)) {
+ return false;
+ }
+ var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;
+ return pattern.test(toSource(value));
+}
+
+/**
+ * Gets the data for `map`.
+ *
+ * @private
+ * @param {Object} map The map to query.
+ * @param {string} key The reference key.
+ * @returns {*} Returns the map data.
+ */
+function getMapData(map, key) {
+ var data = map.__data__;
+ return isKeyable(key)
+ ? data[typeof key == 'string' ? 'string' : 'hash']
+ : data.map;
+}
+
+/**
+ * Gets the native function at `key` of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {string} key The key of the method to get.
+ * @returns {*} Returns the function if it's native, else `undefined`.
+ */
+function getNative(object, key) {
+ var value = getValue(object, key);
+ return baseIsNative(value) ? value : undefined;
+}
+
+/**
+ * Checks if `value` is suitable for use as unique object key.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
+ */
+function isKeyable(value) {
+ var type = typeof value;
+ return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
+ ? (value !== '__proto__')
+ : (value === null);
+}
+
+/**
+ * Checks if `func` has its source masked.
+ *
+ * @private
+ * @param {Function} func The function to check.
+ * @returns {boolean} Returns `true` if `func` is masked, else `false`.
+ */
+function isMasked(func) {
+ return !!maskSrcKey && (maskSrcKey in func);
+}
+
+/**
+ * Converts `func` to its source code.
+ *
+ * @private
+ * @param {Function} func The function to process.
+ * @returns {string} Returns the source code.
+ */
+function toSource(func) {
+ if (func != null) {
+ try {
+ return funcToString.call(func);
+ } catch (e) {}
+ try {
+ return (func + '');
+ } catch (e) {}
+ }
+ return '';
+}
+
+/**
+ * Creates a function that memoizes the result of `func`. If `resolver` is
+ * provided, it determines the cache key for storing the result based on the
+ * arguments provided to the memoized function. By default, the first argument
+ * provided to the memoized function is used as the map cache key. The `func`
+ * is invoked with the `this` binding of the memoized function.
+ *
+ * **Note:** The cache is exposed as the `cache` property on the memoized
+ * function. Its creation may be customized by replacing the `_.memoize.Cache`
+ * constructor with one whose instances implement the
+ * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
+ * method interface of `delete`, `get`, `has`, and `set`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Function
+ * @param {Function} func The function to have its output memoized.
+ * @param {Function} [resolver] The function to resolve the cache key.
+ * @returns {Function} Returns the new memoized function.
+ * @example
+ *
+ * var object = { 'a': 1, 'b': 2 };
+ * var other = { 'c': 3, 'd': 4 };
+ *
+ * var values = _.memoize(_.values);
+ * values(object);
+ * // => [1, 2]
+ *
+ * values(other);
+ * // => [3, 4]
+ *
+ * object.a = 2;
+ * values(object);
+ * // => [1, 2]
+ *
+ * // Modify the result cache.
+ * values.cache.set(object, ['a', 'b']);
+ * values(object);
+ * // => ['a', 'b']
+ *
+ * // Replace `_.memoize.Cache`.
+ * _.memoize.Cache = WeakMap;
+ */
+function memoize(func, resolver) {
+ if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+ var memoized = function() {
+ var args = arguments,
+ key = resolver ? resolver.apply(this, args) : args[0],
+ cache = memoized.cache;
+
+ if (cache.has(key)) {
+ return cache.get(key);
+ }
+ var result = func.apply(this, args);
+ memoized.cache = cache.set(key, result);
+ return result;
+ };
+ memoized.cache = new (memoize.Cache || MapCache);
+ return memoized;
+}
+
+// Assign cache to `_.memoize`.
+memoize.Cache = MapCache;
+
+/**
+ * Performs a
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * comparison between two values to determine if they are equivalent.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+ * @example
+ *
+ * var object = { 'a': 1 };
+ * var other = { 'a': 1 };
+ *
+ * _.eq(object, object);
+ * // => true
+ *
+ * _.eq(object, other);
+ * // => false
+ *
+ * _.eq('a', 'a');
+ * // => true
+ *
+ * _.eq('a', Object('a'));
+ * // => false
+ *
+ * _.eq(NaN, NaN);
+ * // => true
+ */
+function eq(value, other) {
+ return value === other || (value !== value && other !== other);
+}
+
+/**
+ * Checks if `value` is classified as a `Function` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a function, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
+ */
+function isFunction(value) {
+ // The use of `Object#toString` avoids issues with the `typeof` operator
+ // in Safari 8-9 which returns 'object' for typed array and other constructors.
+ var tag = isObject(value) ? objectToString.call(value) : '';
+ return tag == funcTag || tag == genTag;
+}
+
+/**
+ * Checks if `value` is the
+ * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
+ * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(_.noop);
+ * // => true
+ *
+ * _.isObject(null);
+ * // => false
+ */
+function isObject(value) {
+ var type = typeof value;
+ return !!value && (type == 'object' || type == 'function');
+}
+
+module.exports = memoize;
+
+
/***/ }),
/***/ 7426:
@@ -60332,86 +61015,86 @@ exports.debug = debug; // for test
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
- o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- __setModuleDefault(result, mod);
- return result;
-};
-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());
- });
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.run = void 0;
-const core = __importStar(__nccwpck_require__(2186));
-const cache = __importStar(__nccwpck_require__(7799));
-const constants_1 = __nccwpck_require__(9042);
-const cache_utils_1 = __nccwpck_require__(1678);
-// Catch and log any unhandled exceptions. These exceptions can leak out of the uploadChunk method in
-// @actions/toolkit when a failed upload closes the file descriptor causing any in-process reads to
-// throw an uncaught exception. Instead of failing this action, just warn.
-process.on('uncaughtException', e => {
- const warningPrefix = '[warning]';
- core.info(`${warningPrefix}${e.message}`);
-});
-function run() {
- return __awaiter(this, void 0, void 0, function* () {
- try {
- const cacheLock = core.getState(constants_1.State.CachePackageManager);
- 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 cachePaths = JSON.parse(core.getState(constants_1.State.CachePaths) || '[]');
- const packageManagerInfo = yield cache_utils_1.getPackageManagerInfo(packageManager);
- if (!packageManagerInfo) {
- core.debug(`Caching for '${packageManager}' is not supported`);
- return;
- }
- if (!cachePaths.length) {
- // TODO: core.getInput has a bug - it can return undefined despite its definition (tests only?)
- // export declare function getInput(name: string, options?: InputOptions): string;
- const cacheDependencyPath = core.getInput('cache-dependency-path') || '';
- throw new Error(`Cache folder paths are not retrieved for ${packageManager} with cache-dependency-path = ${cacheDependencyPath}`);
- }
- if (primaryKey === state) {
- core.info(`Cache hit occurred on the primary key ${primaryKey}, not saving cache.`);
- return;
- }
- const cacheId = yield cache.saveCache(cachePaths, primaryKey);
- if (cacheId == -1) {
- return;
- }
- core.info(`Cache saved with the key: ${primaryKey}`);
-});
-run();
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+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());
+ });
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.run = void 0;
+const core = __importStar(__nccwpck_require__(2186));
+const cache = __importStar(__nccwpck_require__(7799));
+const constants_1 = __nccwpck_require__(9042);
+const cache_utils_1 = __nccwpck_require__(1678);
+// Catch and log any unhandled exceptions. These exceptions can leak out of the uploadChunk method in
+// @actions/toolkit when a failed upload closes the file descriptor causing any in-process reads to
+// throw an uncaught exception. Instead of failing this action, just warn.
+process.on('uncaughtException', e => {
+ const warningPrefix = '[warning]';
+ core.info(`${warningPrefix}${e.message}`);
+});
+function run() {
+ return __awaiter(this, void 0, void 0, function* () {
+ try {
+ const cacheLock = core.getState(constants_1.State.CachePackageManager);
+ 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 cachePaths = JSON.parse(core.getState(constants_1.State.CachePaths) || '[]');
+ const packageManagerInfo = yield cache_utils_1.getPackageManagerInfo(packageManager);
+ if (!packageManagerInfo) {
+ core.debug(`Caching for '${packageManager}' is not supported`);
+ return;
+ }
+ if (!cachePaths.length) {
+ // TODO: core.getInput has a bug - it can return undefined despite its definition (tests only?)
+ // export declare function getInput(name: string, options?: InputOptions): string;
+ const cacheDependencyPath = core.getInput('cache-dependency-path') || '';
+ throw new Error(`Cache folder paths are not retrieved for ${packageManager} with cache-dependency-path = ${cacheDependencyPath}`);
+ }
+ if (primaryKey === state) {
+ core.info(`Cache hit occurred on the primary key ${primaryKey}, not saving cache.`);
+ return;
+ }
+ const cacheId = yield cache.saveCache(cachePaths, primaryKey);
+ if (cacheId == -1) {
+ return;
+ }
+ core.info(`Cache saved with the key: ${primaryKey}`);
+});
+run();
/***/ }),
@@ -60420,254 +61103,245 @@ run();
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
- o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- __setModuleDefault(result, mod);
- return result;
-};
-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 __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.isCacheFeatureAvailable = exports.isGhes = exports.repoHasYarnBerryManagedDependencies = exports.getCacheDirectories = exports.resetProjectDirectoriesMemoized = exports.getPackageManagerInfo = exports.getCommandOutputNotEmpty = exports.getCommandOutput = exports.supportedPackageManagers = void 0;
-const core = __importStar(__nccwpck_require__(2186));
-const exec = __importStar(__nccwpck_require__(1514));
-const cache = __importStar(__nccwpck_require__(7799));
-const glob = __importStar(__nccwpck_require__(8090));
-const path_1 = __importDefault(__nccwpck_require__(1017));
-const fs_1 = __importDefault(__nccwpck_require__(7147));
-const util_1 = __nccwpck_require__(2629);
-exports.supportedPackageManagers = {
- npm: {
- name: 'npm',
- lockFilePatterns: ['package-lock.json', 'npm-shrinkwrap.json', 'yarn.lock'],
- getCacheFolderPath: () => exports.getCommandOutputNotEmpty('npm config get cache', 'Could not get npm cache folder path')
- },
- pnpm: {
- name: 'pnpm',
- lockFilePatterns: ['pnpm-lock.yaml'],
- getCacheFolderPath: () => exports.getCommandOutputNotEmpty('pnpm store path --silent', 'Could not get pnpm cache folder path')
- },
- yarn: {
- name: 'yarn',
- lockFilePatterns: ['yarn.lock'],
- getCacheFolderPath: (projectDir) => __awaiter(void 0, void 0, void 0, function* () {
- const yarnVersion = yield exports.getCommandOutputNotEmpty(`yarn --version`, 'Could not retrieve version of yarn', projectDir);
- core.debug(`Consumed yarn version is ${yarnVersion} (working dir: "${projectDir || ''}")`);
- const stdOut = yarnVersion.startsWith('1.')
- ? yield exports.getCommandOutput('yarn cache dir', projectDir)
- : yield exports.getCommandOutput('yarn config get cacheFolder', projectDir);
- if (!stdOut) {
- throw new Error(`Could not get yarn cache folder path for ${projectDir}`);
- }
- return stdOut;
- })
- }
-};
-const getCommandOutput = (toolCommand, cwd) => __awaiter(void 0, void 0, void 0, function* () {
- let { stdout, stderr, exitCode } = yield exec.getExecOutput(toolCommand, undefined, Object.assign({ ignoreReturnCode: true }, (cwd && { cwd })));
- if (exitCode) {
- stderr = !stderr.trim()
- ? `The '${toolCommand}' command failed with exit code: ${exitCode}`
- : stderr;
- throw new Error(stderr);
- }
- return stdout.trim();
-});
-exports.getCommandOutput = getCommandOutput;
-const getCommandOutputNotEmpty = (toolCommand, error, cwd) => __awaiter(void 0, void 0, void 0, function* () {
- const stdOut = exports.getCommandOutput(toolCommand, cwd);
- if (!stdOut) {
- throw new Error(error);
- }
- return stdOut;
-});
-exports.getCommandOutputNotEmpty = getCommandOutputNotEmpty;
-const 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') {
- return exports.supportedPackageManagers.yarn;
- }
- else {
- return null;
- }
-});
-exports.getPackageManagerInfo = getPackageManagerInfo;
-/**
- * getProjectDirectoriesFromCacheDependencyPath is called twice during `restoreCache`
- * - first through `getCacheDirectories`
- * - second from `repoHasYarn3ManagedCache`
- *
- * it contains expensive IO operation and thus should be memoized
- */
-let projectDirectoriesMemoized = null;
-/**
- * unit test must reset memoized variables
- */
-const resetProjectDirectoriesMemoized = () => (projectDirectoriesMemoized = null);
-exports.resetProjectDirectoriesMemoized = resetProjectDirectoriesMemoized;
-/**
- * Expands (converts) the string input `cache-dependency-path` to list of directories that
- * may be project roots
- * @param cacheDependencyPath - either a single string or multiline string with possible glob patterns
- * expected to be the result of `core.getInput('cache-dependency-path')`
- * @return list of directories and possible
- */
-const getProjectDirectoriesFromCacheDependencyPath = (cacheDependencyPath) => __awaiter(void 0, void 0, void 0, function* () {
- if (projectDirectoriesMemoized !== null) {
- return projectDirectoriesMemoized;
- }
- const globber = yield glob.create(cacheDependencyPath);
- const cacheDependenciesPaths = yield globber.glob();
- const existingDirectories = cacheDependenciesPaths
- .map(path_1.default.dirname)
- .filter(util_1.unique())
- .map(dirName => fs_1.default.realpathSync(dirName))
- .filter(directory => fs_1.default.lstatSync(directory).isDirectory());
- if (!existingDirectories.length)
- core.warning(`No existing directories found containing cache-dependency-path="${cacheDependencyPath}"`);
- projectDirectoriesMemoized = existingDirectories;
- return existingDirectories;
-});
-/**
- * Finds the cache directories configured for the repo if cache-dependency-path is not empty
- * @param packageManagerInfo - an object having getCacheFolderPath method specific to given PM
- * @param cacheDependencyPath - either a single string or multiline string with possible glob patterns
- * expected to be the result of `core.getInput('cache-dependency-path')`
- * @return list of files on which the cache depends
- */
-const getCacheDirectoriesFromCacheDependencyPath = (packageManagerInfo, cacheDependencyPath) => __awaiter(void 0, void 0, void 0, function* () {
- const projectDirectories = yield getProjectDirectoriesFromCacheDependencyPath(cacheDependencyPath);
- const cacheFoldersPaths = yield Promise.all(projectDirectories.map((projectDirectory) => __awaiter(void 0, void 0, void 0, function* () {
- const cacheFolderPath = yield packageManagerInfo.getCacheFolderPath(projectDirectory);
- core.debug(`${packageManagerInfo.name}'s cache folder "${cacheFolderPath}" configured for the directory "${projectDirectory}"`);
- return cacheFolderPath;
- })));
- // uniq in order to do not cache the same directories twice
- return cacheFoldersPaths.filter(util_1.unique());
-});
-/**
- * Finds the cache directories configured for the repo ignoring cache-dependency-path
- * @param packageManagerInfo - an object having getCacheFolderPath method specific to given PM
- * @return list of files on which the cache depends
- */
-const getCacheDirectoriesForRootProject = (packageManagerInfo) => __awaiter(void 0, void 0, void 0, function* () {
- const cacheFolderPath = yield packageManagerInfo.getCacheFolderPath();
- core.debug(`${packageManagerInfo.name}'s cache folder "${cacheFolderPath}" configured for the root directory`);
- return [cacheFolderPath];
-});
-/**
- * A function to find the cache directories configured for the repo
- * currently it handles only the case of PM=yarn && cacheDependencyPath is not empty
- * @param packageManagerInfo - an object having getCacheFolderPath method specific to given PM
- * @param cacheDependencyPath - either a single string or multiline string with possible glob patterns
- * expected to be the result of `core.getInput('cache-dependency-path')`
- * @return list of files on which the cache depends
- */
-const getCacheDirectories = (packageManagerInfo, cacheDependencyPath) => __awaiter(void 0, void 0, void 0, function* () {
- // For yarn, if cacheDependencyPath is set, ask information about cache folders in each project
- // folder satisfied by cacheDependencyPath https://github.com/actions/setup-node/issues/488
- if (packageManagerInfo.name === 'yarn' && cacheDependencyPath) {
- return getCacheDirectoriesFromCacheDependencyPath(packageManagerInfo, cacheDependencyPath);
- }
- return getCacheDirectoriesForRootProject(packageManagerInfo);
-});
-exports.getCacheDirectories = getCacheDirectories;
-/**
- * A function to check if the directory is a yarn project configured to manage
- * obsolete dependencies in the local cache
- * @param directory - a path to the folder
- * @return - true if the directory's project is yarn managed
- * - if there's .yarn/cache folder do not mess with the dependencies kept in the repo, return false
- * - global cache is not managed by yarn @see https://yarnpkg.com/features/offline-cache, return false
- * - if local cache is not explicitly enabled (not yarn3), return false
- * - return true otherwise
- */
-const projectHasYarnBerryManagedDependencies = (directory) => __awaiter(void 0, void 0, void 0, function* () {
- const workDir = directory || process.env.GITHUB_WORKSPACE || '.';
- core.debug(`check if "${workDir}" has locally managed yarn3 dependencies`);
- // if .yarn/cache directory exists the cache is managed by version control system
- const yarnCacheFile = path_1.default.join(workDir, '.yarn', 'cache');
- if (fs_1.default.existsSync(yarnCacheFile) &&
- fs_1.default.lstatSync(yarnCacheFile).isDirectory()) {
- core.debug(`"${workDir}" has .yarn/cache - dependencies are kept in the repository`);
- return Promise.resolve(false);
- }
- // NOTE: yarn1 returns 'undefined' with return code = 0
- const enableGlobalCache = yield exports.getCommandOutput('yarn config get enableGlobalCache', workDir);
- // only local cache is not managed by yarn
- const managed = enableGlobalCache.includes('false');
- if (managed) {
- core.debug(`"${workDir}" dependencies are managed by yarn 3 locally`);
- return true;
- }
- else {
- core.debug(`"${workDir}" dependencies are not managed by yarn 3 locally`);
- return false;
- }
-});
-/**
- * A function to report the repo contains Yarn managed projects
- * @param packageManagerInfo - used to make sure current package manager is yarn
- * @param cacheDependencyPath - either a single string or multiline string with possible glob patterns
- * expected to be the result of `core.getInput('cache-dependency-path')`
- * @return - true if all project directories configured to be Yarn managed
- */
-const repoHasYarnBerryManagedDependencies = (packageManagerInfo, cacheDependencyPath) => __awaiter(void 0, void 0, void 0, function* () {
- if (packageManagerInfo.name !== 'yarn')
- return false;
- const yarnDirs = cacheDependencyPath
- ? yield getProjectDirectoriesFromCacheDependencyPath(cacheDependencyPath)
- : [''];
- const isManagedList = yield Promise.all(yarnDirs.map(projectHasYarnBerryManagedDependencies));
- return isManagedList.every(Boolean);
-});
-exports.repoHasYarnBerryManagedDependencies = repoHasYarnBerryManagedDependencies;
-function isGhes() {
- const ghUrl = new URL(process.env['GITHUB_SERVER_URL'] || 'https://github.com');
- return ghUrl.hostname.toUpperCase() !== 'GITHUB.COM';
-}
-exports.isGhes = isGhes;
-function isCacheFeatureAvailable() {
- if (cache.isFeatureAvailable())
- return true;
- if (isGhes()) {
- core.warning('Cache action is only supported on GHES version >= 3.5. If you are on version >=3.5 Please check with GHES admin if Actions cache service is enabled or not.');
- return false;
- }
- core.warning('The runner was not able to contact the cache service. Caching will be skipped');
- return false;
-}
-exports.isCacheFeatureAvailable = isCacheFeatureAvailable;
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+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 __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.isCacheFeatureAvailable = exports.isGhes = exports.repoHasYarnBerryManagedDependencies = exports.getCacheDirectories = exports.getProjectDirectoriesFromCacheDependencyPath = exports.getPackageManagerInfo = exports.getCommandOutputNotEmpty = exports.getCommandOutput = exports.supportedPackageManagers = void 0;
+const core = __importStar(__nccwpck_require__(2186));
+const exec = __importStar(__nccwpck_require__(1514));
+const cache = __importStar(__nccwpck_require__(7799));
+const glob = __importStar(__nccwpck_require__(8090));
+const lodash_memoize_1 = __importDefault(__nccwpck_require__(4538));
+const path_1 = __importDefault(__nccwpck_require__(1017));
+const fs_1 = __importDefault(__nccwpck_require__(7147));
+const util_1 = __nccwpck_require__(2629);
+exports.supportedPackageManagers = {
+ npm: {
+ name: 'npm',
+ lockFilePatterns: ['package-lock.json', 'npm-shrinkwrap.json', 'yarn.lock'],
+ getCacheFolderPath: () => exports.getCommandOutputNotEmpty('npm config get cache', 'Could not get npm cache folder path')
+ },
+ pnpm: {
+ name: 'pnpm',
+ lockFilePatterns: ['pnpm-lock.yaml'],
+ getCacheFolderPath: () => exports.getCommandOutputNotEmpty('pnpm store path --silent', 'Could not get pnpm cache folder path')
+ },
+ yarn: {
+ name: 'yarn',
+ lockFilePatterns: ['yarn.lock'],
+ getCacheFolderPath: (projectDir) => __awaiter(void 0, void 0, void 0, function* () {
+ const yarnVersion = yield exports.getCommandOutputNotEmpty(`yarn --version`, 'Could not retrieve version of yarn', projectDir);
+ core.debug(`Consumed yarn version is ${yarnVersion} (working dir: "${projectDir || ''}")`);
+ const stdOut = yarnVersion.startsWith('1.')
+ ? yield exports.getCommandOutput('yarn cache dir', projectDir)
+ : yield exports.getCommandOutput('yarn config get cacheFolder', projectDir);
+ if (!stdOut) {
+ throw new Error(`Could not get yarn cache folder path for ${projectDir}`);
+ }
+ return stdOut;
+ })
+ }
+};
+const getCommandOutput = (toolCommand, cwd) => __awaiter(void 0, void 0, void 0, function* () {
+ let { stdout, stderr, exitCode } = yield exec.getExecOutput(toolCommand, undefined, Object.assign({ ignoreReturnCode: true }, (cwd && { cwd })));
+ if (exitCode) {
+ stderr = !stderr.trim()
+ ? `The '${toolCommand}' command failed with exit code: ${exitCode}`
+ : stderr;
+ throw new Error(stderr);
+ }
+ return stdout.trim();
+});
+exports.getCommandOutput = getCommandOutput;
+const getCommandOutputNotEmpty = (toolCommand, error, cwd) => __awaiter(void 0, void 0, void 0, function* () {
+ const stdOut = exports.getCommandOutput(toolCommand, cwd);
+ if (!stdOut) {
+ throw new Error(error);
+ }
+ return stdOut;
+});
+exports.getCommandOutputNotEmpty = getCommandOutputNotEmpty;
+const 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') {
+ return exports.supportedPackageManagers.yarn;
+ }
+ else {
+ return null;
+ }
+});
+exports.getPackageManagerInfo = getPackageManagerInfo;
+/**
+ * Expands (converts) the string input `cache-dependency-path` to list of directories that
+ * may be project roots
+ *
+ * getProjectDirectoriesFromCacheDependencyPath is called twice during `restoreCache`
+ * - first through `getCacheDirectories`
+ * - second from `repoHasYarn3ManagedCache`
+ *
+ * it contains expensive IO operation and thus should be memoized
+ *
+ * @param cacheDependencyPath - either a single string or multiline string with possible glob patterns
+ * expected to be the result of `core.getInput('cache-dependency-path')`
+ * @return list of directories
+ */
+exports.getProjectDirectoriesFromCacheDependencyPath = lodash_memoize_1.default((cacheDependencyPath) => __awaiter(void 0, void 0, void 0, function* () {
+ const globber = yield glob.create(cacheDependencyPath);
+ const cacheDependenciesPaths = yield globber.glob();
+ const existingDirectories = cacheDependenciesPaths
+ .map(path_1.default.dirname)
+ .filter(util_1.unique())
+ .map(dirName => fs_1.default.realpathSync(dirName))
+ .filter(directory => fs_1.default.lstatSync(directory).isDirectory());
+ if (!existingDirectories.length)
+ core.warning(`No existing directories found containing cache-dependency-path="${cacheDependencyPath}"`);
+ return existingDirectories;
+}));
+/**
+ * Finds the cache directories configured for the repo if cache-dependency-path is not empty
+ * @param packageManagerInfo - an object having getCacheFolderPath method specific to given PM
+ * @param cacheDependencyPath - either a single string or multiline string with possible glob patterns
+ * expected to be the result of `core.getInput('cache-dependency-path')`
+ * @return list of files on which the cache depends
+ */
+const getCacheDirectoriesFromCacheDependencyPath = (packageManagerInfo, cacheDependencyPath) => __awaiter(void 0, void 0, void 0, function* () {
+ const projectDirectories = yield exports.getProjectDirectoriesFromCacheDependencyPath(cacheDependencyPath);
+ const cacheFoldersPaths = yield Promise.all(projectDirectories.map((projectDirectory) => __awaiter(void 0, void 0, void 0, function* () {
+ const cacheFolderPath = yield packageManagerInfo.getCacheFolderPath(projectDirectory);
+ core.debug(`${packageManagerInfo.name}'s cache folder "${cacheFolderPath}" configured for the directory "${projectDirectory}"`);
+ return cacheFolderPath;
+ })));
+ // uniq in order to do not cache the same directories twice
+ return cacheFoldersPaths.filter(util_1.unique());
+});
+/**
+ * Finds the cache directories configured for the repo ignoring cache-dependency-path
+ * @param packageManagerInfo - an object having getCacheFolderPath method specific to given PM
+ * @return list of files on which the cache depends
+ */
+const getCacheDirectoriesForRootProject = (packageManagerInfo) => __awaiter(void 0, void 0, void 0, function* () {
+ const cacheFolderPath = yield packageManagerInfo.getCacheFolderPath();
+ core.debug(`${packageManagerInfo.name}'s cache folder "${cacheFolderPath}" configured for the root directory`);
+ return [cacheFolderPath];
+});
+/**
+ * A function to find the cache directories configured for the repo
+ * currently it handles only the case of PM=yarn && cacheDependencyPath is not empty
+ * @param packageManagerInfo - an object having getCacheFolderPath method specific to given PM
+ * @param cacheDependencyPath - either a single string or multiline string with possible glob patterns
+ * expected to be the result of `core.getInput('cache-dependency-path')`
+ * @return list of files on which the cache depends
+ */
+const getCacheDirectories = (packageManagerInfo, cacheDependencyPath) => __awaiter(void 0, void 0, void 0, function* () {
+ // For yarn, if cacheDependencyPath is set, ask information about cache folders in each project
+ // folder satisfied by cacheDependencyPath https://github.com/actions/setup-node/issues/488
+ if (packageManagerInfo.name === 'yarn' && cacheDependencyPath) {
+ return getCacheDirectoriesFromCacheDependencyPath(packageManagerInfo, cacheDependencyPath);
+ }
+ return getCacheDirectoriesForRootProject(packageManagerInfo);
+});
+exports.getCacheDirectories = getCacheDirectories;
+/**
+ * A function to check if the directory is a yarn project configured to manage
+ * obsolete dependencies in the local cache
+ * @param directory - a path to the folder
+ * @return - true if the directory's project is yarn managed
+ * - if there's .yarn/cache folder do not mess with the dependencies kept in the repo, return false
+ * - global cache is not managed by yarn @see https://yarnpkg.com/features/offline-cache, return false
+ * - if local cache is not explicitly enabled (not yarn3), return false
+ * - return true otherwise
+ */
+const projectHasYarnBerryManagedDependencies = (directory) => __awaiter(void 0, void 0, void 0, function* () {
+ const workDir = directory || process.env.GITHUB_WORKSPACE || '.';
+ core.debug(`check if "${workDir}" has locally managed yarn3 dependencies`);
+ // if .yarn/cache directory exists the cache is managed by version control system
+ const yarnCacheFile = path_1.default.join(workDir, '.yarn', 'cache');
+ if (fs_1.default.existsSync(yarnCacheFile) &&
+ fs_1.default.lstatSync(yarnCacheFile).isDirectory()) {
+ core.debug(`"${workDir}" has .yarn/cache - dependencies are kept in the repository`);
+ return Promise.resolve(false);
+ }
+ // NOTE: yarn1 returns 'undefined' with return code = 0
+ const enableGlobalCache = yield exports.getCommandOutput('yarn config get enableGlobalCache', workDir);
+ // only local cache is not managed by yarn
+ const managed = enableGlobalCache.includes('false');
+ if (managed) {
+ core.debug(`"${workDir}" dependencies are managed by yarn 3 locally`);
+ return true;
+ }
+ else {
+ core.debug(`"${workDir}" dependencies are not managed by yarn 3 locally`);
+ return false;
+ }
+});
+/**
+ * A function to report the repo contains Yarn managed projects
+ * @param packageManagerInfo - used to make sure current package manager is yarn
+ * @param cacheDependencyPath - either a single string or multiline string with possible glob patterns
+ * expected to be the result of `core.getInput('cache-dependency-path')`
+ * @return - true if all project directories configured to be Yarn managed
+ */
+const repoHasYarnBerryManagedDependencies = (packageManagerInfo, cacheDependencyPath) => __awaiter(void 0, void 0, void 0, function* () {
+ if (packageManagerInfo.name !== 'yarn')
+ return false;
+ const yarnDirs = cacheDependencyPath
+ ? yield exports.getProjectDirectoriesFromCacheDependencyPath(cacheDependencyPath)
+ : [''];
+ const isManagedList = yield Promise.all(yarnDirs.map(projectHasYarnBerryManagedDependencies));
+ return isManagedList.every(Boolean);
+});
+exports.repoHasYarnBerryManagedDependencies = repoHasYarnBerryManagedDependencies;
+function isGhes() {
+ const ghUrl = new URL(process.env['GITHUB_SERVER_URL'] || 'https://github.com');
+ return ghUrl.hostname.toUpperCase() !== 'GITHUB.COM';
+}
+exports.isGhes = isGhes;
+function isCacheFeatureAvailable() {
+ if (cache.isFeatureAvailable())
+ return true;
+ if (isGhes()) {
+ core.warning('Cache action is only supported on GHES version >= 3.5. If you are on version >=3.5 Please check with GHES admin if Actions cache service is enabled or not.');
+ return false;
+ }
+ core.warning('The runner was not able to contact the cache service. Caching will be skipped');
+ return false;
+}
+exports.isCacheFeatureAvailable = isCacheFeatureAvailable;
/***/ }),
@@ -60676,26 +61350,26 @@ exports.isCacheFeatureAvailable = isCacheFeatureAvailable;
/***/ ((__unused_webpack_module, exports) => {
"use strict";
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.Outputs = exports.State = exports.LockType = void 0;
-var LockType;
-(function (LockType) {
- LockType["Npm"] = "npm";
- LockType["Pnpm"] = "pnpm";
- LockType["Yarn"] = "yarn";
-})(LockType = exports.LockType || (exports.LockType = {}));
-var State;
-(function (State) {
- State["CachePackageManager"] = "SETUP_NODE_CACHE_PACKAGE_MANAGER";
- State["CachePrimaryKey"] = "CACHE_KEY";
- State["CacheMatchedKey"] = "CACHE_RESULT";
- State["CachePaths"] = "CACHE_PATHS";
-})(State = exports.State || (exports.State = {}));
-var Outputs;
-(function (Outputs) {
- Outputs["CacheHit"] = "cache-hit";
-})(Outputs = exports.Outputs || (exports.Outputs = {}));
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.Outputs = exports.State = exports.LockType = void 0;
+var LockType;
+(function (LockType) {
+ LockType["Npm"] = "npm";
+ LockType["Pnpm"] = "pnpm";
+ LockType["Yarn"] = "yarn";
+})(LockType = exports.LockType || (exports.LockType = {}));
+var State;
+(function (State) {
+ State["CachePackageManager"] = "SETUP_NODE_CACHE_PACKAGE_MANAGER";
+ State["CachePrimaryKey"] = "CACHE_KEY";
+ State["CacheMatchedKey"] = "CACHE_RESULT";
+ State["CachePaths"] = "CACHE_PATHS";
+})(State = exports.State || (exports.State = {}));
+var Outputs;
+(function (Outputs) {
+ Outputs["CacheHit"] = "cache-hit";
+})(Outputs = exports.Outputs || (exports.Outputs = {}));
/***/ }),
@@ -60704,108 +61378,108 @@ var Outputs;
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
- o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- __setModuleDefault(result, mod);
- return result;
-};
-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());
- });
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.unique = exports.printEnvDetailsAndSetOutput = exports.parseNodeVersionFile = void 0;
-const core = __importStar(__nccwpck_require__(2186));
-const exec = __importStar(__nccwpck_require__(1514));
-function parseNodeVersionFile(contents) {
- var _a, _b, _c;
- let nodeVersion;
- // Try parsing the file as an NPM `package.json` file.
- try {
- nodeVersion = (_a = JSON.parse(contents).volta) === null || _a === void 0 ? void 0 : _a.node;
- if (!nodeVersion)
- nodeVersion = (_b = JSON.parse(contents).engines) === null || _b === void 0 ? void 0 : _b.node;
- }
- catch (_d) {
- core.info('Node version file is not JSON file');
- }
- if (!nodeVersion) {
- const found = contents.match(/^(?:node(js)?\s+)?v?(?[^\s]+)$/m);
- nodeVersion = (_c = found === null || found === void 0 ? void 0 : found.groups) === null || _c === void 0 ? void 0 : _c.version;
- }
- // In the case of an unknown format,
- // return as is and evaluate the version separately.
- if (!nodeVersion)
- nodeVersion = contents.trim();
- return nodeVersion;
-}
-exports.parseNodeVersionFile = parseNodeVersionFile;
-function printEnvDetailsAndSetOutput() {
- return __awaiter(this, void 0, void 0, function* () {
- core.startGroup('Environment details');
- const promises = ['node', 'npm', 'yarn'].map((tool) => __awaiter(this, void 0, void 0, function* () {
- const output = yield getToolVersion(tool, ['--version']);
- return { tool, output };
- }));
- const tools = yield Promise.all(promises);
- tools.forEach(({ tool, output }) => {
- if (tool === 'node') {
- core.setOutput(`${tool}-version`, output);
- }
- core.info(`${tool}: ${output}`);
- });
- core.endGroup();
- });
-}
-exports.printEnvDetailsAndSetOutput = printEnvDetailsAndSetOutput;
-function getToolVersion(tool, options) {
- return __awaiter(this, void 0, void 0, function* () {
- try {
- const { stdout, stderr, exitCode } = yield exec.getExecOutput(tool, options, {
- ignoreReturnCode: true,
- silent: true
- });
- if (exitCode > 0) {
- core.info(`[warning]${stderr}`);
- return '';
- }
- return stdout.trim();
- }
- catch (err) {
- return '';
- }
- });
-}
-const unique = () => {
- const encountered = new Set();
- return (value) => {
- if (encountered.has(value))
- return false;
- encountered.add(value);
- return true;
- };
-};
-exports.unique = unique;
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+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());
+ });
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.unique = exports.printEnvDetailsAndSetOutput = exports.parseNodeVersionFile = void 0;
+const core = __importStar(__nccwpck_require__(2186));
+const exec = __importStar(__nccwpck_require__(1514));
+function parseNodeVersionFile(contents) {
+ var _a, _b, _c;
+ let nodeVersion;
+ // Try parsing the file as an NPM `package.json` file.
+ try {
+ nodeVersion = (_a = JSON.parse(contents).volta) === null || _a === void 0 ? void 0 : _a.node;
+ if (!nodeVersion)
+ nodeVersion = (_b = JSON.parse(contents).engines) === null || _b === void 0 ? void 0 : _b.node;
+ }
+ catch (_d) {
+ core.info('Node version file is not JSON file');
+ }
+ if (!nodeVersion) {
+ const found = contents.match(/^(?:node(js)?\s+)?v?(?[^\s]+)$/m);
+ nodeVersion = (_c = found === null || found === void 0 ? void 0 : found.groups) === null || _c === void 0 ? void 0 : _c.version;
+ }
+ // In the case of an unknown format,
+ // return as is and evaluate the version separately.
+ if (!nodeVersion)
+ nodeVersion = contents.trim();
+ return nodeVersion;
+}
+exports.parseNodeVersionFile = parseNodeVersionFile;
+function printEnvDetailsAndSetOutput() {
+ return __awaiter(this, void 0, void 0, function* () {
+ core.startGroup('Environment details');
+ const promises = ['node', 'npm', 'yarn'].map((tool) => __awaiter(this, void 0, void 0, function* () {
+ const output = yield getToolVersion(tool, ['--version']);
+ return { tool, output };
+ }));
+ const tools = yield Promise.all(promises);
+ tools.forEach(({ tool, output }) => {
+ if (tool === 'node') {
+ core.setOutput(`${tool}-version`, output);
+ }
+ core.info(`${tool}: ${output}`);
+ });
+ core.endGroup();
+ });
+}
+exports.printEnvDetailsAndSetOutput = printEnvDetailsAndSetOutput;
+function getToolVersion(tool, options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ try {
+ const { stdout, stderr, exitCode } = yield exec.getExecOutput(tool, options, {
+ ignoreReturnCode: true,
+ silent: true
+ });
+ if (exitCode > 0) {
+ core.info(`[warning]${stderr}`);
+ return '';
+ }
+ return stdout.trim();
+ }
+ catch (err) {
+ return '';
+ }
+ });
+}
+const unique = () => {
+ const encountered = new Set();
+ return (value) => {
+ if (encountered.has(value))
+ return false;
+ encountered.add(value);
+ return true;
+ };
+};
+exports.unique = unique;
/***/ }),
diff --git a/dist/setup/index.js b/dist/setup/index.js
index 7ab0ebf8..acce7834 100644
--- a/dist/setup/index.js
+++ b/dist/setup/index.js
@@ -54422,6 +54422,689 @@ function get(object, path, defaultValue) {
module.exports = get;
+/***/ }),
+
+/***/ 4538:
+/***/ ((module) => {
+
+/**
+ * lodash (Custom Build)
+ * Build: `lodash modularize exports="npm" -o ./`
+ * Copyright jQuery Foundation and other contributors
+ * Released under MIT license
+ * Based on Underscore.js 1.8.3
+ * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ */
+
+/** Used as the `TypeError` message for "Functions" methods. */
+var FUNC_ERROR_TEXT = 'Expected a function';
+
+/** Used to stand-in for `undefined` hash values. */
+var HASH_UNDEFINED = '__lodash_hash_undefined__';
+
+/** `Object#toString` result references. */
+var funcTag = '[object Function]',
+ genTag = '[object GeneratorFunction]';
+
+/**
+ * Used to match `RegExp`
+ * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
+ */
+var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
+
+/** Used to detect host constructors (Safari). */
+var reIsHostCtor = /^\[object .+?Constructor\]$/;
+
+/** Detect free variable `global` from Node.js. */
+var freeGlobal = typeof global == 'object' && global && global.Object === Object && global;
+
+/** Detect free variable `self`. */
+var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
+
+/** Used as a reference to the global object. */
+var root = freeGlobal || freeSelf || Function('return this')();
+
+/**
+ * Gets the value at `key` of `object`.
+ *
+ * @private
+ * @param {Object} [object] The object to query.
+ * @param {string} key The key of the property to get.
+ * @returns {*} Returns the property value.
+ */
+function getValue(object, key) {
+ return object == null ? undefined : object[key];
+}
+
+/**
+ * Checks if `value` is a host object in IE < 9.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a host object, else `false`.
+ */
+function isHostObject(value) {
+ // Many host objects are `Object` objects that can coerce to strings
+ // despite having improperly defined `toString` methods.
+ var result = false;
+ if (value != null && typeof value.toString != 'function') {
+ try {
+ result = !!(value + '');
+ } catch (e) {}
+ }
+ return result;
+}
+
+/** Used for built-in method references. */
+var arrayProto = Array.prototype,
+ funcProto = Function.prototype,
+ objectProto = Object.prototype;
+
+/** Used to detect overreaching core-js shims. */
+var coreJsData = root['__core-js_shared__'];
+
+/** Used to detect methods masquerading as native. */
+var maskSrcKey = (function() {
+ var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
+ return uid ? ('Symbol(src)_1.' + uid) : '';
+}());
+
+/** Used to resolve the decompiled source of functions. */
+var funcToString = funcProto.toString;
+
+/** Used to check objects for own properties. */
+var hasOwnProperty = objectProto.hasOwnProperty;
+
+/**
+ * Used to resolve the
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
+ * of values.
+ */
+var objectToString = objectProto.toString;
+
+/** Used to detect if a method is native. */
+var reIsNative = RegExp('^' +
+ funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
+ .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
+);
+
+/** Built-in value references. */
+var splice = arrayProto.splice;
+
+/* Built-in method references that are verified to be native. */
+var Map = getNative(root, 'Map'),
+ nativeCreate = getNative(Object, 'create');
+
+/**
+ * Creates a hash object.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+function Hash(entries) {
+ var index = -1,
+ length = entries ? entries.length : 0;
+
+ this.clear();
+ while (++index < length) {
+ var entry = entries[index];
+ this.set(entry[0], entry[1]);
+ }
+}
+
+/**
+ * Removes all key-value entries from the hash.
+ *
+ * @private
+ * @name clear
+ * @memberOf Hash
+ */
+function hashClear() {
+ this.__data__ = nativeCreate ? nativeCreate(null) : {};
+}
+
+/**
+ * Removes `key` and its value from the hash.
+ *
+ * @private
+ * @name delete
+ * @memberOf Hash
+ * @param {Object} hash The hash to modify.
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function hashDelete(key) {
+ return this.has(key) && delete this.__data__[key];
+}
+
+/**
+ * Gets the hash value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf Hash
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function hashGet(key) {
+ var data = this.__data__;
+ if (nativeCreate) {
+ var result = data[key];
+ return result === HASH_UNDEFINED ? undefined : result;
+ }
+ return hasOwnProperty.call(data, key) ? data[key] : undefined;
+}
+
+/**
+ * Checks if a hash value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf Hash
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function hashHas(key) {
+ var data = this.__data__;
+ return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);
+}
+
+/**
+ * Sets the hash `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf Hash
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the hash instance.
+ */
+function hashSet(key, value) {
+ var data = this.__data__;
+ data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
+ return this;
+}
+
+// Add methods to `Hash`.
+Hash.prototype.clear = hashClear;
+Hash.prototype['delete'] = hashDelete;
+Hash.prototype.get = hashGet;
+Hash.prototype.has = hashHas;
+Hash.prototype.set = hashSet;
+
+/**
+ * Creates an list cache object.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+function ListCache(entries) {
+ var index = -1,
+ length = entries ? entries.length : 0;
+
+ this.clear();
+ while (++index < length) {
+ var entry = entries[index];
+ this.set(entry[0], entry[1]);
+ }
+}
+
+/**
+ * Removes all key-value entries from the list cache.
+ *
+ * @private
+ * @name clear
+ * @memberOf ListCache
+ */
+function listCacheClear() {
+ this.__data__ = [];
+}
+
+/**
+ * Removes `key` and its value from the list cache.
+ *
+ * @private
+ * @name delete
+ * @memberOf ListCache
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function listCacheDelete(key) {
+ var data = this.__data__,
+ index = assocIndexOf(data, key);
+
+ if (index < 0) {
+ return false;
+ }
+ var lastIndex = data.length - 1;
+ if (index == lastIndex) {
+ data.pop();
+ } else {
+ splice.call(data, index, 1);
+ }
+ return true;
+}
+
+/**
+ * Gets the list cache value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf ListCache
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function listCacheGet(key) {
+ var data = this.__data__,
+ index = assocIndexOf(data, key);
+
+ return index < 0 ? undefined : data[index][1];
+}
+
+/**
+ * Checks if a list cache value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf ListCache
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function listCacheHas(key) {
+ return assocIndexOf(this.__data__, key) > -1;
+}
+
+/**
+ * Sets the list cache `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf ListCache
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the list cache instance.
+ */
+function listCacheSet(key, value) {
+ var data = this.__data__,
+ index = assocIndexOf(data, key);
+
+ if (index < 0) {
+ data.push([key, value]);
+ } else {
+ data[index][1] = value;
+ }
+ return this;
+}
+
+// Add methods to `ListCache`.
+ListCache.prototype.clear = listCacheClear;
+ListCache.prototype['delete'] = listCacheDelete;
+ListCache.prototype.get = listCacheGet;
+ListCache.prototype.has = listCacheHas;
+ListCache.prototype.set = listCacheSet;
+
+/**
+ * Creates a map cache object to store key-value pairs.
+ *
+ * @private
+ * @constructor
+ * @param {Array} [entries] The key-value pairs to cache.
+ */
+function MapCache(entries) {
+ var index = -1,
+ length = entries ? entries.length : 0;
+
+ this.clear();
+ while (++index < length) {
+ var entry = entries[index];
+ this.set(entry[0], entry[1]);
+ }
+}
+
+/**
+ * Removes all key-value entries from the map.
+ *
+ * @private
+ * @name clear
+ * @memberOf MapCache
+ */
+function mapCacheClear() {
+ this.__data__ = {
+ 'hash': new Hash,
+ 'map': new (Map || ListCache),
+ 'string': new Hash
+ };
+}
+
+/**
+ * Removes `key` and its value from the map.
+ *
+ * @private
+ * @name delete
+ * @memberOf MapCache
+ * @param {string} key The key of the value to remove.
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
+ */
+function mapCacheDelete(key) {
+ return getMapData(this, key)['delete'](key);
+}
+
+/**
+ * Gets the map value for `key`.
+ *
+ * @private
+ * @name get
+ * @memberOf MapCache
+ * @param {string} key The key of the value to get.
+ * @returns {*} Returns the entry value.
+ */
+function mapCacheGet(key) {
+ return getMapData(this, key).get(key);
+}
+
+/**
+ * Checks if a map value for `key` exists.
+ *
+ * @private
+ * @name has
+ * @memberOf MapCache
+ * @param {string} key The key of the entry to check.
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
+ */
+function mapCacheHas(key) {
+ return getMapData(this, key).has(key);
+}
+
+/**
+ * Sets the map `key` to `value`.
+ *
+ * @private
+ * @name set
+ * @memberOf MapCache
+ * @param {string} key The key of the value to set.
+ * @param {*} value The value to set.
+ * @returns {Object} Returns the map cache instance.
+ */
+function mapCacheSet(key, value) {
+ getMapData(this, key).set(key, value);
+ return this;
+}
+
+// Add methods to `MapCache`.
+MapCache.prototype.clear = mapCacheClear;
+MapCache.prototype['delete'] = mapCacheDelete;
+MapCache.prototype.get = mapCacheGet;
+MapCache.prototype.has = mapCacheHas;
+MapCache.prototype.set = mapCacheSet;
+
+/**
+ * Gets the index at which the `key` is found in `array` of key-value pairs.
+ *
+ * @private
+ * @param {Array} array The array to inspect.
+ * @param {*} key The key to search for.
+ * @returns {number} Returns the index of the matched value, else `-1`.
+ */
+function assocIndexOf(array, key) {
+ var length = array.length;
+ while (length--) {
+ if (eq(array[length][0], key)) {
+ return length;
+ }
+ }
+ return -1;
+}
+
+/**
+ * The base implementation of `_.isNative` without bad shim checks.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a native function,
+ * else `false`.
+ */
+function baseIsNative(value) {
+ if (!isObject(value) || isMasked(value)) {
+ return false;
+ }
+ var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;
+ return pattern.test(toSource(value));
+}
+
+/**
+ * Gets the data for `map`.
+ *
+ * @private
+ * @param {Object} map The map to query.
+ * @param {string} key The reference key.
+ * @returns {*} Returns the map data.
+ */
+function getMapData(map, key) {
+ var data = map.__data__;
+ return isKeyable(key)
+ ? data[typeof key == 'string' ? 'string' : 'hash']
+ : data.map;
+}
+
+/**
+ * Gets the native function at `key` of `object`.
+ *
+ * @private
+ * @param {Object} object The object to query.
+ * @param {string} key The key of the method to get.
+ * @returns {*} Returns the function if it's native, else `undefined`.
+ */
+function getNative(object, key) {
+ var value = getValue(object, key);
+ return baseIsNative(value) ? value : undefined;
+}
+
+/**
+ * Checks if `value` is suitable for use as unique object key.
+ *
+ * @private
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
+ */
+function isKeyable(value) {
+ var type = typeof value;
+ return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
+ ? (value !== '__proto__')
+ : (value === null);
+}
+
+/**
+ * Checks if `func` has its source masked.
+ *
+ * @private
+ * @param {Function} func The function to check.
+ * @returns {boolean} Returns `true` if `func` is masked, else `false`.
+ */
+function isMasked(func) {
+ return !!maskSrcKey && (maskSrcKey in func);
+}
+
+/**
+ * Converts `func` to its source code.
+ *
+ * @private
+ * @param {Function} func The function to process.
+ * @returns {string} Returns the source code.
+ */
+function toSource(func) {
+ if (func != null) {
+ try {
+ return funcToString.call(func);
+ } catch (e) {}
+ try {
+ return (func + '');
+ } catch (e) {}
+ }
+ return '';
+}
+
+/**
+ * Creates a function that memoizes the result of `func`. If `resolver` is
+ * provided, it determines the cache key for storing the result based on the
+ * arguments provided to the memoized function. By default, the first argument
+ * provided to the memoized function is used as the map cache key. The `func`
+ * is invoked with the `this` binding of the memoized function.
+ *
+ * **Note:** The cache is exposed as the `cache` property on the memoized
+ * function. Its creation may be customized by replacing the `_.memoize.Cache`
+ * constructor with one whose instances implement the
+ * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
+ * method interface of `delete`, `get`, `has`, and `set`.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Function
+ * @param {Function} func The function to have its output memoized.
+ * @param {Function} [resolver] The function to resolve the cache key.
+ * @returns {Function} Returns the new memoized function.
+ * @example
+ *
+ * var object = { 'a': 1, 'b': 2 };
+ * var other = { 'c': 3, 'd': 4 };
+ *
+ * var values = _.memoize(_.values);
+ * values(object);
+ * // => [1, 2]
+ *
+ * values(other);
+ * // => [3, 4]
+ *
+ * object.a = 2;
+ * values(object);
+ * // => [1, 2]
+ *
+ * // Modify the result cache.
+ * values.cache.set(object, ['a', 'b']);
+ * values(object);
+ * // => ['a', 'b']
+ *
+ * // Replace `_.memoize.Cache`.
+ * _.memoize.Cache = WeakMap;
+ */
+function memoize(func, resolver) {
+ if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {
+ throw new TypeError(FUNC_ERROR_TEXT);
+ }
+ var memoized = function() {
+ var args = arguments,
+ key = resolver ? resolver.apply(this, args) : args[0],
+ cache = memoized.cache;
+
+ if (cache.has(key)) {
+ return cache.get(key);
+ }
+ var result = func.apply(this, args);
+ memoized.cache = cache.set(key, result);
+ return result;
+ };
+ memoized.cache = new (memoize.Cache || MapCache);
+ return memoized;
+}
+
+// Assign cache to `_.memoize`.
+memoize.Cache = MapCache;
+
+/**
+ * Performs a
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
+ * comparison between two values to determine if they are equivalent.
+ *
+ * @static
+ * @memberOf _
+ * @since 4.0.0
+ * @category Lang
+ * @param {*} value The value to compare.
+ * @param {*} other The other value to compare.
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
+ * @example
+ *
+ * var object = { 'a': 1 };
+ * var other = { 'a': 1 };
+ *
+ * _.eq(object, object);
+ * // => true
+ *
+ * _.eq(object, other);
+ * // => false
+ *
+ * _.eq('a', 'a');
+ * // => true
+ *
+ * _.eq('a', Object('a'));
+ * // => false
+ *
+ * _.eq(NaN, NaN);
+ * // => true
+ */
+function eq(value, other) {
+ return value === other || (value !== value && other !== other);
+}
+
+/**
+ * Checks if `value` is classified as a `Function` object.
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is a function, else `false`.
+ * @example
+ *
+ * _.isFunction(_);
+ * // => true
+ *
+ * _.isFunction(/abc/);
+ * // => false
+ */
+function isFunction(value) {
+ // The use of `Object#toString` avoids issues with the `typeof` operator
+ // in Safari 8-9 which returns 'object' for typed array and other constructors.
+ var tag = isObject(value) ? objectToString.call(value) : '';
+ return tag == funcTag || tag == genTag;
+}
+
+/**
+ * Checks if `value` is the
+ * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
+ * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
+ *
+ * @static
+ * @memberOf _
+ * @since 0.1.0
+ * @category Lang
+ * @param {*} value The value to check.
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
+ * @example
+ *
+ * _.isObject({});
+ * // => true
+ *
+ * _.isObject([1, 2, 3]);
+ * // => true
+ *
+ * _.isObject(_.noop);
+ * // => true
+ *
+ * _.isObject(null);
+ * // => false
+ */
+function isObject(value) {
+ var type = typeof value;
+ return !!value && (type == 'object' || type == 'function');
+}
+
+module.exports = memoize;
+
+
/***/ }),
/***/ 1552:
@@ -71083,73 +71766,73 @@ function wrappy (fn, cb) {
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
- o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- __setModuleDefault(result, mod);
- return result;
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.configAuthentication = void 0;
-const fs = __importStar(__nccwpck_require__(7147));
-const os = __importStar(__nccwpck_require__(2037));
-const path = __importStar(__nccwpck_require__(1017));
-const core = __importStar(__nccwpck_require__(2186));
-const github = __importStar(__nccwpck_require__(5438));
-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(`${scope}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}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 __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.configAuthentication = void 0;
+const fs = __importStar(__nccwpck_require__(7147));
+const os = __importStar(__nccwpck_require__(2037));
+const path = __importStar(__nccwpck_require__(1017));
+const core = __importStar(__nccwpck_require__(2186));
+const github = __importStar(__nccwpck_require__(5438));
+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(`${scope}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}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');
+}
/***/ }),
@@ -71158,94 +71841,94 @@ function writeRegistryToFile(registryUrl, fileLocation, alwaysAuth) {
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
- o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- __setModuleDefault(result, mod);
- return result;
-};
-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 __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.restoreCache = void 0;
-const cache = __importStar(__nccwpck_require__(7799));
-const core = __importStar(__nccwpck_require__(2186));
-const glob = __importStar(__nccwpck_require__(8090));
-const path_1 = __importDefault(__nccwpck_require__(1017));
-const fs_1 = __importDefault(__nccwpck_require__(7147));
-const constants_1 = __nccwpck_require__(9042);
-const cache_utils_1 = __nccwpck_require__(1678);
-const 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 cachePaths = yield cache_utils_1.getCacheDirectories(packageManagerInfo, cacheDependencyPath);
- core.saveState(constants_1.State.CachePaths, cachePaths);
- 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 keyPrefix = `node-cache-${platform}-${packageManager}`;
- const primaryKey = `${keyPrefix}-${fileHash}`;
- core.debug(`primary key is ${primaryKey}`);
- core.saveState(constants_1.State.CachePrimaryKey, primaryKey);
- const isManagedByYarnBerry = yield cache_utils_1.repoHasYarnBerryManagedDependencies(packageManagerInfo, cacheDependencyPath);
- let cacheKey;
- if (isManagedByYarnBerry) {
- core.info('All dependencies are managed locally by yarn3, the previous cache can be used');
- cacheKey = yield cache.restoreCache(cachePaths, primaryKey, [keyPrefix]);
- }
- else {
- cacheKey = yield cache.restoreCache(cachePaths, primaryKey);
- }
- core.setOutput('cache-hit', Boolean(cacheKey));
- if (!cacheKey) {
- core.info(`${packageManager} cache is not found`);
- return;
- }
- core.saveState(constants_1.State.CacheMatchedKey, cacheKey);
- core.info(`Cache restored from key: ${cacheKey}`);
-});
-exports.restoreCache = restoreCache;
-const findLockFile = (packageManager) => {
- const 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 __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+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 __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.restoreCache = void 0;
+const cache = __importStar(__nccwpck_require__(7799));
+const core = __importStar(__nccwpck_require__(2186));
+const glob = __importStar(__nccwpck_require__(8090));
+const path_1 = __importDefault(__nccwpck_require__(1017));
+const fs_1 = __importDefault(__nccwpck_require__(7147));
+const constants_1 = __nccwpck_require__(9042);
+const cache_utils_1 = __nccwpck_require__(1678);
+const 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 cachePaths = yield cache_utils_1.getCacheDirectories(packageManagerInfo, cacheDependencyPath);
+ core.saveState(constants_1.State.CachePaths, cachePaths);
+ 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 keyPrefix = `node-cache-${platform}-${packageManager}`;
+ const primaryKey = `${keyPrefix}-${fileHash}`;
+ core.debug(`primary key is ${primaryKey}`);
+ core.saveState(constants_1.State.CachePrimaryKey, primaryKey);
+ const isManagedByYarnBerry = yield cache_utils_1.repoHasYarnBerryManagedDependencies(packageManagerInfo, cacheDependencyPath);
+ let cacheKey;
+ if (isManagedByYarnBerry) {
+ core.info('All dependencies are managed locally by yarn3, the previous cache can be used');
+ cacheKey = yield cache.restoreCache(cachePaths, primaryKey, [keyPrefix]);
+ }
+ else {
+ cacheKey = yield cache.restoreCache(cachePaths, primaryKey);
+ }
+ core.setOutput('cache-hit', Boolean(cacheKey));
+ if (!cacheKey) {
+ core.info(`${packageManager} cache is not found`);
+ return;
+ }
+ core.saveState(constants_1.State.CacheMatchedKey, cacheKey);
+ core.info(`Cache restored from key: ${cacheKey}`);
+});
+exports.restoreCache = restoreCache;
+const findLockFile = (packageManager) => {
+ const 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);
+};
/***/ }),
@@ -71254,254 +71937,245 @@ const findLockFile = (packageManager) => {
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
- o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- __setModuleDefault(result, mod);
- return result;
-};
-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 __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.isCacheFeatureAvailable = exports.isGhes = exports.repoHasYarnBerryManagedDependencies = exports.getCacheDirectories = exports.resetProjectDirectoriesMemoized = exports.getPackageManagerInfo = exports.getCommandOutputNotEmpty = exports.getCommandOutput = exports.supportedPackageManagers = void 0;
-const core = __importStar(__nccwpck_require__(2186));
-const exec = __importStar(__nccwpck_require__(1514));
-const cache = __importStar(__nccwpck_require__(7799));
-const glob = __importStar(__nccwpck_require__(8090));
-const path_1 = __importDefault(__nccwpck_require__(1017));
-const fs_1 = __importDefault(__nccwpck_require__(7147));
-const util_1 = __nccwpck_require__(2629);
-exports.supportedPackageManagers = {
- npm: {
- name: 'npm',
- lockFilePatterns: ['package-lock.json', 'npm-shrinkwrap.json', 'yarn.lock'],
- getCacheFolderPath: () => exports.getCommandOutputNotEmpty('npm config get cache', 'Could not get npm cache folder path')
- },
- pnpm: {
- name: 'pnpm',
- lockFilePatterns: ['pnpm-lock.yaml'],
- getCacheFolderPath: () => exports.getCommandOutputNotEmpty('pnpm store path --silent', 'Could not get pnpm cache folder path')
- },
- yarn: {
- name: 'yarn',
- lockFilePatterns: ['yarn.lock'],
- getCacheFolderPath: (projectDir) => __awaiter(void 0, void 0, void 0, function* () {
- const yarnVersion = yield exports.getCommandOutputNotEmpty(`yarn --version`, 'Could not retrieve version of yarn', projectDir);
- core.debug(`Consumed yarn version is ${yarnVersion} (working dir: "${projectDir || ''}")`);
- const stdOut = yarnVersion.startsWith('1.')
- ? yield exports.getCommandOutput('yarn cache dir', projectDir)
- : yield exports.getCommandOutput('yarn config get cacheFolder', projectDir);
- if (!stdOut) {
- throw new Error(`Could not get yarn cache folder path for ${projectDir}`);
- }
- return stdOut;
- })
- }
-};
-const getCommandOutput = (toolCommand, cwd) => __awaiter(void 0, void 0, void 0, function* () {
- let { stdout, stderr, exitCode } = yield exec.getExecOutput(toolCommand, undefined, Object.assign({ ignoreReturnCode: true }, (cwd && { cwd })));
- if (exitCode) {
- stderr = !stderr.trim()
- ? `The '${toolCommand}' command failed with exit code: ${exitCode}`
- : stderr;
- throw new Error(stderr);
- }
- return stdout.trim();
-});
-exports.getCommandOutput = getCommandOutput;
-const getCommandOutputNotEmpty = (toolCommand, error, cwd) => __awaiter(void 0, void 0, void 0, function* () {
- const stdOut = exports.getCommandOutput(toolCommand, cwd);
- if (!stdOut) {
- throw new Error(error);
- }
- return stdOut;
-});
-exports.getCommandOutputNotEmpty = getCommandOutputNotEmpty;
-const 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') {
- return exports.supportedPackageManagers.yarn;
- }
- else {
- return null;
- }
-});
-exports.getPackageManagerInfo = getPackageManagerInfo;
-/**
- * getProjectDirectoriesFromCacheDependencyPath is called twice during `restoreCache`
- * - first through `getCacheDirectories`
- * - second from `repoHasYarn3ManagedCache`
- *
- * it contains expensive IO operation and thus should be memoized
- */
-let projectDirectoriesMemoized = null;
-/**
- * unit test must reset memoized variables
- */
-const resetProjectDirectoriesMemoized = () => (projectDirectoriesMemoized = null);
-exports.resetProjectDirectoriesMemoized = resetProjectDirectoriesMemoized;
-/**
- * Expands (converts) the string input `cache-dependency-path` to list of directories that
- * may be project roots
- * @param cacheDependencyPath - either a single string or multiline string with possible glob patterns
- * expected to be the result of `core.getInput('cache-dependency-path')`
- * @return list of directories and possible
- */
-const getProjectDirectoriesFromCacheDependencyPath = (cacheDependencyPath) => __awaiter(void 0, void 0, void 0, function* () {
- if (projectDirectoriesMemoized !== null) {
- return projectDirectoriesMemoized;
- }
- const globber = yield glob.create(cacheDependencyPath);
- const cacheDependenciesPaths = yield globber.glob();
- const existingDirectories = cacheDependenciesPaths
- .map(path_1.default.dirname)
- .filter(util_1.unique())
- .map(dirName => fs_1.default.realpathSync(dirName))
- .filter(directory => fs_1.default.lstatSync(directory).isDirectory());
- if (!existingDirectories.length)
- core.warning(`No existing directories found containing cache-dependency-path="${cacheDependencyPath}"`);
- projectDirectoriesMemoized = existingDirectories;
- return existingDirectories;
-});
-/**
- * Finds the cache directories configured for the repo if cache-dependency-path is not empty
- * @param packageManagerInfo - an object having getCacheFolderPath method specific to given PM
- * @param cacheDependencyPath - either a single string or multiline string with possible glob patterns
- * expected to be the result of `core.getInput('cache-dependency-path')`
- * @return list of files on which the cache depends
- */
-const getCacheDirectoriesFromCacheDependencyPath = (packageManagerInfo, cacheDependencyPath) => __awaiter(void 0, void 0, void 0, function* () {
- const projectDirectories = yield getProjectDirectoriesFromCacheDependencyPath(cacheDependencyPath);
- const cacheFoldersPaths = yield Promise.all(projectDirectories.map((projectDirectory) => __awaiter(void 0, void 0, void 0, function* () {
- const cacheFolderPath = yield packageManagerInfo.getCacheFolderPath(projectDirectory);
- core.debug(`${packageManagerInfo.name}'s cache folder "${cacheFolderPath}" configured for the directory "${projectDirectory}"`);
- return cacheFolderPath;
- })));
- // uniq in order to do not cache the same directories twice
- return cacheFoldersPaths.filter(util_1.unique());
-});
-/**
- * Finds the cache directories configured for the repo ignoring cache-dependency-path
- * @param packageManagerInfo - an object having getCacheFolderPath method specific to given PM
- * @return list of files on which the cache depends
- */
-const getCacheDirectoriesForRootProject = (packageManagerInfo) => __awaiter(void 0, void 0, void 0, function* () {
- const cacheFolderPath = yield packageManagerInfo.getCacheFolderPath();
- core.debug(`${packageManagerInfo.name}'s cache folder "${cacheFolderPath}" configured for the root directory`);
- return [cacheFolderPath];
-});
-/**
- * A function to find the cache directories configured for the repo
- * currently it handles only the case of PM=yarn && cacheDependencyPath is not empty
- * @param packageManagerInfo - an object having getCacheFolderPath method specific to given PM
- * @param cacheDependencyPath - either a single string or multiline string with possible glob patterns
- * expected to be the result of `core.getInput('cache-dependency-path')`
- * @return list of files on which the cache depends
- */
-const getCacheDirectories = (packageManagerInfo, cacheDependencyPath) => __awaiter(void 0, void 0, void 0, function* () {
- // For yarn, if cacheDependencyPath is set, ask information about cache folders in each project
- // folder satisfied by cacheDependencyPath https://github.com/actions/setup-node/issues/488
- if (packageManagerInfo.name === 'yarn' && cacheDependencyPath) {
- return getCacheDirectoriesFromCacheDependencyPath(packageManagerInfo, cacheDependencyPath);
- }
- return getCacheDirectoriesForRootProject(packageManagerInfo);
-});
-exports.getCacheDirectories = getCacheDirectories;
-/**
- * A function to check if the directory is a yarn project configured to manage
- * obsolete dependencies in the local cache
- * @param directory - a path to the folder
- * @return - true if the directory's project is yarn managed
- * - if there's .yarn/cache folder do not mess with the dependencies kept in the repo, return false
- * - global cache is not managed by yarn @see https://yarnpkg.com/features/offline-cache, return false
- * - if local cache is not explicitly enabled (not yarn3), return false
- * - return true otherwise
- */
-const projectHasYarnBerryManagedDependencies = (directory) => __awaiter(void 0, void 0, void 0, function* () {
- const workDir = directory || process.env.GITHUB_WORKSPACE || '.';
- core.debug(`check if "${workDir}" has locally managed yarn3 dependencies`);
- // if .yarn/cache directory exists the cache is managed by version control system
- const yarnCacheFile = path_1.default.join(workDir, '.yarn', 'cache');
- if (fs_1.default.existsSync(yarnCacheFile) &&
- fs_1.default.lstatSync(yarnCacheFile).isDirectory()) {
- core.debug(`"${workDir}" has .yarn/cache - dependencies are kept in the repository`);
- return Promise.resolve(false);
- }
- // NOTE: yarn1 returns 'undefined' with return code = 0
- const enableGlobalCache = yield exports.getCommandOutput('yarn config get enableGlobalCache', workDir);
- // only local cache is not managed by yarn
- const managed = enableGlobalCache.includes('false');
- if (managed) {
- core.debug(`"${workDir}" dependencies are managed by yarn 3 locally`);
- return true;
- }
- else {
- core.debug(`"${workDir}" dependencies are not managed by yarn 3 locally`);
- return false;
- }
-});
-/**
- * A function to report the repo contains Yarn managed projects
- * @param packageManagerInfo - used to make sure current package manager is yarn
- * @param cacheDependencyPath - either a single string or multiline string with possible glob patterns
- * expected to be the result of `core.getInput('cache-dependency-path')`
- * @return - true if all project directories configured to be Yarn managed
- */
-const repoHasYarnBerryManagedDependencies = (packageManagerInfo, cacheDependencyPath) => __awaiter(void 0, void 0, void 0, function* () {
- if (packageManagerInfo.name !== 'yarn')
- return false;
- const yarnDirs = cacheDependencyPath
- ? yield getProjectDirectoriesFromCacheDependencyPath(cacheDependencyPath)
- : [''];
- const isManagedList = yield Promise.all(yarnDirs.map(projectHasYarnBerryManagedDependencies));
- return isManagedList.every(Boolean);
-});
-exports.repoHasYarnBerryManagedDependencies = repoHasYarnBerryManagedDependencies;
-function isGhes() {
- const ghUrl = new URL(process.env['GITHUB_SERVER_URL'] || 'https://github.com');
- return ghUrl.hostname.toUpperCase() !== 'GITHUB.COM';
-}
-exports.isGhes = isGhes;
-function isCacheFeatureAvailable() {
- if (cache.isFeatureAvailable())
- return true;
- if (isGhes()) {
- core.warning('Cache action is only supported on GHES version >= 3.5. If you are on version >=3.5 Please check with GHES admin if Actions cache service is enabled or not.');
- return false;
- }
- core.warning('The runner was not able to contact the cache service. Caching will be skipped');
- return false;
-}
-exports.isCacheFeatureAvailable = isCacheFeatureAvailable;
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+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 __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.isCacheFeatureAvailable = exports.isGhes = exports.repoHasYarnBerryManagedDependencies = exports.getCacheDirectories = exports.getProjectDirectoriesFromCacheDependencyPath = exports.getPackageManagerInfo = exports.getCommandOutputNotEmpty = exports.getCommandOutput = exports.supportedPackageManagers = void 0;
+const core = __importStar(__nccwpck_require__(2186));
+const exec = __importStar(__nccwpck_require__(1514));
+const cache = __importStar(__nccwpck_require__(7799));
+const glob = __importStar(__nccwpck_require__(8090));
+const lodash_memoize_1 = __importDefault(__nccwpck_require__(4538));
+const path_1 = __importDefault(__nccwpck_require__(1017));
+const fs_1 = __importDefault(__nccwpck_require__(7147));
+const util_1 = __nccwpck_require__(2629);
+exports.supportedPackageManagers = {
+ npm: {
+ name: 'npm',
+ lockFilePatterns: ['package-lock.json', 'npm-shrinkwrap.json', 'yarn.lock'],
+ getCacheFolderPath: () => exports.getCommandOutputNotEmpty('npm config get cache', 'Could not get npm cache folder path')
+ },
+ pnpm: {
+ name: 'pnpm',
+ lockFilePatterns: ['pnpm-lock.yaml'],
+ getCacheFolderPath: () => exports.getCommandOutputNotEmpty('pnpm store path --silent', 'Could not get pnpm cache folder path')
+ },
+ yarn: {
+ name: 'yarn',
+ lockFilePatterns: ['yarn.lock'],
+ getCacheFolderPath: (projectDir) => __awaiter(void 0, void 0, void 0, function* () {
+ const yarnVersion = yield exports.getCommandOutputNotEmpty(`yarn --version`, 'Could not retrieve version of yarn', projectDir);
+ core.debug(`Consumed yarn version is ${yarnVersion} (working dir: "${projectDir || ''}")`);
+ const stdOut = yarnVersion.startsWith('1.')
+ ? yield exports.getCommandOutput('yarn cache dir', projectDir)
+ : yield exports.getCommandOutput('yarn config get cacheFolder', projectDir);
+ if (!stdOut) {
+ throw new Error(`Could not get yarn cache folder path for ${projectDir}`);
+ }
+ return stdOut;
+ })
+ }
+};
+const getCommandOutput = (toolCommand, cwd) => __awaiter(void 0, void 0, void 0, function* () {
+ let { stdout, stderr, exitCode } = yield exec.getExecOutput(toolCommand, undefined, Object.assign({ ignoreReturnCode: true }, (cwd && { cwd })));
+ if (exitCode) {
+ stderr = !stderr.trim()
+ ? `The '${toolCommand}' command failed with exit code: ${exitCode}`
+ : stderr;
+ throw new Error(stderr);
+ }
+ return stdout.trim();
+});
+exports.getCommandOutput = getCommandOutput;
+const getCommandOutputNotEmpty = (toolCommand, error, cwd) => __awaiter(void 0, void 0, void 0, function* () {
+ const stdOut = exports.getCommandOutput(toolCommand, cwd);
+ if (!stdOut) {
+ throw new Error(error);
+ }
+ return stdOut;
+});
+exports.getCommandOutputNotEmpty = getCommandOutputNotEmpty;
+const 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') {
+ return exports.supportedPackageManagers.yarn;
+ }
+ else {
+ return null;
+ }
+});
+exports.getPackageManagerInfo = getPackageManagerInfo;
+/**
+ * Expands (converts) the string input `cache-dependency-path` to list of directories that
+ * may be project roots
+ *
+ * getProjectDirectoriesFromCacheDependencyPath is called twice during `restoreCache`
+ * - first through `getCacheDirectories`
+ * - second from `repoHasYarn3ManagedCache`
+ *
+ * it contains expensive IO operation and thus should be memoized
+ *
+ * @param cacheDependencyPath - either a single string or multiline string with possible glob patterns
+ * expected to be the result of `core.getInput('cache-dependency-path')`
+ * @return list of directories
+ */
+exports.getProjectDirectoriesFromCacheDependencyPath = lodash_memoize_1.default((cacheDependencyPath) => __awaiter(void 0, void 0, void 0, function* () {
+ const globber = yield glob.create(cacheDependencyPath);
+ const cacheDependenciesPaths = yield globber.glob();
+ const existingDirectories = cacheDependenciesPaths
+ .map(path_1.default.dirname)
+ .filter(util_1.unique())
+ .map(dirName => fs_1.default.realpathSync(dirName))
+ .filter(directory => fs_1.default.lstatSync(directory).isDirectory());
+ if (!existingDirectories.length)
+ core.warning(`No existing directories found containing cache-dependency-path="${cacheDependencyPath}"`);
+ return existingDirectories;
+}));
+/**
+ * Finds the cache directories configured for the repo if cache-dependency-path is not empty
+ * @param packageManagerInfo - an object having getCacheFolderPath method specific to given PM
+ * @param cacheDependencyPath - either a single string or multiline string with possible glob patterns
+ * expected to be the result of `core.getInput('cache-dependency-path')`
+ * @return list of files on which the cache depends
+ */
+const getCacheDirectoriesFromCacheDependencyPath = (packageManagerInfo, cacheDependencyPath) => __awaiter(void 0, void 0, void 0, function* () {
+ const projectDirectories = yield exports.getProjectDirectoriesFromCacheDependencyPath(cacheDependencyPath);
+ const cacheFoldersPaths = yield Promise.all(projectDirectories.map((projectDirectory) => __awaiter(void 0, void 0, void 0, function* () {
+ const cacheFolderPath = yield packageManagerInfo.getCacheFolderPath(projectDirectory);
+ core.debug(`${packageManagerInfo.name}'s cache folder "${cacheFolderPath}" configured for the directory "${projectDirectory}"`);
+ return cacheFolderPath;
+ })));
+ // uniq in order to do not cache the same directories twice
+ return cacheFoldersPaths.filter(util_1.unique());
+});
+/**
+ * Finds the cache directories configured for the repo ignoring cache-dependency-path
+ * @param packageManagerInfo - an object having getCacheFolderPath method specific to given PM
+ * @return list of files on which the cache depends
+ */
+const getCacheDirectoriesForRootProject = (packageManagerInfo) => __awaiter(void 0, void 0, void 0, function* () {
+ const cacheFolderPath = yield packageManagerInfo.getCacheFolderPath();
+ core.debug(`${packageManagerInfo.name}'s cache folder "${cacheFolderPath}" configured for the root directory`);
+ return [cacheFolderPath];
+});
+/**
+ * A function to find the cache directories configured for the repo
+ * currently it handles only the case of PM=yarn && cacheDependencyPath is not empty
+ * @param packageManagerInfo - an object having getCacheFolderPath method specific to given PM
+ * @param cacheDependencyPath - either a single string or multiline string with possible glob patterns
+ * expected to be the result of `core.getInput('cache-dependency-path')`
+ * @return list of files on which the cache depends
+ */
+const getCacheDirectories = (packageManagerInfo, cacheDependencyPath) => __awaiter(void 0, void 0, void 0, function* () {
+ // For yarn, if cacheDependencyPath is set, ask information about cache folders in each project
+ // folder satisfied by cacheDependencyPath https://github.com/actions/setup-node/issues/488
+ if (packageManagerInfo.name === 'yarn' && cacheDependencyPath) {
+ return getCacheDirectoriesFromCacheDependencyPath(packageManagerInfo, cacheDependencyPath);
+ }
+ return getCacheDirectoriesForRootProject(packageManagerInfo);
+});
+exports.getCacheDirectories = getCacheDirectories;
+/**
+ * A function to check if the directory is a yarn project configured to manage
+ * obsolete dependencies in the local cache
+ * @param directory - a path to the folder
+ * @return - true if the directory's project is yarn managed
+ * - if there's .yarn/cache folder do not mess with the dependencies kept in the repo, return false
+ * - global cache is not managed by yarn @see https://yarnpkg.com/features/offline-cache, return false
+ * - if local cache is not explicitly enabled (not yarn3), return false
+ * - return true otherwise
+ */
+const projectHasYarnBerryManagedDependencies = (directory) => __awaiter(void 0, void 0, void 0, function* () {
+ const workDir = directory || process.env.GITHUB_WORKSPACE || '.';
+ core.debug(`check if "${workDir}" has locally managed yarn3 dependencies`);
+ // if .yarn/cache directory exists the cache is managed by version control system
+ const yarnCacheFile = path_1.default.join(workDir, '.yarn', 'cache');
+ if (fs_1.default.existsSync(yarnCacheFile) &&
+ fs_1.default.lstatSync(yarnCacheFile).isDirectory()) {
+ core.debug(`"${workDir}" has .yarn/cache - dependencies are kept in the repository`);
+ return Promise.resolve(false);
+ }
+ // NOTE: yarn1 returns 'undefined' with return code = 0
+ const enableGlobalCache = yield exports.getCommandOutput('yarn config get enableGlobalCache', workDir);
+ // only local cache is not managed by yarn
+ const managed = enableGlobalCache.includes('false');
+ if (managed) {
+ core.debug(`"${workDir}" dependencies are managed by yarn 3 locally`);
+ return true;
+ }
+ else {
+ core.debug(`"${workDir}" dependencies are not managed by yarn 3 locally`);
+ return false;
+ }
+});
+/**
+ * A function to report the repo contains Yarn managed projects
+ * @param packageManagerInfo - used to make sure current package manager is yarn
+ * @param cacheDependencyPath - either a single string or multiline string with possible glob patterns
+ * expected to be the result of `core.getInput('cache-dependency-path')`
+ * @return - true if all project directories configured to be Yarn managed
+ */
+const repoHasYarnBerryManagedDependencies = (packageManagerInfo, cacheDependencyPath) => __awaiter(void 0, void 0, void 0, function* () {
+ if (packageManagerInfo.name !== 'yarn')
+ return false;
+ const yarnDirs = cacheDependencyPath
+ ? yield exports.getProjectDirectoriesFromCacheDependencyPath(cacheDependencyPath)
+ : [''];
+ const isManagedList = yield Promise.all(yarnDirs.map(projectHasYarnBerryManagedDependencies));
+ return isManagedList.every(Boolean);
+});
+exports.repoHasYarnBerryManagedDependencies = repoHasYarnBerryManagedDependencies;
+function isGhes() {
+ const ghUrl = new URL(process.env['GITHUB_SERVER_URL'] || 'https://github.com');
+ return ghUrl.hostname.toUpperCase() !== 'GITHUB.COM';
+}
+exports.isGhes = isGhes;
+function isCacheFeatureAvailable() {
+ if (cache.isFeatureAvailable())
+ return true;
+ if (isGhes()) {
+ core.warning('Cache action is only supported on GHES version >= 3.5. If you are on version >=3.5 Please check with GHES admin if Actions cache service is enabled or not.');
+ return false;
+ }
+ core.warning('The runner was not able to contact the cache service. Caching will be skipped');
+ return false;
+}
+exports.isCacheFeatureAvailable = isCacheFeatureAvailable;
/***/ }),
@@ -71510,26 +72184,26 @@ exports.isCacheFeatureAvailable = isCacheFeatureAvailable;
/***/ ((__unused_webpack_module, exports) => {
"use strict";
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.Outputs = exports.State = exports.LockType = void 0;
-var LockType;
-(function (LockType) {
- LockType["Npm"] = "npm";
- LockType["Pnpm"] = "pnpm";
- LockType["Yarn"] = "yarn";
-})(LockType = exports.LockType || (exports.LockType = {}));
-var State;
-(function (State) {
- State["CachePackageManager"] = "SETUP_NODE_CACHE_PACKAGE_MANAGER";
- State["CachePrimaryKey"] = "CACHE_KEY";
- State["CacheMatchedKey"] = "CACHE_RESULT";
- State["CachePaths"] = "CACHE_PATHS";
-})(State = exports.State || (exports.State = {}));
-var Outputs;
-(function (Outputs) {
- Outputs["CacheHit"] = "cache-hit";
-})(Outputs = exports.Outputs || (exports.Outputs = {}));
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.Outputs = exports.State = exports.LockType = void 0;
+var LockType;
+(function (LockType) {
+ LockType["Npm"] = "npm";
+ LockType["Pnpm"] = "pnpm";
+ LockType["Yarn"] = "yarn";
+})(LockType = exports.LockType || (exports.LockType = {}));
+var State;
+(function (State) {
+ State["CachePackageManager"] = "SETUP_NODE_CACHE_PACKAGE_MANAGER";
+ State["CachePrimaryKey"] = "CACHE_KEY";
+ State["CacheMatchedKey"] = "CACHE_RESULT";
+ State["CachePaths"] = "CACHE_PATHS";
+})(State = exports.State || (exports.State = {}));
+var Outputs;
+(function (Outputs) {
+ Outputs["CacheHit"] = "cache-hit";
+})(Outputs = exports.Outputs || (exports.Outputs = {}));
/***/ }),
@@ -71538,73 +72212,73 @@ var Outputs;
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
- o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- __setModuleDefault(result, mod);
- return result;
-};
-var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-const tc = __importStar(__nccwpck_require__(7784));
-const semver_1 = __importDefault(__nccwpck_require__(5911));
-const base_distribution_1 = __importDefault(__nccwpck_require__(7));
-class BasePrereleaseNodejs extends base_distribution_1.default {
- constructor(nodeInfo) {
- super(nodeInfo);
- }
- findVersionInHostedToolCacheDirectory() {
- let toolPath = '';
- const localVersionPaths = tc
- .findAllVersions('node', this.nodeInfo.arch)
- .filter(i => {
- const prerelease = semver_1.default.prerelease(i);
- if (!prerelease) {
- return false;
- }
- return prerelease[0].includes(this.distribution);
- });
- localVersionPaths.sort(semver_1.default.rcompare);
- const localVersion = this.evaluateVersions(localVersionPaths);
- if (localVersion) {
- toolPath = tc.find('node', localVersion, this.nodeInfo.arch);
- }
- return toolPath;
- }
- validRange(versionSpec) {
- let range;
- const [raw, prerelease] = this.splitVersionSpec(versionSpec);
- const isValidVersion = semver_1.default.valid(raw);
- const rawVersion = (isValidVersion ? raw : semver_1.default.coerce(raw));
- if (prerelease !== this.distribution) {
- range = versionSpec;
- }
- else {
- range = `${semver_1.default.validRange(`^${rawVersion}-${this.distribution}`)}-0`;
- }
- return { range, options: { includePrerelease: !isValidVersion } };
- }
- splitVersionSpec(versionSpec) {
- return versionSpec.split(/-(.*)/s);
- }
-}
-exports["default"] = BasePrereleaseNodejs;
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tc = __importStar(__nccwpck_require__(7784));
+const semver_1 = __importDefault(__nccwpck_require__(5911));
+const base_distribution_1 = __importDefault(__nccwpck_require__(7));
+class BasePrereleaseNodejs extends base_distribution_1.default {
+ constructor(nodeInfo) {
+ super(nodeInfo);
+ }
+ findVersionInHostedToolCacheDirectory() {
+ let toolPath = '';
+ const localVersionPaths = tc
+ .findAllVersions('node', this.nodeInfo.arch)
+ .filter(i => {
+ const prerelease = semver_1.default.prerelease(i);
+ if (!prerelease) {
+ return false;
+ }
+ return prerelease[0].includes(this.distribution);
+ });
+ localVersionPaths.sort(semver_1.default.rcompare);
+ const localVersion = this.evaluateVersions(localVersionPaths);
+ if (localVersion) {
+ toolPath = tc.find('node', localVersion, this.nodeInfo.arch);
+ }
+ return toolPath;
+ }
+ validRange(versionSpec) {
+ let range;
+ const [raw, prerelease] = this.splitVersionSpec(versionSpec);
+ const isValidVersion = semver_1.default.valid(raw);
+ const rawVersion = (isValidVersion ? raw : semver_1.default.coerce(raw));
+ if (prerelease !== this.distribution) {
+ range = versionSpec;
+ }
+ else {
+ range = `${semver_1.default.validRange(`^${rawVersion}-${this.distribution}`)}-0`;
+ }
+ return { range, options: { includePrerelease: !isValidVersion } };
+ }
+ splitVersionSpec(versionSpec) {
+ return versionSpec.split(/-(.*)/s);
+ }
+}
+exports["default"] = BasePrereleaseNodejs;
/***/ }),
@@ -71613,275 +72287,275 @@ exports["default"] = BasePrereleaseNodejs;
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
- o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- __setModuleDefault(result, mod);
- return result;
-};
-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 __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-const tc = __importStar(__nccwpck_require__(7784));
-const hc = __importStar(__nccwpck_require__(9925));
-const core = __importStar(__nccwpck_require__(2186));
-const io = __importStar(__nccwpck_require__(7436));
-const semver_1 = __importDefault(__nccwpck_require__(5911));
-const assert = __importStar(__nccwpck_require__(9491));
-const path = __importStar(__nccwpck_require__(1017));
-const os_1 = __importDefault(__nccwpck_require__(2037));
-const fs_1 = __importDefault(__nccwpck_require__(7147));
-class BaseDistribution {
- constructor(nodeInfo) {
- this.nodeInfo = nodeInfo;
- this.osPlat = os_1.default.platform();
- this.httpClient = new hc.HttpClient('setup-node', [], {
- allowRetries: true,
- maxRetries: 3
- });
- }
- setupNodeJs() {
- return __awaiter(this, void 0, void 0, function* () {
- let nodeJsVersions;
- if (this.nodeInfo.checkLatest) {
- const evaluatedVersion = yield this.findVersionInDist(nodeJsVersions);
- this.nodeInfo.versionSpec = evaluatedVersion;
- }
- let toolPath = this.findVersionInHostedToolCacheDirectory();
- if (toolPath) {
- core.info(`Found in cache @ ${toolPath}`);
- }
- else {
- const evaluatedVersion = yield this.findVersionInDist(nodeJsVersions);
- const toolName = this.getNodejsDistInfo(evaluatedVersion);
- toolPath = yield this.downloadNodejs(toolName);
- }
- if (this.osPlat != 'win32') {
- toolPath = path.join(toolPath, 'bin');
- }
- core.addPath(toolPath);
- });
- }
- findVersionInDist(nodeJsVersions) {
- return __awaiter(this, void 0, void 0, function* () {
- if (!nodeJsVersions) {
- nodeJsVersions = yield this.getNodeJsVersions();
- }
- const versions = this.filterVersions(nodeJsVersions);
- const evaluatedVersion = this.evaluateVersions(versions);
- if (!evaluatedVersion) {
- throw new Error(`Unable to find Node version '${this.nodeInfo.versionSpec}' for platform ${this.osPlat} and architecture ${this.nodeInfo.arch}.`);
- }
- return evaluatedVersion;
- });
- }
- evaluateVersions(versions) {
- let version = '';
- const { range, options } = this.validRange(this.nodeInfo.versionSpec);
- core.debug(`evaluating ${versions.length} versions`);
- for (const potential of versions) {
- const satisfied = semver_1.default.satisfies(potential, range, options);
- if (satisfied) {
- version = potential;
- break;
- }
- }
- if (version) {
- core.debug(`matched: ${version}`);
- }
- else {
- core.debug('match not found');
- }
- return version;
- }
- findVersionInHostedToolCacheDirectory() {
- return tc.find('node', this.nodeInfo.versionSpec, this.translateArchToDistUrl(this.nodeInfo.arch));
- }
- getNodeJsVersions() {
- return __awaiter(this, void 0, void 0, function* () {
- const initialUrl = this.getDistributionUrl();
- const dataUrl = `${initialUrl}/index.json`;
- const response = yield this.httpClient.getJson(dataUrl);
- return response.result || [];
- });
- }
- getNodejsDistInfo(version) {
- const osArch = this.translateArchToDistUrl(this.nodeInfo.arch);
- version = semver_1.default.clean(version) || '';
- const fileName = this.osPlat == 'win32'
- ? `node-v${version}-win-${osArch}`
- : `node-v${version}-${this.osPlat}-${osArch}`;
- const urlFileName = this.osPlat == 'win32' ? `${fileName}.7z` : `${fileName}.tar.gz`;
- const initialUrl = this.getDistributionUrl();
- const url = `${initialUrl}/v${version}/${urlFileName}`;
- return {
- downloadUrl: url,
- resolvedVersion: version,
- arch: osArch,
- fileName: fileName
- };
- }
- downloadNodejs(info) {
- return __awaiter(this, void 0, void 0, function* () {
- let downloadPath = '';
- 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 &&
- this.osPlat == 'win32') {
- return yield this.acquireWindowsNodeFromFallbackLocation(info.resolvedVersion, info.arch);
- }
- throw err;
- }
- const toolPath = yield this.extractArchive(downloadPath, info);
- core.info('Done');
- return toolPath;
- });
- }
- validRange(versionSpec) {
- var _a;
- let options;
- const c = semver_1.default.clean(versionSpec) || '';
- const valid = (_a = semver_1.default.valid(c)) !== null && _a !== void 0 ? _a : versionSpec;
- return { range: valid, options };
- }
- acquireWindowsNodeFromFallbackLocation(version, arch = os_1.default.arch()) {
- return __awaiter(this, void 0, void 0, function* () {
- const initialUrl = this.getDistributionUrl();
- const osArch = this.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 = `${initialUrl}/v${version}/win-${osArch}/node.exe`;
- libUrl = `${initialUrl}/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 = `${initialUrl}/v${version}/node.exe`;
- libUrl = `${initialUrl}/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;
- }
- }
- const toolPath = yield tc.cacheDir(tempDir, 'node', version, arch);
- return toolPath;
- });
- }
- extractArchive(downloadPath, info) {
- return __awaiter(this, void 0, void 0, function* () {
- //
- // Extract
- //
- core.info('Extracting ...');
- let extPath;
- info = info || {}; // satisfy compiler, never null when reaches here
- if (this.osPlat == 'win32') {
- const _7zPath = path.join(__dirname, '../..', 'externals', '7zr.exe');
- extPath = yield tc.extract7z(downloadPath, undefined, _7zPath);
- // 7z extracts to folder matching file name
- const nestedPath = path.join(extPath, path.basename(info.fileName, '.7z'));
- if (fs_1.default.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 ...');
- const toolPath = yield tc.cacheDir(extPath, 'node', info.resolvedVersion, info.arch);
- return toolPath;
- });
- }
- getDistFileName() {
- const osArch = this.translateArchToDistUrl(this.nodeInfo.arch);
- // node offers a json list of versions
- let dataFileName;
- switch (this.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 '${this.osPlat}'`);
- }
- return dataFileName;
- }
- filterVersions(nodeJsVersions) {
- const versions = [];
- const dataFileName = this.getDistFileName();
- nodeJsVersions.forEach((nodeVersion) => {
- // ensure this version supports your os and platform
- if (nodeVersion.files.indexOf(dataFileName) >= 0) {
- versions.push(nodeVersion.version);
- }
- });
- return versions.sort(semver_1.default.rcompare);
- }
- translateArchToDistUrl(arch) {
- switch (arch) {
- case 'arm':
- return 'armv7l';
- default:
- return arch;
- }
- }
-}
-exports["default"] = BaseDistribution;
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+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 __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const tc = __importStar(__nccwpck_require__(7784));
+const hc = __importStar(__nccwpck_require__(9925));
+const core = __importStar(__nccwpck_require__(2186));
+const io = __importStar(__nccwpck_require__(7436));
+const semver_1 = __importDefault(__nccwpck_require__(5911));
+const assert = __importStar(__nccwpck_require__(9491));
+const path = __importStar(__nccwpck_require__(1017));
+const os_1 = __importDefault(__nccwpck_require__(2037));
+const fs_1 = __importDefault(__nccwpck_require__(7147));
+class BaseDistribution {
+ constructor(nodeInfo) {
+ this.nodeInfo = nodeInfo;
+ this.osPlat = os_1.default.platform();
+ this.httpClient = new hc.HttpClient('setup-node', [], {
+ allowRetries: true,
+ maxRetries: 3
+ });
+ }
+ setupNodeJs() {
+ return __awaiter(this, void 0, void 0, function* () {
+ let nodeJsVersions;
+ if (this.nodeInfo.checkLatest) {
+ const evaluatedVersion = yield this.findVersionInDist(nodeJsVersions);
+ this.nodeInfo.versionSpec = evaluatedVersion;
+ }
+ let toolPath = this.findVersionInHostedToolCacheDirectory();
+ if (toolPath) {
+ core.info(`Found in cache @ ${toolPath}`);
+ }
+ else {
+ const evaluatedVersion = yield this.findVersionInDist(nodeJsVersions);
+ const toolName = this.getNodejsDistInfo(evaluatedVersion);
+ toolPath = yield this.downloadNodejs(toolName);
+ }
+ if (this.osPlat != 'win32') {
+ toolPath = path.join(toolPath, 'bin');
+ }
+ core.addPath(toolPath);
+ });
+ }
+ findVersionInDist(nodeJsVersions) {
+ return __awaiter(this, void 0, void 0, function* () {
+ if (!nodeJsVersions) {
+ nodeJsVersions = yield this.getNodeJsVersions();
+ }
+ const versions = this.filterVersions(nodeJsVersions);
+ const evaluatedVersion = this.evaluateVersions(versions);
+ if (!evaluatedVersion) {
+ throw new Error(`Unable to find Node version '${this.nodeInfo.versionSpec}' for platform ${this.osPlat} and architecture ${this.nodeInfo.arch}.`);
+ }
+ return evaluatedVersion;
+ });
+ }
+ evaluateVersions(versions) {
+ let version = '';
+ const { range, options } = this.validRange(this.nodeInfo.versionSpec);
+ core.debug(`evaluating ${versions.length} versions`);
+ for (const potential of versions) {
+ const satisfied = semver_1.default.satisfies(potential, range, options);
+ if (satisfied) {
+ version = potential;
+ break;
+ }
+ }
+ if (version) {
+ core.debug(`matched: ${version}`);
+ }
+ else {
+ core.debug('match not found');
+ }
+ return version;
+ }
+ findVersionInHostedToolCacheDirectory() {
+ return tc.find('node', this.nodeInfo.versionSpec, this.translateArchToDistUrl(this.nodeInfo.arch));
+ }
+ getNodeJsVersions() {
+ return __awaiter(this, void 0, void 0, function* () {
+ const initialUrl = this.getDistributionUrl();
+ const dataUrl = `${initialUrl}/index.json`;
+ const response = yield this.httpClient.getJson(dataUrl);
+ return response.result || [];
+ });
+ }
+ getNodejsDistInfo(version) {
+ const osArch = this.translateArchToDistUrl(this.nodeInfo.arch);
+ version = semver_1.default.clean(version) || '';
+ const fileName = this.osPlat == 'win32'
+ ? `node-v${version}-win-${osArch}`
+ : `node-v${version}-${this.osPlat}-${osArch}`;
+ const urlFileName = this.osPlat == 'win32' ? `${fileName}.7z` : `${fileName}.tar.gz`;
+ const initialUrl = this.getDistributionUrl();
+ const url = `${initialUrl}/v${version}/${urlFileName}`;
+ return {
+ downloadUrl: url,
+ resolvedVersion: version,
+ arch: osArch,
+ fileName: fileName
+ };
+ }
+ downloadNodejs(info) {
+ return __awaiter(this, void 0, void 0, function* () {
+ let downloadPath = '';
+ 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 &&
+ this.osPlat == 'win32') {
+ return yield this.acquireWindowsNodeFromFallbackLocation(info.resolvedVersion, info.arch);
+ }
+ throw err;
+ }
+ const toolPath = yield this.extractArchive(downloadPath, info);
+ core.info('Done');
+ return toolPath;
+ });
+ }
+ validRange(versionSpec) {
+ var _a;
+ let options;
+ const c = semver_1.default.clean(versionSpec) || '';
+ const valid = (_a = semver_1.default.valid(c)) !== null && _a !== void 0 ? _a : versionSpec;
+ return { range: valid, options };
+ }
+ acquireWindowsNodeFromFallbackLocation(version, arch = os_1.default.arch()) {
+ return __awaiter(this, void 0, void 0, function* () {
+ const initialUrl = this.getDistributionUrl();
+ const osArch = this.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 = `${initialUrl}/v${version}/win-${osArch}/node.exe`;
+ libUrl = `${initialUrl}/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 = `${initialUrl}/v${version}/node.exe`;
+ libUrl = `${initialUrl}/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;
+ }
+ }
+ const toolPath = yield tc.cacheDir(tempDir, 'node', version, arch);
+ return toolPath;
+ });
+ }
+ extractArchive(downloadPath, info) {
+ return __awaiter(this, void 0, void 0, function* () {
+ //
+ // Extract
+ //
+ core.info('Extracting ...');
+ let extPath;
+ info = info || {}; // satisfy compiler, never null when reaches here
+ if (this.osPlat == 'win32') {
+ const _7zPath = path.join(__dirname, '../..', 'externals', '7zr.exe');
+ extPath = yield tc.extract7z(downloadPath, undefined, _7zPath);
+ // 7z extracts to folder matching file name
+ const nestedPath = path.join(extPath, path.basename(info.fileName, '.7z'));
+ if (fs_1.default.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 ...');
+ const toolPath = yield tc.cacheDir(extPath, 'node', info.resolvedVersion, info.arch);
+ return toolPath;
+ });
+ }
+ getDistFileName() {
+ const osArch = this.translateArchToDistUrl(this.nodeInfo.arch);
+ // node offers a json list of versions
+ let dataFileName;
+ switch (this.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 '${this.osPlat}'`);
+ }
+ return dataFileName;
+ }
+ filterVersions(nodeJsVersions) {
+ const versions = [];
+ const dataFileName = this.getDistFileName();
+ nodeJsVersions.forEach((nodeVersion) => {
+ // ensure this version supports your os and platform
+ if (nodeVersion.files.indexOf(dataFileName) >= 0) {
+ versions.push(nodeVersion.version);
+ }
+ });
+ return versions.sort(semver_1.default.rcompare);
+ }
+ translateArchToDistUrl(arch) {
+ switch (arch) {
+ case 'arm':
+ return 'armv7l';
+ default:
+ return arch;
+ }
+ }
+}
+exports["default"] = BaseDistribution;
/***/ }),
@@ -71890,41 +72564,41 @@ exports["default"] = BaseDistribution;
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
-
-var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.getNodejsDistribution = void 0;
-const nightly_builds_1 = __importDefault(__nccwpck_require__(7127));
-const official_builds_1 = __importDefault(__nccwpck_require__(7854));
-const rc_builds_1 = __importDefault(__nccwpck_require__(8837));
-const canary_builds_1 = __importDefault(__nccwpck_require__(969));
-var Distributions;
-(function (Distributions) {
- Distributions["DEFAULT"] = "";
- Distributions["CANARY"] = "v8-canary";
- Distributions["NIGHTLY"] = "nightly";
- Distributions["RC"] = "rc";
-})(Distributions || (Distributions = {}));
-function getNodejsDistribution(installerOptions) {
- const versionSpec = installerOptions.versionSpec;
- let distribution;
- if (versionSpec.includes(Distributions.NIGHTLY)) {
- distribution = new nightly_builds_1.default(installerOptions);
- }
- else if (versionSpec.includes(Distributions.CANARY)) {
- distribution = new canary_builds_1.default(installerOptions);
- }
- else if (versionSpec.includes(Distributions.RC)) {
- distribution = new rc_builds_1.default(installerOptions);
- }
- else {
- distribution = new official_builds_1.default(installerOptions);
- }
- return distribution;
-}
-exports.getNodejsDistribution = getNodejsDistribution;
+
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.getNodejsDistribution = void 0;
+const nightly_builds_1 = __importDefault(__nccwpck_require__(7127));
+const official_builds_1 = __importDefault(__nccwpck_require__(7854));
+const rc_builds_1 = __importDefault(__nccwpck_require__(8837));
+const canary_builds_1 = __importDefault(__nccwpck_require__(969));
+var Distributions;
+(function (Distributions) {
+ Distributions["DEFAULT"] = "";
+ Distributions["CANARY"] = "v8-canary";
+ Distributions["NIGHTLY"] = "nightly";
+ Distributions["RC"] = "rc";
+})(Distributions || (Distributions = {}));
+function getNodejsDistribution(installerOptions) {
+ const versionSpec = installerOptions.versionSpec;
+ let distribution;
+ if (versionSpec.includes(Distributions.NIGHTLY)) {
+ distribution = new nightly_builds_1.default(installerOptions);
+ }
+ else if (versionSpec.includes(Distributions.CANARY)) {
+ distribution = new canary_builds_1.default(installerOptions);
+ }
+ else if (versionSpec.includes(Distributions.RC)) {
+ distribution = new rc_builds_1.default(installerOptions);
+ }
+ else {
+ distribution = new official_builds_1.default(installerOptions);
+ }
+ return distribution;
+}
+exports.getNodejsDistribution = getNodejsDistribution;
/***/ }),
@@ -71933,22 +72607,22 @@ exports.getNodejsDistribution = getNodejsDistribution;
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
-
-var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-const base_distribution_prerelease_1 = __importDefault(__nccwpck_require__(957));
-class NightlyNodejs extends base_distribution_prerelease_1.default {
- constructor(nodeInfo) {
- super(nodeInfo);
- this.distribution = 'nightly';
- }
- getDistributionUrl() {
- return 'https://nodejs.org/download/nightly';
- }
-}
-exports["default"] = NightlyNodejs;
+
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const base_distribution_prerelease_1 = __importDefault(__nccwpck_require__(957));
+class NightlyNodejs extends base_distribution_prerelease_1.default {
+ constructor(nodeInfo) {
+ super(nodeInfo);
+ this.distribution = 'nightly';
+ }
+ getDistributionUrl() {
+ return 'https://nodejs.org/download/nightly';
+ }
+}
+exports["default"] = NightlyNodejs;
/***/ }),
@@ -71957,203 +72631,203 @@ exports["default"] = NightlyNodejs;
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
- o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- __setModuleDefault(result, mod);
- return result;
-};
-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 __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-const core = __importStar(__nccwpck_require__(2186));
-const tc = __importStar(__nccwpck_require__(7784));
-const path_1 = __importDefault(__nccwpck_require__(1017));
-const base_distribution_1 = __importDefault(__nccwpck_require__(7));
-class OfficialBuilds extends base_distribution_1.default {
- constructor(nodeInfo) {
- super(nodeInfo);
- }
- setupNodeJs() {
- return __awaiter(this, void 0, void 0, function* () {
- let manifest;
- let nodeJsVersions;
- const osArch = this.translateArchToDistUrl(this.nodeInfo.arch);
- if (this.isLtsAlias(this.nodeInfo.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 this.getManifest();
- this.nodeInfo.versionSpec = this.resolveLtsAliasFromManifest(this.nodeInfo.versionSpec, this.nodeInfo.stable, manifest);
- }
- if (this.isLatestSyntax(this.nodeInfo.versionSpec)) {
- nodeJsVersions = yield this.getNodeJsVersions();
- const versions = this.filterVersions(nodeJsVersions);
- this.nodeInfo.versionSpec = this.evaluateVersions(versions);
- core.info('getting latest node version...');
- }
- if (this.nodeInfo.checkLatest) {
- core.info('Attempt to resolve the latest version from manifest...');
- const resolvedVersion = yield this.resolveVersionFromManifest(this.nodeInfo.versionSpec, this.nodeInfo.stable, osArch, manifest);
- if (resolvedVersion) {
- this.nodeInfo.versionSpec = resolvedVersion;
- core.info(`Resolved as '${resolvedVersion}'`);
- }
- else {
- core.info(`Failed to resolve version ${this.nodeInfo.versionSpec} from manifest`);
- }
- }
- let toolPath = this.findVersionInHostedToolCacheDirectory();
- if (toolPath) {
- core.info(`Found in cache @ ${toolPath}`);
- }
- else {
- let downloadPath = '';
- try {
- core.info(`Attempting to download ${this.nodeInfo.versionSpec}...`);
- const versionInfo = yield this.getInfoFromManifest(this.nodeInfo.versionSpec, this.nodeInfo.stable, osArch, manifest);
- if (versionInfo) {
- core.info(`Acquiring ${versionInfo.resolvedVersion} - ${versionInfo.arch} from ${versionInfo.downloadUrl}`);
- downloadPath = yield tc.downloadTool(versionInfo.downloadUrl, undefined, this.nodeInfo.auth);
- if (downloadPath) {
- toolPath = yield this.extractArchive(downloadPath, versionInfo);
- }
- }
- 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');
- }
- if (!toolPath) {
- const nodeJsVersions = yield this.getNodeJsVersions();
- const versions = this.filterVersions(nodeJsVersions);
- const evaluatedVersion = this.evaluateVersions(versions);
- if (!evaluatedVersion) {
- throw new Error(`Unable to find Node version '${this.nodeInfo.versionSpec}' for platform ${this.osPlat} and architecture ${this.nodeInfo.arch}.`);
- }
- const toolName = this.getNodejsDistInfo(evaluatedVersion);
- toolPath = yield this.downloadNodejs(toolName);
- }
- }
- if (this.osPlat != 'win32') {
- toolPath = path_1.default.join(toolPath, 'bin');
- }
- core.addPath(toolPath);
- });
- }
- evaluateVersions(versions) {
- let version = '';
- if (this.isLatestSyntax(this.nodeInfo.versionSpec)) {
- core.info(`getting latest node version...`);
- return versions[0];
- }
- version = super.evaluateVersions(versions);
- return version;
- }
- getDistributionUrl() {
- return `https://nodejs.org/dist`;
- }
- getManifest() {
- core.debug('Getting manifest from actions/node-versions@main');
- return tc.getManifestFromRepo('actions', 'node-versions', this.nodeInfo.auth, 'main');
- }
- 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/`, `lts/*`, and `lts/-n`. Where asterisk means highest possible LTS and -n means the nth-highest.
- const n = Number(alias);
- const aliases = Object.fromEntries(manifest
- .filter(x => x.lts && x.stable === stable)
- .map(x => [x.lts.toLowerCase(), x])
- .reverse());
- const numbered = Object.values(aliases);
- const release = alias === '*'
- ? numbered[numbered.length - 1]
- : n < 0
- ? numbered[numbered.length - 1 + n]
- : aliases[alias];
- 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];
- }
- resolveVersionFromManifest(versionSpec, stable, osArch, manifest) {
- return __awaiter(this, void 0, void 0, function* () {
- try {
- const info = yield this.getInfoFromManifest(versionSpec, stable, 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);
- }
- });
- }
- getInfoFromManifest(versionSpec, stable, osArch, manifest) {
- return __awaiter(this, void 0, void 0, function* () {
- let info = null;
- if (!manifest) {
- core.debug('No manifest cached');
- manifest = yield this.getManifest();
- }
- 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;
- });
- }
- isLtsAlias(versionSpec) {
- return versionSpec.startsWith('lts/');
- }
- isLatestSyntax(versionSpec) {
- return ['current', 'latest', 'node'].includes(versionSpec);
- }
-}
-exports["default"] = OfficialBuilds;
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+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 __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const core = __importStar(__nccwpck_require__(2186));
+const tc = __importStar(__nccwpck_require__(7784));
+const path_1 = __importDefault(__nccwpck_require__(1017));
+const base_distribution_1 = __importDefault(__nccwpck_require__(7));
+class OfficialBuilds extends base_distribution_1.default {
+ constructor(nodeInfo) {
+ super(nodeInfo);
+ }
+ setupNodeJs() {
+ return __awaiter(this, void 0, void 0, function* () {
+ let manifest;
+ let nodeJsVersions;
+ const osArch = this.translateArchToDistUrl(this.nodeInfo.arch);
+ if (this.isLtsAlias(this.nodeInfo.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 this.getManifest();
+ this.nodeInfo.versionSpec = this.resolveLtsAliasFromManifest(this.nodeInfo.versionSpec, this.nodeInfo.stable, manifest);
+ }
+ if (this.isLatestSyntax(this.nodeInfo.versionSpec)) {
+ nodeJsVersions = yield this.getNodeJsVersions();
+ const versions = this.filterVersions(nodeJsVersions);
+ this.nodeInfo.versionSpec = this.evaluateVersions(versions);
+ core.info('getting latest node version...');
+ }
+ if (this.nodeInfo.checkLatest) {
+ core.info('Attempt to resolve the latest version from manifest...');
+ const resolvedVersion = yield this.resolveVersionFromManifest(this.nodeInfo.versionSpec, this.nodeInfo.stable, osArch, manifest);
+ if (resolvedVersion) {
+ this.nodeInfo.versionSpec = resolvedVersion;
+ core.info(`Resolved as '${resolvedVersion}'`);
+ }
+ else {
+ core.info(`Failed to resolve version ${this.nodeInfo.versionSpec} from manifest`);
+ }
+ }
+ let toolPath = this.findVersionInHostedToolCacheDirectory();
+ if (toolPath) {
+ core.info(`Found in cache @ ${toolPath}`);
+ }
+ else {
+ let downloadPath = '';
+ try {
+ core.info(`Attempting to download ${this.nodeInfo.versionSpec}...`);
+ const versionInfo = yield this.getInfoFromManifest(this.nodeInfo.versionSpec, this.nodeInfo.stable, osArch, manifest);
+ if (versionInfo) {
+ core.info(`Acquiring ${versionInfo.resolvedVersion} - ${versionInfo.arch} from ${versionInfo.downloadUrl}`);
+ downloadPath = yield tc.downloadTool(versionInfo.downloadUrl, undefined, this.nodeInfo.auth);
+ if (downloadPath) {
+ toolPath = yield this.extractArchive(downloadPath, versionInfo);
+ }
+ }
+ 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');
+ }
+ if (!toolPath) {
+ const nodeJsVersions = yield this.getNodeJsVersions();
+ const versions = this.filterVersions(nodeJsVersions);
+ const evaluatedVersion = this.evaluateVersions(versions);
+ if (!evaluatedVersion) {
+ throw new Error(`Unable to find Node version '${this.nodeInfo.versionSpec}' for platform ${this.osPlat} and architecture ${this.nodeInfo.arch}.`);
+ }
+ const toolName = this.getNodejsDistInfo(evaluatedVersion);
+ toolPath = yield this.downloadNodejs(toolName);
+ }
+ }
+ if (this.osPlat != 'win32') {
+ toolPath = path_1.default.join(toolPath, 'bin');
+ }
+ core.addPath(toolPath);
+ });
+ }
+ evaluateVersions(versions) {
+ let version = '';
+ if (this.isLatestSyntax(this.nodeInfo.versionSpec)) {
+ core.info(`getting latest node version...`);
+ return versions[0];
+ }
+ version = super.evaluateVersions(versions);
+ return version;
+ }
+ getDistributionUrl() {
+ return `https://nodejs.org/dist`;
+ }
+ getManifest() {
+ core.debug('Getting manifest from actions/node-versions@main');
+ return tc.getManifestFromRepo('actions', 'node-versions', this.nodeInfo.auth, 'main');
+ }
+ 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/`, `lts/*`, and `lts/-n`. Where asterisk means highest possible LTS and -n means the nth-highest.
+ const n = Number(alias);
+ const aliases = Object.fromEntries(manifest
+ .filter(x => x.lts && x.stable === stable)
+ .map(x => [x.lts.toLowerCase(), x])
+ .reverse());
+ const numbered = Object.values(aliases);
+ const release = alias === '*'
+ ? numbered[numbered.length - 1]
+ : n < 0
+ ? numbered[numbered.length - 1 + n]
+ : aliases[alias];
+ 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];
+ }
+ resolveVersionFromManifest(versionSpec, stable, osArch, manifest) {
+ return __awaiter(this, void 0, void 0, function* () {
+ try {
+ const info = yield this.getInfoFromManifest(versionSpec, stable, 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);
+ }
+ });
+ }
+ getInfoFromManifest(versionSpec, stable, osArch, manifest) {
+ return __awaiter(this, void 0, void 0, function* () {
+ let info = null;
+ if (!manifest) {
+ core.debug('No manifest cached');
+ manifest = yield this.getManifest();
+ }
+ 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;
+ });
+ }
+ isLtsAlias(versionSpec) {
+ return versionSpec.startsWith('lts/');
+ }
+ isLatestSyntax(versionSpec) {
+ return ['current', 'latest', 'node'].includes(versionSpec);
+ }
+}
+exports["default"] = OfficialBuilds;
/***/ }),
@@ -72162,21 +72836,21 @@ exports["default"] = OfficialBuilds;
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
-
-var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-const base_distribution_1 = __importDefault(__nccwpck_require__(7));
-class RcBuild extends base_distribution_1.default {
- constructor(nodeInfo) {
- super(nodeInfo);
- }
- getDistributionUrl() {
- return 'https://nodejs.org/download/rc';
- }
-}
-exports["default"] = RcBuild;
+
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const base_distribution_1 = __importDefault(__nccwpck_require__(7));
+class RcBuild extends base_distribution_1.default {
+ constructor(nodeInfo) {
+ super(nodeInfo);
+ }
+ getDistributionUrl() {
+ return 'https://nodejs.org/download/rc';
+ }
+}
+exports["default"] = RcBuild;
/***/ }),
@@ -72185,22 +72859,22 @@ exports["default"] = RcBuild;
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
-
-var __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-const base_distribution_prerelease_1 = __importDefault(__nccwpck_require__(957));
-class CanaryBuild extends base_distribution_prerelease_1.default {
- constructor(nodeInfo) {
- super(nodeInfo);
- this.distribution = 'v8-canary';
- }
- getDistributionUrl() {
- return 'https://nodejs.org/download/v8-canary';
- }
-}
-exports["default"] = CanaryBuild;
+
+var __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const base_distribution_prerelease_1 = __importDefault(__nccwpck_require__(957));
+class CanaryBuild extends base_distribution_prerelease_1.default {
+ constructor(nodeInfo) {
+ super(nodeInfo);
+ this.distribution = 'v8-canary';
+ }
+ getDistributionUrl() {
+ return 'https://nodejs.org/download/v8-canary';
+ }
+}
+exports["default"] = CanaryBuild;
/***/ }),
@@ -72209,124 +72883,124 @@ exports["default"] = CanaryBuild;
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
- o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- __setModuleDefault(result, mod);
- return result;
-};
-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 __importDefault = (this && this.__importDefault) || function (mod) {
- return (mod && mod.__esModule) ? mod : { "default": mod };
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.run = void 0;
-const core = __importStar(__nccwpck_require__(2186));
-const fs_1 = __importDefault(__nccwpck_require__(7147));
-const os_1 = __importDefault(__nccwpck_require__(2037));
-const auth = __importStar(__nccwpck_require__(7573));
-const path = __importStar(__nccwpck_require__(1017));
-const cache_restore_1 = __nccwpck_require__(9517);
-const cache_utils_1 = __nccwpck_require__(1678);
-const installer_factory_1 = __nccwpck_require__(5617);
-const util_1 = __nccwpck_require__(2629);
-const constants_1 = __nccwpck_require__(9042);
-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...
- //
- const version = resolveVersionInput();
- 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_1.default.arch();
- }
- if (version) {
- const token = core.getInput('token');
- const auth = !token ? undefined : `token ${token}`;
- const stable = (core.getInput('stable') || 'true').toUpperCase() === 'TRUE';
- const checkLatest = (core.getInput('check-latest') || 'false').toUpperCase() === 'TRUE';
- const nodejsInfo = {
- versionSpec: version,
- checkLatest,
- auth,
- stable,
- arch
- };
- const nodeDistribution = installer_factory_1.getNodejsDistribution(nodejsInfo);
- yield nodeDistribution.setupNodeJs();
- }
- yield util_1.printEnvDetailsAndSetOutput();
- const registryUrl = core.getInput('registry-url');
- const alwaysAuth = core.getInput('always-auth');
- if (registryUrl) {
- auth.configAuthentication(registryUrl, alwaysAuth);
- }
- if (cache && cache_utils_1.isCacheFeatureAvailable()) {
- core.saveState(constants_1.State.CachePackageManager, cache);
- 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 (err) {
- core.setFailed(err.message);
- }
- });
-}
-exports.run = run;
-function resolveVersionInput() {
- let version = core.getInput('node-version');
- const versionFileInput = core.getInput('node-version-file');
- if (version && versionFileInput) {
- core.warning('Both node-version and node-version-file inputs are specified, only node-version will be used');
- }
- if (version) {
- return version;
- }
- if (versionFileInput) {
- const versionFilePath = path.join(process.env.GITHUB_WORKSPACE, versionFileInput);
- if (!fs_1.default.existsSync(versionFilePath)) {
- throw new Error(`The specified node version file at: ${versionFilePath} does not exist`);
- }
- version = util_1.parseNodeVersionFile(fs_1.default.readFileSync(versionFilePath, 'utf8'));
- core.info(`Resolved ${versionFileInput} as ${version}`);
- }
- return version;
-}
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+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 __importDefault = (this && this.__importDefault) || function (mod) {
+ return (mod && mod.__esModule) ? mod : { "default": mod };
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.run = void 0;
+const core = __importStar(__nccwpck_require__(2186));
+const fs_1 = __importDefault(__nccwpck_require__(7147));
+const os_1 = __importDefault(__nccwpck_require__(2037));
+const auth = __importStar(__nccwpck_require__(7573));
+const path = __importStar(__nccwpck_require__(1017));
+const cache_restore_1 = __nccwpck_require__(9517);
+const cache_utils_1 = __nccwpck_require__(1678);
+const installer_factory_1 = __nccwpck_require__(5617);
+const util_1 = __nccwpck_require__(2629);
+const constants_1 = __nccwpck_require__(9042);
+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...
+ //
+ const version = resolveVersionInput();
+ 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_1.default.arch();
+ }
+ if (version) {
+ const token = core.getInput('token');
+ const auth = !token ? undefined : `token ${token}`;
+ const stable = (core.getInput('stable') || 'true').toUpperCase() === 'TRUE';
+ const checkLatest = (core.getInput('check-latest') || 'false').toUpperCase() === 'TRUE';
+ const nodejsInfo = {
+ versionSpec: version,
+ checkLatest,
+ auth,
+ stable,
+ arch
+ };
+ const nodeDistribution = installer_factory_1.getNodejsDistribution(nodejsInfo);
+ yield nodeDistribution.setupNodeJs();
+ }
+ yield util_1.printEnvDetailsAndSetOutput();
+ const registryUrl = core.getInput('registry-url');
+ const alwaysAuth = core.getInput('always-auth');
+ if (registryUrl) {
+ auth.configAuthentication(registryUrl, alwaysAuth);
+ }
+ if (cache && cache_utils_1.isCacheFeatureAvailable()) {
+ core.saveState(constants_1.State.CachePackageManager, cache);
+ 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 (err) {
+ core.setFailed(err.message);
+ }
+ });
+}
+exports.run = run;
+function resolveVersionInput() {
+ let version = core.getInput('node-version');
+ const versionFileInput = core.getInput('node-version-file');
+ if (version && versionFileInput) {
+ core.warning('Both node-version and node-version-file inputs are specified, only node-version will be used');
+ }
+ if (version) {
+ return version;
+ }
+ if (versionFileInput) {
+ const versionFilePath = path.join(process.env.GITHUB_WORKSPACE, versionFileInput);
+ if (!fs_1.default.existsSync(versionFilePath)) {
+ throw new Error(`The specified node version file at: ${versionFilePath} does not exist`);
+ }
+ version = util_1.parseNodeVersionFile(fs_1.default.readFileSync(versionFilePath, 'utf8'));
+ core.info(`Resolved ${versionFileInput} as ${version}`);
+ }
+ return version;
+}
/***/ }),
@@ -72335,108 +73009,108 @@ function resolveVersionInput() {
/***/ (function(__unused_webpack_module, exports, __nccwpck_require__) {
"use strict";
-
-var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
-}) : (function(o, m, k, k2) {
- if (k2 === undefined) k2 = k;
- o[k2] = m[k];
-}));
-var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
- Object.defineProperty(o, "default", { enumerable: true, value: v });
-}) : function(o, v) {
- o["default"] = v;
-});
-var __importStar = (this && this.__importStar) || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
- __setModuleDefault(result, mod);
- return result;
-};
-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());
- });
-};
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-exports.unique = exports.printEnvDetailsAndSetOutput = exports.parseNodeVersionFile = void 0;
-const core = __importStar(__nccwpck_require__(2186));
-const exec = __importStar(__nccwpck_require__(1514));
-function parseNodeVersionFile(contents) {
- var _a, _b, _c;
- let nodeVersion;
- // Try parsing the file as an NPM `package.json` file.
- try {
- nodeVersion = (_a = JSON.parse(contents).volta) === null || _a === void 0 ? void 0 : _a.node;
- if (!nodeVersion)
- nodeVersion = (_b = JSON.parse(contents).engines) === null || _b === void 0 ? void 0 : _b.node;
- }
- catch (_d) {
- core.info('Node version file is not JSON file');
- }
- if (!nodeVersion) {
- const found = contents.match(/^(?:node(js)?\s+)?v?(?[^\s]+)$/m);
- nodeVersion = (_c = found === null || found === void 0 ? void 0 : found.groups) === null || _c === void 0 ? void 0 : _c.version;
- }
- // In the case of an unknown format,
- // return as is and evaluate the version separately.
- if (!nodeVersion)
- nodeVersion = contents.trim();
- return nodeVersion;
-}
-exports.parseNodeVersionFile = parseNodeVersionFile;
-function printEnvDetailsAndSetOutput() {
- return __awaiter(this, void 0, void 0, function* () {
- core.startGroup('Environment details');
- const promises = ['node', 'npm', 'yarn'].map((tool) => __awaiter(this, void 0, void 0, function* () {
- const output = yield getToolVersion(tool, ['--version']);
- return { tool, output };
- }));
- const tools = yield Promise.all(promises);
- tools.forEach(({ tool, output }) => {
- if (tool === 'node') {
- core.setOutput(`${tool}-version`, output);
- }
- core.info(`${tool}: ${output}`);
- });
- core.endGroup();
- });
-}
-exports.printEnvDetailsAndSetOutput = printEnvDetailsAndSetOutput;
-function getToolVersion(tool, options) {
- return __awaiter(this, void 0, void 0, function* () {
- try {
- const { stdout, stderr, exitCode } = yield exec.getExecOutput(tool, options, {
- ignoreReturnCode: true,
- silent: true
- });
- if (exitCode > 0) {
- core.info(`[warning]${stderr}`);
- return '';
- }
- return stdout.trim();
- }
- catch (err) {
- return '';
- }
- });
-}
-const unique = () => {
- const encountered = new Set();
- return (value) => {
- if (encountered.has(value))
- return false;
- encountered.add(value);
- return true;
- };
-};
-exports.unique = unique;
+
+var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
+}) : (function(o, m, k, k2) {
+ if (k2 === undefined) k2 = k;
+ o[k2] = m[k];
+}));
+var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
+}) : function(o, v) {
+ o["default"] = v;
+});
+var __importStar = (this && this.__importStar) || function (mod) {
+ if (mod && mod.__esModule) return mod;
+ var result = {};
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
+ __setModuleDefault(result, mod);
+ return result;
+};
+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());
+ });
+};
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+exports.unique = exports.printEnvDetailsAndSetOutput = exports.parseNodeVersionFile = void 0;
+const core = __importStar(__nccwpck_require__(2186));
+const exec = __importStar(__nccwpck_require__(1514));
+function parseNodeVersionFile(contents) {
+ var _a, _b, _c;
+ let nodeVersion;
+ // Try parsing the file as an NPM `package.json` file.
+ try {
+ nodeVersion = (_a = JSON.parse(contents).volta) === null || _a === void 0 ? void 0 : _a.node;
+ if (!nodeVersion)
+ nodeVersion = (_b = JSON.parse(contents).engines) === null || _b === void 0 ? void 0 : _b.node;
+ }
+ catch (_d) {
+ core.info('Node version file is not JSON file');
+ }
+ if (!nodeVersion) {
+ const found = contents.match(/^(?:node(js)?\s+)?v?(?[^\s]+)$/m);
+ nodeVersion = (_c = found === null || found === void 0 ? void 0 : found.groups) === null || _c === void 0 ? void 0 : _c.version;
+ }
+ // In the case of an unknown format,
+ // return as is and evaluate the version separately.
+ if (!nodeVersion)
+ nodeVersion = contents.trim();
+ return nodeVersion;
+}
+exports.parseNodeVersionFile = parseNodeVersionFile;
+function printEnvDetailsAndSetOutput() {
+ return __awaiter(this, void 0, void 0, function* () {
+ core.startGroup('Environment details');
+ const promises = ['node', 'npm', 'yarn'].map((tool) => __awaiter(this, void 0, void 0, function* () {
+ const output = yield getToolVersion(tool, ['--version']);
+ return { tool, output };
+ }));
+ const tools = yield Promise.all(promises);
+ tools.forEach(({ tool, output }) => {
+ if (tool === 'node') {
+ core.setOutput(`${tool}-version`, output);
+ }
+ core.info(`${tool}: ${output}`);
+ });
+ core.endGroup();
+ });
+}
+exports.printEnvDetailsAndSetOutput = printEnvDetailsAndSetOutput;
+function getToolVersion(tool, options) {
+ return __awaiter(this, void 0, void 0, function* () {
+ try {
+ const { stdout, stderr, exitCode } = yield exec.getExecOutput(tool, options, {
+ ignoreReturnCode: true,
+ silent: true
+ });
+ if (exitCode > 0) {
+ core.info(`[warning]${stderr}`);
+ return '';
+ }
+ return stdout.trim();
+ }
+ catch (err) {
+ return '';
+ }
+ });
+}
+const unique = () => {
+ const encountered = new Set();
+ return (value) => {
+ if (encountered.has(value))
+ return false;
+ encountered.add(value);
+ return true;
+ };
+};
+exports.unique = unique;
/***/ }),
@@ -72684,10 +73358,10 @@ var __webpack_exports__ = {};
(() => {
"use strict";
var exports = __webpack_exports__;
-
-Object.defineProperty(exports, "__esModule", ({ value: true }));
-const main_1 = __nccwpck_require__(399);
-main_1.run();
+
+Object.defineProperty(exports, "__esModule", ({ value: true }));
+const main_1 = __nccwpck_require__(399);
+main_1.run();
})();
diff --git a/package-lock.json b/package-lock.json
index 3259eb23..87585ba5 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -17,10 +17,12 @@
"@actions/http-client": "^1.0.11",
"@actions/io": "^1.0.2",
"@actions/tool-cache": "^1.5.4",
+ "lodash.memoize": "^4.1.2",
"semver": "^6.3.1"
},
"devDependencies": {
"@types/jest": "^27.0.2",
+ "@types/lodash.memoize": "^4.1.7",
"@types/node": "^16.11.25",
"@types/semver": "^6.0.0",
"@typescript-eslint/eslint-plugin": "^5.54.0",
@@ -1648,6 +1650,21 @@
"integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
"dev": true
},
+ "node_modules/@types/lodash": {
+ "version": "4.14.197",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.197.tgz",
+ "integrity": "sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g==",
+ "dev": true
+ },
+ "node_modules/@types/lodash.memoize": {
+ "version": "4.1.7",
+ "resolved": "https://registry.npmjs.org/@types/lodash.memoize/-/lodash.memoize-4.1.7.tgz",
+ "integrity": "sha512-lGN7WeO4vO6sICVpf041Q7BX/9k1Y24Zo3FY0aUezr1QlKznpjzsDk3T3wvH8ofYzoK0QupN9TWcFAFZlyPwQQ==",
+ "dev": true,
+ "dependencies": {
+ "@types/lodash": "*"
+ }
+ },
"node_modules/@types/node": {
"version": "16.11.25",
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.25.tgz",
@@ -4972,6 +4989,11 @@
"resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
"integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk="
},
+ "node_modules/lodash.memoize": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+ "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag=="
+ },
"node_modules/lodash.merge": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
@@ -7780,6 +7802,21 @@
"integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==",
"dev": true
},
+ "@types/lodash": {
+ "version": "4.14.197",
+ "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.197.tgz",
+ "integrity": "sha512-BMVOiWs0uNxHVlHBgzTIqJYmj+PgCo4euloGF+5m4okL3rEYzM2EEv78mw8zWSMM57dM7kVIgJ2QDvwHSoCI5g==",
+ "dev": true
+ },
+ "@types/lodash.memoize": {
+ "version": "4.1.7",
+ "resolved": "https://registry.npmjs.org/@types/lodash.memoize/-/lodash.memoize-4.1.7.tgz",
+ "integrity": "sha512-lGN7WeO4vO6sICVpf041Q7BX/9k1Y24Zo3FY0aUezr1QlKznpjzsDk3T3wvH8ofYzoK0QupN9TWcFAFZlyPwQQ==",
+ "dev": true,
+ "requires": {
+ "@types/lodash": "*"
+ }
+ },
"@types/node": {
"version": "16.11.25",
"resolved": "https://registry.npmjs.org/@types/node/-/node-16.11.25.tgz",
@@ -10244,6 +10281,11 @@
"resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
"integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk="
},
+ "lodash.memoize": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz",
+ "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag=="
+ },
"lodash.merge": {
"version": "4.6.2",
"resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz",
diff --git a/package.json b/package.json
index 9284818b..08262f9b 100644
--- a/package.json
+++ b/package.json
@@ -33,10 +33,12 @@
"@actions/http-client": "^1.0.11",
"@actions/io": "^1.0.2",
"@actions/tool-cache": "^1.5.4",
+ "lodash.memoize": "^4.1.2",
"semver": "^6.3.1"
},
"devDependencies": {
"@types/jest": "^27.0.2",
+ "@types/lodash.memoize": "^4.1.7",
"@types/node": "^16.11.25",
"@types/semver": "^6.0.0",
"@typescript-eslint/eslint-plugin": "^5.54.0",
diff --git a/src/cache-utils.ts b/src/cache-utils.ts
index 7066d733..9f8d0fca 100644
--- a/src/cache-utils.ts
+++ b/src/cache-utils.ts
@@ -2,6 +2,7 @@ import * as core from '@actions/core';
import * as exec from '@actions/exec';
import * as cache from '@actions/cache';
import * as glob from '@actions/glob';
+import memoize from 'lodash.memoize';
import path from 'path';
import fs from 'fs';
import {unique} from './util';
@@ -111,50 +112,38 @@ export const getPackageManagerInfo = async (packageManager: string) => {
};
/**
+ * Expands (converts) the string input `cache-dependency-path` to list of directories that
+ * may be project roots
+ *
* getProjectDirectoriesFromCacheDependencyPath is called twice during `restoreCache`
* - first through `getCacheDirectories`
* - second from `repoHasYarn3ManagedCache`
*
- * it contains expensive IO operation and thus should be memoized
- */
-
-let projectDirectoriesMemoized: string[] | null = null;
-/**
- * unit test must reset memoized variables
- */
-export const resetProjectDirectoriesMemoized = () =>
- (projectDirectoriesMemoized = null);
-/**
- * Expands (converts) the string input `cache-dependency-path` to list of directories that
- * may be project roots
+ * it contains expensive IO operation and thus should be memoized
+ *
* @param cacheDependencyPath - either a single string or multiline string with possible glob patterns
* expected to be the result of `core.getInput('cache-dependency-path')`
- * @return list of directories and possible
+ * @return list of directories
*/
-const getProjectDirectoriesFromCacheDependencyPath = async (
- cacheDependencyPath: string
-): Promise => {
- if (projectDirectoriesMemoized !== null) {
- return projectDirectoriesMemoized;
+export const getProjectDirectoriesFromCacheDependencyPath = memoize(
+ async (cacheDependencyPath: string): Promise => {
+ const globber = await glob.create(cacheDependencyPath);
+ const cacheDependenciesPaths = await globber.glob();
+
+ const existingDirectories: string[] = cacheDependenciesPaths
+ .map(path.dirname)
+ .filter(unique())
+ .map(dirName => fs.realpathSync(dirName))
+ .filter(directory => fs.lstatSync(directory).isDirectory());
+
+ if (!existingDirectories.length)
+ core.warning(
+ `No existing directories found containing cache-dependency-path="${cacheDependencyPath}"`
+ );
+
+ return existingDirectories;
}
-
- const globber = await glob.create(cacheDependencyPath);
- const cacheDependenciesPaths = await globber.glob();
-
- const existingDirectories: string[] = cacheDependenciesPaths
- .map(path.dirname)
- .filter(unique())
- .map(dirName => fs.realpathSync(dirName))
- .filter(directory => fs.lstatSync(directory).isDirectory());
-
- if (!existingDirectories.length)
- core.warning(
- `No existing directories found containing cache-dependency-path="${cacheDependencyPath}"`
- );
-
- projectDirectoriesMemoized = existingDirectories;
- return existingDirectories;
-};
+);
/**
* Finds the cache directories configured for the repo if cache-dependency-path is not empty