mirror of
				https://gitea.com/actions/cache.git
				synced 2025-11-04 07:47:08 +00:00 
			
		
		
		
	Compare commits
	
		
			3 Commits
		
	
	
		
			v3.1.0-bet
			...
			t-dedah/ne
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					5b2559885a | ||
| 
						 | 
					ade59b804f | ||
| 
						 | 
					a89cefe318 | 
@@ -40,12 +40,3 @@
 | 
			
		||||
### 3.0.11
 | 
			
		||||
- Update toolkit version to 3.0.5 to include `@actions/core@^1.10.0`
 | 
			
		||||
- Update `@actions/cache` to use updated `saveState` and `setOutput` functions from `@actions/core@^1.10.0`
 | 
			
		||||
 | 
			
		||||
### 3.1.0-beta.1
 | 
			
		||||
- Update `@actions/cache` on windows to use gnu tar and zstd by default and fallback to bsdtar and zstd if gnu tar is not available. ([issue](https://github.com/actions/cache/issues/984))
 | 
			
		||||
 | 
			
		||||
### 3.1.0-beta.2
 | 
			
		||||
- Added support for fallback to gzip to restore old caches on windows.
 | 
			
		||||
 | 
			
		||||
### 3.1.0-beta.3
 | 
			
		||||
- Bug fixes for bsdtar fallback if gnutar not available and gzip fallback if cache saved using old cache action on windows.
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										701
									
								
								dist/restore/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										701
									
								
								dist/restore/index.js
									
									
									
									
										vendored
									
									
								
							@@ -1177,6 +1177,10 @@ function getVersion(app) {
 | 
			
		||||
// Use zstandard if possible to maximize cache performance
 | 
			
		||||
function getCompressionMethod() {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        if (process.platform === 'win32' && !(yield isGnuTarInstalled())) {
 | 
			
		||||
            // Disable zstd due to bug https://github.com/actions/cache/issues/301
 | 
			
		||||
            return constants_1.CompressionMethod.Gzip;
 | 
			
		||||
        }
 | 
			
		||||
        const versionOutput = yield getVersion('zstd');
 | 
			
		||||
        const version = semver.clean(versionOutput);
 | 
			
		||||
        if (!versionOutput.toLowerCase().includes('zstd command line interface')) {
 | 
			
		||||
@@ -1200,16 +1204,13 @@ function getCacheFileName(compressionMethod) {
 | 
			
		||||
        : constants_1.CacheFilename.Zstd;
 | 
			
		||||
}
 | 
			
		||||
exports.getCacheFileName = getCacheFileName;
 | 
			
		||||
function getGnuTarPathOnWindows() {
 | 
			
		||||
function isGnuTarInstalled() {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        if (fs.existsSync(constants_1.GnuTarPathOnWindows)) {
 | 
			
		||||
            return constants_1.GnuTarPathOnWindows;
 | 
			
		||||
        }
 | 
			
		||||
        const versionOutput = yield getVersion('tar');
 | 
			
		||||
        return versionOutput.toLowerCase().includes('gnu tar') ? io.which('tar') : '';
 | 
			
		||||
        return versionOutput.toLowerCase().includes('gnu tar');
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
exports.getGnuTarPathOnWindows = getGnuTarPathOnWindows;
 | 
			
		||||
exports.isGnuTarInstalled = isGnuTarInstalled;
 | 
			
		||||
function assertDefined(name, value) {
 | 
			
		||||
    if (value === undefined) {
 | 
			
		||||
        throw Error(`Expected ${name} but value was undefiend`);
 | 
			
		||||
@@ -3045,18 +3046,19 @@ exports.default = _default;
 | 
			
		||||
/***/ }),
 | 
			
		||||
/* 105 */,
 | 
			
		||||
/* 106 */
 | 
			
		||||
/***/ (function(__unusedmodule, exports) {
 | 
			
		||||
/***/ (function(__unusedmodule, exports, __webpack_require__) {
 | 
			
		||||
 | 
			
		||||
"use strict";
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(exports, '__esModule', { value: true });
 | 
			
		||||
 | 
			
		||||
var tslib = __webpack_require__(640);
 | 
			
		||||
 | 
			
		||||
// Copyright (c) Microsoft Corporation.
 | 
			
		||||
// Licensed under the MIT license.
 | 
			
		||||
/// <reference path="../shims-public.d.ts" />
 | 
			
		||||
const listenersMap = new WeakMap();
 | 
			
		||||
const abortedMap = new WeakMap();
 | 
			
		||||
var listenersMap = new WeakMap();
 | 
			
		||||
var abortedMap = new WeakMap();
 | 
			
		||||
/**
 | 
			
		||||
 * An aborter instance implements AbortSignal interface, can abort HTTP requests.
 | 
			
		||||
 *
 | 
			
		||||
@@ -3070,8 +3072,8 @@ const abortedMap = new WeakMap();
 | 
			
		||||
 * await doAsyncWork(AbortSignal.none);
 | 
			
		||||
 * ```
 | 
			
		||||
 */
 | 
			
		||||
class AbortSignal {
 | 
			
		||||
    constructor() {
 | 
			
		||||
var AbortSignal = /** @class */ (function () {
 | 
			
		||||
    function AbortSignal() {
 | 
			
		||||
        /**
 | 
			
		||||
         * onabort event listener.
 | 
			
		||||
         */
 | 
			
		||||
@@ -3079,65 +3081,74 @@ class AbortSignal {
 | 
			
		||||
        listenersMap.set(this, []);
 | 
			
		||||
        abortedMap.set(this, false);
 | 
			
		||||
    }
 | 
			
		||||
    Object.defineProperty(AbortSignal.prototype, "aborted", {
 | 
			
		||||
        /**
 | 
			
		||||
         * Status of whether aborted or not.
 | 
			
		||||
         *
 | 
			
		||||
         * @readonly
 | 
			
		||||
         */
 | 
			
		||||
    get aborted() {
 | 
			
		||||
        get: function () {
 | 
			
		||||
            if (!abortedMap.has(this)) {
 | 
			
		||||
                throw new TypeError("Expected `this` to be an instance of AbortSignal.");
 | 
			
		||||
            }
 | 
			
		||||
            return abortedMap.get(this);
 | 
			
		||||
    }
 | 
			
		||||
        },
 | 
			
		||||
        enumerable: false,
 | 
			
		||||
        configurable: true
 | 
			
		||||
    });
 | 
			
		||||
    Object.defineProperty(AbortSignal, "none", {
 | 
			
		||||
        /**
 | 
			
		||||
         * Creates a new AbortSignal instance that will never be aborted.
 | 
			
		||||
         *
 | 
			
		||||
         * @readonly
 | 
			
		||||
         */
 | 
			
		||||
    static get none() {
 | 
			
		||||
        get: function () {
 | 
			
		||||
            return new AbortSignal();
 | 
			
		||||
    }
 | 
			
		||||
        },
 | 
			
		||||
        enumerable: false,
 | 
			
		||||
        configurable: true
 | 
			
		||||
    });
 | 
			
		||||
    /**
 | 
			
		||||
     * Added new "abort" event listener, only support "abort" event.
 | 
			
		||||
     *
 | 
			
		||||
     * @param _type - Only support "abort" event
 | 
			
		||||
     * @param listener - The listener to be added
 | 
			
		||||
     */
 | 
			
		||||
    addEventListener(
 | 
			
		||||
    AbortSignal.prototype.addEventListener = function (
 | 
			
		||||
    // tslint:disable-next-line:variable-name
 | 
			
		||||
    _type, listener) {
 | 
			
		||||
        if (!listenersMap.has(this)) {
 | 
			
		||||
            throw new TypeError("Expected `this` to be an instance of AbortSignal.");
 | 
			
		||||
        }
 | 
			
		||||
        const listeners = listenersMap.get(this);
 | 
			
		||||
        var listeners = listenersMap.get(this);
 | 
			
		||||
        listeners.push(listener);
 | 
			
		||||
    }
 | 
			
		||||
    };
 | 
			
		||||
    /**
 | 
			
		||||
     * Remove "abort" event listener, only support "abort" event.
 | 
			
		||||
     *
 | 
			
		||||
     * @param _type - Only support "abort" event
 | 
			
		||||
     * @param listener - The listener to be removed
 | 
			
		||||
     */
 | 
			
		||||
    removeEventListener(
 | 
			
		||||
    AbortSignal.prototype.removeEventListener = function (
 | 
			
		||||
    // tslint:disable-next-line:variable-name
 | 
			
		||||
    _type, listener) {
 | 
			
		||||
        if (!listenersMap.has(this)) {
 | 
			
		||||
            throw new TypeError("Expected `this` to be an instance of AbortSignal.");
 | 
			
		||||
        }
 | 
			
		||||
        const listeners = listenersMap.get(this);
 | 
			
		||||
        const index = listeners.indexOf(listener);
 | 
			
		||||
        var listeners = listenersMap.get(this);
 | 
			
		||||
        var index = listeners.indexOf(listener);
 | 
			
		||||
        if (index > -1) {
 | 
			
		||||
            listeners.splice(index, 1);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    };
 | 
			
		||||
    /**
 | 
			
		||||
     * Dispatches a synthetic event to the AbortSignal.
 | 
			
		||||
     */
 | 
			
		||||
    dispatchEvent(_event) {
 | 
			
		||||
    AbortSignal.prototype.dispatchEvent = function (_event) {
 | 
			
		||||
        throw new Error("This is a stub dispatchEvent implementation that should not be used.  It only exists for type-checking purposes.");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
    };
 | 
			
		||||
    return AbortSignal;
 | 
			
		||||
}());
 | 
			
		||||
/**
 | 
			
		||||
 * Helper to trigger an abort event immediately, the onabort and all abort event listeners will be triggered.
 | 
			
		||||
 * Will try to trigger abort event for all linked AbortSignal nodes.
 | 
			
		||||
@@ -3155,12 +3166,12 @@ function abortSignal(signal) {
 | 
			
		||||
    if (signal.onabort) {
 | 
			
		||||
        signal.onabort.call(signal);
 | 
			
		||||
    }
 | 
			
		||||
    const listeners = listenersMap.get(signal);
 | 
			
		||||
    var listeners = listenersMap.get(signal);
 | 
			
		||||
    if (listeners) {
 | 
			
		||||
        // Create a copy of listeners so mutations to the array
 | 
			
		||||
        // (e.g. via removeListener calls) don't affect the listeners
 | 
			
		||||
        // we invoke.
 | 
			
		||||
        listeners.slice().forEach((listener) => {
 | 
			
		||||
        listeners.slice().forEach(function (listener) {
 | 
			
		||||
            listener.call(signal, { type: "abort" });
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
@@ -3186,12 +3197,15 @@ function abortSignal(signal) {
 | 
			
		||||
 * }
 | 
			
		||||
 * ```
 | 
			
		||||
 */
 | 
			
		||||
class AbortError extends Error {
 | 
			
		||||
    constructor(message) {
 | 
			
		||||
        super(message);
 | 
			
		||||
        this.name = "AbortError";
 | 
			
		||||
var AbortError = /** @class */ (function (_super) {
 | 
			
		||||
    tslib.__extends(AbortError, _super);
 | 
			
		||||
    function AbortError(message) {
 | 
			
		||||
        var _this = _super.call(this, message) || this;
 | 
			
		||||
        _this.name = "AbortError";
 | 
			
		||||
        return _this;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
    return AbortError;
 | 
			
		||||
}(Error));
 | 
			
		||||
/**
 | 
			
		||||
 * An AbortController provides an AbortSignal and the associated controls to signal
 | 
			
		||||
 * that an asynchronous operation should be aborted.
 | 
			
		||||
@@ -3226,9 +3240,10 @@ class AbortError extends Error {
 | 
			
		||||
 * await doAsyncWork(aborter.withTimeout(25 * 1000));
 | 
			
		||||
 * ```
 | 
			
		||||
 */
 | 
			
		||||
class AbortController {
 | 
			
		||||
var AbortController = /** @class */ (function () {
 | 
			
		||||
    // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
 | 
			
		||||
    constructor(parentSignals) {
 | 
			
		||||
    function AbortController(parentSignals) {
 | 
			
		||||
        var _this = this;
 | 
			
		||||
        this._signal = new AbortSignal();
 | 
			
		||||
        if (!parentSignals) {
 | 
			
		||||
            return;
 | 
			
		||||
@@ -3238,7 +3253,8 @@ class AbortController {
 | 
			
		||||
            // eslint-disable-next-line prefer-rest-params
 | 
			
		||||
            parentSignals = arguments;
 | 
			
		||||
        }
 | 
			
		||||
        for (const parentSignal of parentSignals) {
 | 
			
		||||
        for (var _i = 0, parentSignals_1 = parentSignals; _i < parentSignals_1.length; _i++) {
 | 
			
		||||
            var parentSignal = parentSignals_1[_i];
 | 
			
		||||
            // if the parent signal has already had abort() called,
 | 
			
		||||
            // then call abort on this signal as well.
 | 
			
		||||
            if (parentSignal.aborted) {
 | 
			
		||||
@@ -3246,42 +3262,47 @@ class AbortController {
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                // when the parent signal aborts, this signal should as well.
 | 
			
		||||
                parentSignal.addEventListener("abort", () => {
 | 
			
		||||
                    this.abort();
 | 
			
		||||
                parentSignal.addEventListener("abort", function () {
 | 
			
		||||
                    _this.abort();
 | 
			
		||||
                });
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    Object.defineProperty(AbortController.prototype, "signal", {
 | 
			
		||||
        /**
 | 
			
		||||
         * The AbortSignal associated with this controller that will signal aborted
 | 
			
		||||
         * when the abort method is called on this controller.
 | 
			
		||||
         *
 | 
			
		||||
         * @readonly
 | 
			
		||||
         */
 | 
			
		||||
    get signal() {
 | 
			
		||||
        get: function () {
 | 
			
		||||
            return this._signal;
 | 
			
		||||
    }
 | 
			
		||||
        },
 | 
			
		||||
        enumerable: false,
 | 
			
		||||
        configurable: true
 | 
			
		||||
    });
 | 
			
		||||
    /**
 | 
			
		||||
     * Signal that any operations passed this controller's associated abort signal
 | 
			
		||||
     * to cancel any remaining work and throw an `AbortError`.
 | 
			
		||||
     */
 | 
			
		||||
    abort() {
 | 
			
		||||
    AbortController.prototype.abort = function () {
 | 
			
		||||
        abortSignal(this._signal);
 | 
			
		||||
    }
 | 
			
		||||
    };
 | 
			
		||||
    /**
 | 
			
		||||
     * Creates a new AbortSignal instance that will abort after the provided ms.
 | 
			
		||||
     * @param ms - Elapsed time in milliseconds to trigger an abort.
 | 
			
		||||
     */
 | 
			
		||||
    static timeout(ms) {
 | 
			
		||||
        const signal = new AbortSignal();
 | 
			
		||||
        const timer = setTimeout(abortSignal, ms, signal);
 | 
			
		||||
    AbortController.timeout = function (ms) {
 | 
			
		||||
        var signal = new AbortSignal();
 | 
			
		||||
        var timer = setTimeout(abortSignal, ms, signal);
 | 
			
		||||
        // Prevent the active Timer from keeping the Node.js event loop active.
 | 
			
		||||
        if (typeof timer.unref === "function") {
 | 
			
		||||
            timer.unref();
 | 
			
		||||
        }
 | 
			
		||||
        return signal;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
    };
 | 
			
		||||
    return AbortController;
 | 
			
		||||
}());
 | 
			
		||||
 | 
			
		||||
exports.AbortController = AbortController;
 | 
			
		||||
exports.AbortError = AbortError;
 | 
			
		||||
@@ -3432,7 +3453,6 @@ function getCacheEntry(keys, paths, options) {
 | 
			
		||||
        const resource = `cache?keys=${encodeURIComponent(keys.join(','))}&version=${version}`;
 | 
			
		||||
        const response = yield requestUtils_1.retryTypedResponse('getCacheEntry', () => __awaiter(this, void 0, void 0, function* () { return httpClient.getJson(getCacheApiUrl(resource)); }));
 | 
			
		||||
        if (response.statusCode === 204) {
 | 
			
		||||
            // Cache not found
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
        if (!requestUtils_1.isSuccessStatusCode(response.statusCode)) {
 | 
			
		||||
@@ -3441,7 +3461,6 @@ function getCacheEntry(keys, paths, options) {
 | 
			
		||||
        const cacheResult = response.result;
 | 
			
		||||
        const cacheDownloadUrl = cacheResult === null || cacheResult === void 0 ? void 0 : cacheResult.archiveLocation;
 | 
			
		||||
        if (!cacheDownloadUrl) {
 | 
			
		||||
            // Cache achiveLocation not found. This should never happen, and hence bail out.
 | 
			
		||||
            throw new Error('Cache not found.');
 | 
			
		||||
        }
 | 
			
		||||
        core.setSecret(cacheDownloadUrl);
 | 
			
		||||
@@ -38036,19 +38055,21 @@ const path = __importStar(__webpack_require__(622));
 | 
			
		||||
const utils = __importStar(__webpack_require__(15));
 | 
			
		||||
const constants_1 = __webpack_require__(931);
 | 
			
		||||
const IS_WINDOWS = process.platform === 'win32';
 | 
			
		||||
// Returns tar path and type: BSD or GNU
 | 
			
		||||
function getTarPath() {
 | 
			
		||||
function getTarPath(args, compressionMethod) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        switch (process.platform) {
 | 
			
		||||
            case 'win32': {
 | 
			
		||||
                const gnuTar = yield utils.getGnuTarPathOnWindows();
 | 
			
		||||
                const systemTar = constants_1.SystemTarPathOnWindows;
 | 
			
		||||
                if (gnuTar) {
 | 
			
		||||
                    // Use GNUtar as default on windows
 | 
			
		||||
                    return { path: gnuTar, type: constants_1.ArchiveToolType.GNU };
 | 
			
		||||
                const systemTar = `${process.env['windir']}\\System32\\tar.exe`;
 | 
			
		||||
                if (compressionMethod !== constants_1.CompressionMethod.Gzip) {
 | 
			
		||||
                    // We only use zstandard compression on windows when gnu tar is installed due to
 | 
			
		||||
                    // a bug with compressing large files with bsdtar + zstd
 | 
			
		||||
                    args.push('--force-local');
 | 
			
		||||
                }
 | 
			
		||||
                else if (fs_1.existsSync(systemTar)) {
 | 
			
		||||
                    return { path: systemTar, type: constants_1.ArchiveToolType.BSD };
 | 
			
		||||
                    return systemTar;
 | 
			
		||||
                }
 | 
			
		||||
                else if (yield utils.isGnuTarInstalled()) {
 | 
			
		||||
                    args.push('--force-local');
 | 
			
		||||
                }
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
@@ -38056,92 +38077,25 @@ function getTarPath() {
 | 
			
		||||
                const gnuTar = yield io.which('gtar', false);
 | 
			
		||||
                if (gnuTar) {
 | 
			
		||||
                    // fix permission denied errors when extracting BSD tar archive with GNU tar - https://github.com/actions/cache/issues/527
 | 
			
		||||
                    return { path: gnuTar, type: constants_1.ArchiveToolType.GNU };
 | 
			
		||||
                }
 | 
			
		||||
                else {
 | 
			
		||||
                    return {
 | 
			
		||||
                        path: yield io.which('tar', true),
 | 
			
		||||
                        type: constants_1.ArchiveToolType.BSD
 | 
			
		||||
                    };
 | 
			
		||||
                    args.push('--delay-directory-restore');
 | 
			
		||||
                    return gnuTar;
 | 
			
		||||
                }
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
            default:
 | 
			
		||||
                break;
 | 
			
		||||
        }
 | 
			
		||||
        // Default assumption is GNU tar is present in path
 | 
			
		||||
        return {
 | 
			
		||||
            path: yield io.which('tar', true),
 | 
			
		||||
            type: constants_1.ArchiveToolType.GNU
 | 
			
		||||
        };
 | 
			
		||||
        return yield io.which('tar', true);
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
// Return arguments for tar as per tarPath, compressionMethod, method type and os
 | 
			
		||||
function getTarArgs(tarPath, compressionMethod, type, archivePath = '') {
 | 
			
		||||
function execTar(args, compressionMethod, cwd) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        const args = [`"${tarPath.path}"`];
 | 
			
		||||
        const cacheFileName = utils.getCacheFileName(compressionMethod);
 | 
			
		||||
        const tarFile = 'cache.tar';
 | 
			
		||||
        const workingDirectory = getWorkingDirectory();
 | 
			
		||||
        // Speficic args for BSD tar on windows for workaround
 | 
			
		||||
        const BSD_TAR_ZSTD = tarPath.type === constants_1.ArchiveToolType.BSD &&
 | 
			
		||||
            compressionMethod !== constants_1.CompressionMethod.Gzip &&
 | 
			
		||||
            IS_WINDOWS;
 | 
			
		||||
        // Method specific args
 | 
			
		||||
        switch (type) {
 | 
			
		||||
            case 'create':
 | 
			
		||||
                args.push('--posix', '-cf', BSD_TAR_ZSTD
 | 
			
		||||
                    ? tarFile
 | 
			
		||||
                    : cacheFileName.replace(new RegExp(`\\${path.sep}`, 'g'), '/'), '--exclude', BSD_TAR_ZSTD
 | 
			
		||||
                    ? tarFile
 | 
			
		||||
                    : cacheFileName.replace(new RegExp(`\\${path.sep}`, 'g'), '/'), '-P', '-C', workingDirectory.replace(new RegExp(`\\${path.sep}`, 'g'), '/'), '--files-from', constants_1.ManifestFilename);
 | 
			
		||||
                break;
 | 
			
		||||
            case 'extract':
 | 
			
		||||
                args.push('-xf', BSD_TAR_ZSTD
 | 
			
		||||
                    ? tarFile
 | 
			
		||||
                    : archivePath.replace(new RegExp(`\\${path.sep}`, 'g'), '/'), '-P', '-C', workingDirectory.replace(new RegExp(`\\${path.sep}`, 'g'), '/'));
 | 
			
		||||
                break;
 | 
			
		||||
            case 'list':
 | 
			
		||||
                args.push('-tf', BSD_TAR_ZSTD
 | 
			
		||||
                    ? tarFile
 | 
			
		||||
                    : archivePath.replace(new RegExp(`\\${path.sep}`, 'g'), '/'), '-P');
 | 
			
		||||
                break;
 | 
			
		||||
        try {
 | 
			
		||||
            yield exec_1.exec(`"${yield getTarPath(args, compressionMethod)}"`, args, { cwd });
 | 
			
		||||
        }
 | 
			
		||||
        // Platform specific args
 | 
			
		||||
        if (tarPath.type === constants_1.ArchiveToolType.GNU) {
 | 
			
		||||
            switch (process.platform) {
 | 
			
		||||
                case 'win32':
 | 
			
		||||
                    args.push('--force-local');
 | 
			
		||||
                    break;
 | 
			
		||||
                case 'darwin':
 | 
			
		||||
                    args.push('--delay-directory-restore');
 | 
			
		||||
                    break;
 | 
			
		||||
        catch (error) {
 | 
			
		||||
            throw new Error(`Tar failed with error: ${error === null || error === void 0 ? void 0 : error.message}`);
 | 
			
		||||
        }
 | 
			
		||||
        }
 | 
			
		||||
        return args;
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
// Returns commands to run tar and compression program
 | 
			
		||||
function getCommands(compressionMethod, type, archivePath = '') {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        let args;
 | 
			
		||||
        const tarPath = yield getTarPath();
 | 
			
		||||
        const tarArgs = yield getTarArgs(tarPath, compressionMethod, type, archivePath);
 | 
			
		||||
        const compressionArgs = type !== 'create'
 | 
			
		||||
            ? yield getDecompressionProgram(tarPath, compressionMethod, archivePath)
 | 
			
		||||
            : yield getCompressionProgram(tarPath, compressionMethod);
 | 
			
		||||
        const BSD_TAR_ZSTD = tarPath.type === constants_1.ArchiveToolType.BSD &&
 | 
			
		||||
            compressionMethod !== constants_1.CompressionMethod.Gzip &&
 | 
			
		||||
            IS_WINDOWS;
 | 
			
		||||
        if (BSD_TAR_ZSTD && type !== 'create') {
 | 
			
		||||
            args = [[...compressionArgs].join(' '), [...tarArgs].join(' ')];
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            args = [[...tarArgs].join(' '), [...compressionArgs].join(' ')];
 | 
			
		||||
        }
 | 
			
		||||
        if (BSD_TAR_ZSTD) {
 | 
			
		||||
            return args;
 | 
			
		||||
        }
 | 
			
		||||
        return [args.join(' ')];
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
function getWorkingDirectory() {
 | 
			
		||||
@@ -38149,116 +38103,91 @@ function getWorkingDirectory() {
 | 
			
		||||
    return (_a = process.env['GITHUB_WORKSPACE']) !== null && _a !== void 0 ? _a : process.cwd();
 | 
			
		||||
}
 | 
			
		||||
// Common function for extractTar and listTar to get the compression method
 | 
			
		||||
function getDecompressionProgram(tarPath, compressionMethod, archivePath) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
function getCompressionProgram(compressionMethod) {
 | 
			
		||||
    // -d: Decompress.
 | 
			
		||||
    // unzstd is equivalent to 'zstd -d'
 | 
			
		||||
    // --long=#: Enables long distance matching with # bits. Maximum is 30 (1GB) on 32-bit OS and 31 (2GB) on 64-bit.
 | 
			
		||||
    // Using 30 here because we also support 32-bit self-hosted runners.
 | 
			
		||||
        const BSD_TAR_ZSTD = tarPath.type === constants_1.ArchiveToolType.BSD &&
 | 
			
		||||
            compressionMethod !== constants_1.CompressionMethod.Gzip &&
 | 
			
		||||
            IS_WINDOWS;
 | 
			
		||||
    switch (compressionMethod) {
 | 
			
		||||
        case constants_1.CompressionMethod.Zstd:
 | 
			
		||||
                return BSD_TAR_ZSTD
 | 
			
		||||
                    ? [
 | 
			
		||||
                        'zstd -d --long=30 -o',
 | 
			
		||||
                        constants_1.TarFilename,
 | 
			
		||||
                        archivePath.replace(new RegExp(`\\${path.sep}`, 'g'), '/')
 | 
			
		||||
                    ]
 | 
			
		||||
                    : [
 | 
			
		||||
            return [
 | 
			
		||||
                '--use-compress-program',
 | 
			
		||||
                        IS_WINDOWS ? '"zstd -d --long=30"' : 'unzstd --long=30'
 | 
			
		||||
                IS_WINDOWS ? 'zstd -d --long=30' : 'unzstd --long=30'
 | 
			
		||||
            ];
 | 
			
		||||
        case constants_1.CompressionMethod.ZstdWithoutLong:
 | 
			
		||||
                return BSD_TAR_ZSTD
 | 
			
		||||
                    ? [
 | 
			
		||||
                        'zstd -d -o',
 | 
			
		||||
                        constants_1.TarFilename,
 | 
			
		||||
                        archivePath.replace(new RegExp(`\\${path.sep}`, 'g'), '/')
 | 
			
		||||
                    ]
 | 
			
		||||
                    : ['--use-compress-program', IS_WINDOWS ? '"zstd -d"' : 'unzstd'];
 | 
			
		||||
            return ['--use-compress-program', IS_WINDOWS ? 'zstd -d' : 'unzstd'];
 | 
			
		||||
        default:
 | 
			
		||||
            return ['-z'];
 | 
			
		||||
    }
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
// Used for creating the archive
 | 
			
		||||
// -T#: Compress using # working thread. If # is 0, attempt to detect and use the number of physical CPU cores.
 | 
			
		||||
// zstdmt is equivalent to 'zstd -T0'
 | 
			
		||||
// --long=#: Enables long distance matching with # bits. Maximum is 30 (1GB) on 32-bit OS and 31 (2GB) on 64-bit.
 | 
			
		||||
// Using 30 here because we also support 32-bit self-hosted runners.
 | 
			
		||||
// Long range mode is added to zstd in v1.3.2 release, so we will not use --long in older version of zstd.
 | 
			
		||||
function getCompressionProgram(tarPath, compressionMethod) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        const cacheFileName = utils.getCacheFileName(compressionMethod);
 | 
			
		||||
        const BSD_TAR_ZSTD = tarPath.type === constants_1.ArchiveToolType.BSD &&
 | 
			
		||||
            compressionMethod !== constants_1.CompressionMethod.Gzip &&
 | 
			
		||||
            IS_WINDOWS;
 | 
			
		||||
        switch (compressionMethod) {
 | 
			
		||||
            case constants_1.CompressionMethod.Zstd:
 | 
			
		||||
                return BSD_TAR_ZSTD
 | 
			
		||||
                    ? [
 | 
			
		||||
                        'zstd -T0 --long=30 -o',
 | 
			
		||||
                        cacheFileName.replace(new RegExp(`\\${path.sep}`, 'g'), '/'),
 | 
			
		||||
                        constants_1.TarFilename
 | 
			
		||||
                    ]
 | 
			
		||||
                    : [
 | 
			
		||||
                        '--use-compress-program',
 | 
			
		||||
                        IS_WINDOWS ? '"zstd -T0 --long=30"' : 'zstdmt --long=30'
 | 
			
		||||
                    ];
 | 
			
		||||
            case constants_1.CompressionMethod.ZstdWithoutLong:
 | 
			
		||||
                return BSD_TAR_ZSTD
 | 
			
		||||
                    ? [
 | 
			
		||||
                        'zstd -T0 -o',
 | 
			
		||||
                        cacheFileName.replace(new RegExp(`\\${path.sep}`, 'g'), '/'),
 | 
			
		||||
                        constants_1.TarFilename
 | 
			
		||||
                    ]
 | 
			
		||||
                    : ['--use-compress-program', IS_WINDOWS ? '"zstd -T0"' : 'zstdmt'];
 | 
			
		||||
            default:
 | 
			
		||||
                return ['-z'];
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
// Executes all commands as separate processes
 | 
			
		||||
function execCommands(commands, cwd) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        for (const command of commands) {
 | 
			
		||||
            try {
 | 
			
		||||
                yield exec_1.exec(command, undefined, { cwd });
 | 
			
		||||
            }
 | 
			
		||||
            catch (error) {
 | 
			
		||||
                throw new Error(`${command.split(' ')[0]} failed with error: ${error === null || error === void 0 ? void 0 : error.message}`);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
// List the contents of a tar
 | 
			
		||||
function listTar(archivePath, compressionMethod) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        const commands = yield getCommands(compressionMethod, 'list', archivePath);
 | 
			
		||||
        yield execCommands(commands);
 | 
			
		||||
        const args = [
 | 
			
		||||
            ...getCompressionProgram(compressionMethod),
 | 
			
		||||
            '-tf',
 | 
			
		||||
            archivePath.replace(new RegExp(`\\${path.sep}`, 'g'), '/'),
 | 
			
		||||
            '-P'
 | 
			
		||||
        ];
 | 
			
		||||
        yield execTar(args, compressionMethod);
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
exports.listTar = listTar;
 | 
			
		||||
// Extract a tar
 | 
			
		||||
function extractTar(archivePath, compressionMethod) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        // Create directory to extract tar into
 | 
			
		||||
        const workingDirectory = getWorkingDirectory();
 | 
			
		||||
        yield io.mkdirP(workingDirectory);
 | 
			
		||||
        const commands = yield getCommands(compressionMethod, 'extract', archivePath);
 | 
			
		||||
        yield execCommands(commands);
 | 
			
		||||
        const args = [
 | 
			
		||||
            ...getCompressionProgram(compressionMethod),
 | 
			
		||||
            '-xf',
 | 
			
		||||
            archivePath.replace(new RegExp(`\\${path.sep}`, 'g'), '/'),
 | 
			
		||||
            '-P',
 | 
			
		||||
            '-C',
 | 
			
		||||
            workingDirectory.replace(new RegExp(`\\${path.sep}`, 'g'), '/')
 | 
			
		||||
        ];
 | 
			
		||||
        yield execTar(args, compressionMethod);
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
exports.extractTar = extractTar;
 | 
			
		||||
// Create a tar
 | 
			
		||||
function createTar(archiveFolder, sourceDirectories, compressionMethod) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        // Write source directories to manifest.txt to avoid command length limits
 | 
			
		||||
        fs_1.writeFileSync(path.join(archiveFolder, constants_1.ManifestFilename), sourceDirectories.join('\n'));
 | 
			
		||||
        const commands = yield getCommands(compressionMethod, 'create');
 | 
			
		||||
        yield execCommands(commands, archiveFolder);
 | 
			
		||||
        const manifestFilename = 'manifest.txt';
 | 
			
		||||
        const cacheFileName = utils.getCacheFileName(compressionMethod);
 | 
			
		||||
        fs_1.writeFileSync(path.join(archiveFolder, manifestFilename), sourceDirectories.join('\n'));
 | 
			
		||||
        const workingDirectory = getWorkingDirectory();
 | 
			
		||||
        // -T#: Compress using # working thread. If # is 0, attempt to detect and use the number of physical CPU cores.
 | 
			
		||||
        // zstdmt is equivalent to 'zstd -T0'
 | 
			
		||||
        // --long=#: Enables long distance matching with # bits. Maximum is 30 (1GB) on 32-bit OS and 31 (2GB) on 64-bit.
 | 
			
		||||
        // Using 30 here because we also support 32-bit self-hosted runners.
 | 
			
		||||
        // Long range mode is added to zstd in v1.3.2 release, so we will not use --long in older version of zstd.
 | 
			
		||||
        function getCompressionProgram() {
 | 
			
		||||
            switch (compressionMethod) {
 | 
			
		||||
                case constants_1.CompressionMethod.Zstd:
 | 
			
		||||
                    return [
 | 
			
		||||
                        '--use-compress-program',
 | 
			
		||||
                        IS_WINDOWS ? 'zstd -T0 --long=30' : 'zstdmt --long=30'
 | 
			
		||||
                    ];
 | 
			
		||||
                case constants_1.CompressionMethod.ZstdWithoutLong:
 | 
			
		||||
                    return ['--use-compress-program', IS_WINDOWS ? 'zstd -T0' : 'zstdmt'];
 | 
			
		||||
                default:
 | 
			
		||||
                    return ['-z'];
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        const args = [
 | 
			
		||||
            '--posix',
 | 
			
		||||
            ...getCompressionProgram(),
 | 
			
		||||
            '-cf',
 | 
			
		||||
            cacheFileName.replace(new RegExp(`\\${path.sep}`, 'g'), '/'),
 | 
			
		||||
            '--exclude',
 | 
			
		||||
            cacheFileName.replace(new RegExp(`\\${path.sep}`, 'g'), '/'),
 | 
			
		||||
            '-P',
 | 
			
		||||
            '-C',
 | 
			
		||||
            workingDirectory.replace(new RegExp(`\\${path.sep}`, 'g'), '/'),
 | 
			
		||||
            '--files-from',
 | 
			
		||||
            manifestFilename
 | 
			
		||||
        ];
 | 
			
		||||
        yield execTar(args, compressionMethod, archiveFolder);
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
exports.createTar = createTar;
 | 
			
		||||
@@ -44197,7 +44126,318 @@ exports.default = _default;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/***/ }),
 | 
			
		||||
/* 640 */,
 | 
			
		||||
/* 640 */
 | 
			
		||||
/***/ (function(module) {
 | 
			
		||||
 | 
			
		||||
/*! *****************************************************************************
 | 
			
		||||
Copyright (c) Microsoft Corporation.
 | 
			
		||||
 | 
			
		||||
Permission to use, copy, modify, and/or distribute this software for any
 | 
			
		||||
purpose with or without fee is hereby granted.
 | 
			
		||||
 | 
			
		||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
 | 
			
		||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
 | 
			
		||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
 | 
			
		||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
 | 
			
		||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
 | 
			
		||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 | 
			
		||||
PERFORMANCE OF THIS SOFTWARE.
 | 
			
		||||
***************************************************************************** */
 | 
			
		||||
/* global global, define, System, Reflect, Promise */
 | 
			
		||||
var __extends;
 | 
			
		||||
var __assign;
 | 
			
		||||
var __rest;
 | 
			
		||||
var __decorate;
 | 
			
		||||
var __param;
 | 
			
		||||
var __metadata;
 | 
			
		||||
var __awaiter;
 | 
			
		||||
var __generator;
 | 
			
		||||
var __exportStar;
 | 
			
		||||
var __values;
 | 
			
		||||
var __read;
 | 
			
		||||
var __spread;
 | 
			
		||||
var __spreadArrays;
 | 
			
		||||
var __spreadArray;
 | 
			
		||||
var __await;
 | 
			
		||||
var __asyncGenerator;
 | 
			
		||||
var __asyncDelegator;
 | 
			
		||||
var __asyncValues;
 | 
			
		||||
var __makeTemplateObject;
 | 
			
		||||
var __importStar;
 | 
			
		||||
var __importDefault;
 | 
			
		||||
var __classPrivateFieldGet;
 | 
			
		||||
var __classPrivateFieldSet;
 | 
			
		||||
var __createBinding;
 | 
			
		||||
(function (factory) {
 | 
			
		||||
    var root = typeof global === "object" ? global : typeof self === "object" ? self : typeof this === "object" ? this : {};
 | 
			
		||||
    if (typeof define === "function" && define.amd) {
 | 
			
		||||
        define("tslib", ["exports"], function (exports) { factory(createExporter(root, createExporter(exports))); });
 | 
			
		||||
    }
 | 
			
		||||
    else if ( true && typeof module.exports === "object") {
 | 
			
		||||
        factory(createExporter(root, createExporter(module.exports)));
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        factory(createExporter(root));
 | 
			
		||||
    }
 | 
			
		||||
    function createExporter(exports, previous) {
 | 
			
		||||
        if (exports !== root) {
 | 
			
		||||
            if (typeof Object.create === "function") {
 | 
			
		||||
                Object.defineProperty(exports, "__esModule", { value: true });
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                exports.__esModule = true;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return function (id, v) { return exports[id] = previous ? previous(id, v) : v; };
 | 
			
		||||
    }
 | 
			
		||||
})
 | 
			
		||||
(function (exporter) {
 | 
			
		||||
    var extendStatics = Object.setPrototypeOf ||
 | 
			
		||||
        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
 | 
			
		||||
        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
 | 
			
		||||
 | 
			
		||||
    __extends = function (d, b) {
 | 
			
		||||
        if (typeof b !== "function" && b !== null)
 | 
			
		||||
            throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
 | 
			
		||||
        extendStatics(d, b);
 | 
			
		||||
        function __() { this.constructor = d; }
 | 
			
		||||
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __assign = Object.assign || function (t) {
 | 
			
		||||
        for (var s, i = 1, n = arguments.length; i < n; i++) {
 | 
			
		||||
            s = arguments[i];
 | 
			
		||||
            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
 | 
			
		||||
        }
 | 
			
		||||
        return t;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __rest = function (s, e) {
 | 
			
		||||
        var t = {};
 | 
			
		||||
        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
 | 
			
		||||
            t[p] = s[p];
 | 
			
		||||
        if (s != null && typeof Object.getOwnPropertySymbols === "function")
 | 
			
		||||
            for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
 | 
			
		||||
                if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
 | 
			
		||||
                    t[p[i]] = s[p[i]];
 | 
			
		||||
            }
 | 
			
		||||
        return t;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __decorate = function (decorators, target, key, desc) {
 | 
			
		||||
        var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
 | 
			
		||||
        if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
 | 
			
		||||
        else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
 | 
			
		||||
        return c > 3 && r && Object.defineProperty(target, key, r), r;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __param = function (paramIndex, decorator) {
 | 
			
		||||
        return function (target, key) { decorator(target, key, paramIndex); }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __metadata = function (metadataKey, metadataValue) {
 | 
			
		||||
        if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __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());
 | 
			
		||||
        });
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __generator = function (thisArg, body) {
 | 
			
		||||
        var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
 | 
			
		||||
        return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
 | 
			
		||||
        function verb(n) { return function (v) { return step([n, v]); }; }
 | 
			
		||||
        function step(op) {
 | 
			
		||||
            if (f) throw new TypeError("Generator is already executing.");
 | 
			
		||||
            while (_) try {
 | 
			
		||||
                if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
 | 
			
		||||
                if (y = 0, t) op = [op[0] & 2, t.value];
 | 
			
		||||
                switch (op[0]) {
 | 
			
		||||
                    case 0: case 1: t = op; break;
 | 
			
		||||
                    case 4: _.label++; return { value: op[1], done: false };
 | 
			
		||||
                    case 5: _.label++; y = op[1]; op = [0]; continue;
 | 
			
		||||
                    case 7: op = _.ops.pop(); _.trys.pop(); continue;
 | 
			
		||||
                    default:
 | 
			
		||||
                        if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
 | 
			
		||||
                        if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
 | 
			
		||||
                        if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
 | 
			
		||||
                        if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
 | 
			
		||||
                        if (t[2]) _.ops.pop();
 | 
			
		||||
                        _.trys.pop(); continue;
 | 
			
		||||
                }
 | 
			
		||||
                op = body.call(thisArg, _);
 | 
			
		||||
            } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
 | 
			
		||||
            if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __exportStar = function(m, o) {
 | 
			
		||||
        for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __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];
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    __values = function (o) {
 | 
			
		||||
        var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
 | 
			
		||||
        if (m) return m.call(o);
 | 
			
		||||
        if (o && typeof o.length === "number") return {
 | 
			
		||||
            next: function () {
 | 
			
		||||
                if (o && i >= o.length) o = void 0;
 | 
			
		||||
                return { value: o && o[i++], done: !o };
 | 
			
		||||
            }
 | 
			
		||||
        };
 | 
			
		||||
        throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __read = function (o, n) {
 | 
			
		||||
        var m = typeof Symbol === "function" && o[Symbol.iterator];
 | 
			
		||||
        if (!m) return o;
 | 
			
		||||
        var i = m.call(o), r, ar = [], e;
 | 
			
		||||
        try {
 | 
			
		||||
            while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
 | 
			
		||||
        }
 | 
			
		||||
        catch (error) { e = { error: error }; }
 | 
			
		||||
        finally {
 | 
			
		||||
            try {
 | 
			
		||||
                if (r && !r.done && (m = i["return"])) m.call(i);
 | 
			
		||||
            }
 | 
			
		||||
            finally { if (e) throw e.error; }
 | 
			
		||||
        }
 | 
			
		||||
        return ar;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    /** @deprecated */
 | 
			
		||||
    __spread = function () {
 | 
			
		||||
        for (var ar = [], i = 0; i < arguments.length; i++)
 | 
			
		||||
            ar = ar.concat(__read(arguments[i]));
 | 
			
		||||
        return ar;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    /** @deprecated */
 | 
			
		||||
    __spreadArrays = function () {
 | 
			
		||||
        for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
 | 
			
		||||
        for (var r = Array(s), k = 0, i = 0; i < il; i++)
 | 
			
		||||
            for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
 | 
			
		||||
                r[k] = a[j];
 | 
			
		||||
        return r;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __spreadArray = function (to, from, pack) {
 | 
			
		||||
        if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
 | 
			
		||||
            if (ar || !(i in from)) {
 | 
			
		||||
                if (!ar) ar = Array.prototype.slice.call(from, 0, i);
 | 
			
		||||
                ar[i] = from[i];
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return to.concat(ar || Array.prototype.slice.call(from));
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __await = function (v) {
 | 
			
		||||
        return this instanceof __await ? (this.v = v, this) : new __await(v);
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __asyncGenerator = function (thisArg, _arguments, generator) {
 | 
			
		||||
        if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
 | 
			
		||||
        var g = generator.apply(thisArg, _arguments || []), i, q = [];
 | 
			
		||||
        return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
 | 
			
		||||
        function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
 | 
			
		||||
        function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
 | 
			
		||||
        function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);  }
 | 
			
		||||
        function fulfill(value) { resume("next", value); }
 | 
			
		||||
        function reject(value) { resume("throw", value); }
 | 
			
		||||
        function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __asyncDelegator = function (o) {
 | 
			
		||||
        var i, p;
 | 
			
		||||
        return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
 | 
			
		||||
        function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __asyncValues = function (o) {
 | 
			
		||||
        if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
 | 
			
		||||
        var m = o[Symbol.asyncIterator], i;
 | 
			
		||||
        return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
 | 
			
		||||
        function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
 | 
			
		||||
        function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __makeTemplateObject = function (cooked, raw) {
 | 
			
		||||
        if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
 | 
			
		||||
        return cooked;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    var __setModuleDefault = Object.create ? (function(o, v) {
 | 
			
		||||
        Object.defineProperty(o, "default", { enumerable: true, value: v });
 | 
			
		||||
    }) : function(o, v) {
 | 
			
		||||
        o["default"] = v;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __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;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __importDefault = function (mod) {
 | 
			
		||||
        return (mod && mod.__esModule) ? mod : { "default": mod };
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __classPrivateFieldGet = function (receiver, state, kind, f) {
 | 
			
		||||
        if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
 | 
			
		||||
        if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
 | 
			
		||||
        return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __classPrivateFieldSet = function (receiver, state, value, kind, f) {
 | 
			
		||||
        if (kind === "m") throw new TypeError("Private method is not writable");
 | 
			
		||||
        if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
 | 
			
		||||
        if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
 | 
			
		||||
        return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    exporter("__extends", __extends);
 | 
			
		||||
    exporter("__assign", __assign);
 | 
			
		||||
    exporter("__rest", __rest);
 | 
			
		||||
    exporter("__decorate", __decorate);
 | 
			
		||||
    exporter("__param", __param);
 | 
			
		||||
    exporter("__metadata", __metadata);
 | 
			
		||||
    exporter("__awaiter", __awaiter);
 | 
			
		||||
    exporter("__generator", __generator);
 | 
			
		||||
    exporter("__exportStar", __exportStar);
 | 
			
		||||
    exporter("__createBinding", __createBinding);
 | 
			
		||||
    exporter("__values", __values);
 | 
			
		||||
    exporter("__read", __read);
 | 
			
		||||
    exporter("__spread", __spread);
 | 
			
		||||
    exporter("__spreadArrays", __spreadArrays);
 | 
			
		||||
    exporter("__spreadArray", __spreadArray);
 | 
			
		||||
    exporter("__await", __await);
 | 
			
		||||
    exporter("__asyncGenerator", __asyncGenerator);
 | 
			
		||||
    exporter("__asyncDelegator", __asyncDelegator);
 | 
			
		||||
    exporter("__asyncValues", __asyncValues);
 | 
			
		||||
    exporter("__makeTemplateObject", __makeTemplateObject);
 | 
			
		||||
    exporter("__importStar", __importStar);
 | 
			
		||||
    exporter("__importDefault", __importDefault);
 | 
			
		||||
    exporter("__classPrivateFieldGet", __classPrivateFieldGet);
 | 
			
		||||
    exporter("__classPrivateFieldSet", __classPrivateFieldSet);
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/***/ }),
 | 
			
		||||
/* 641 */,
 | 
			
		||||
/* 642 */,
 | 
			
		||||
/* 643 */,
 | 
			
		||||
@@ -47089,7 +47329,6 @@ const path = __importStar(__webpack_require__(622));
 | 
			
		||||
const utils = __importStar(__webpack_require__(15));
 | 
			
		||||
const cacheHttpClient = __importStar(__webpack_require__(114));
 | 
			
		||||
const tar_1 = __webpack_require__(434);
 | 
			
		||||
const constants_1 = __webpack_require__(931);
 | 
			
		||||
class ValidationError extends Error {
 | 
			
		||||
    constructor(message) {
 | 
			
		||||
        super(message);
 | 
			
		||||
@@ -47151,32 +47390,17 @@ function restoreCache(paths, primaryKey, restoreKeys, options) {
 | 
			
		||||
        for (const key of keys) {
 | 
			
		||||
            checkKey(key);
 | 
			
		||||
        }
 | 
			
		||||
        let cacheEntry;
 | 
			
		||||
        let compressionMethod = yield utils.getCompressionMethod();
 | 
			
		||||
        const compressionMethod = yield utils.getCompressionMethod();
 | 
			
		||||
        let archivePath = '';
 | 
			
		||||
        try {
 | 
			
		||||
            // path are needed to compute version
 | 
			
		||||
            cacheEntry = yield cacheHttpClient.getCacheEntry(keys, paths, {
 | 
			
		||||
            const cacheEntry = yield cacheHttpClient.getCacheEntry(keys, paths, {
 | 
			
		||||
                compressionMethod
 | 
			
		||||
            });
 | 
			
		||||
            if (!(cacheEntry === null || cacheEntry === void 0 ? void 0 : cacheEntry.archiveLocation)) {
 | 
			
		||||
                // This is to support the old cache entry created by gzip on windows.
 | 
			
		||||
                if (process.platform === 'win32' &&
 | 
			
		||||
                    compressionMethod !== constants_1.CompressionMethod.Gzip) {
 | 
			
		||||
                    compressionMethod = constants_1.CompressionMethod.Gzip;
 | 
			
		||||
                    cacheEntry = yield cacheHttpClient.getCacheEntry(keys, paths, {
 | 
			
		||||
                        compressionMethod
 | 
			
		||||
                    });
 | 
			
		||||
                    if (!(cacheEntry === null || cacheEntry === void 0 ? void 0 : cacheEntry.archiveLocation)) {
 | 
			
		||||
                        return undefined;
 | 
			
		||||
                    }
 | 
			
		||||
                    core.debug("Couldn't find cache entry with zstd compression, falling back to gzip compression.");
 | 
			
		||||
                }
 | 
			
		||||
                else {
 | 
			
		||||
                // Cache not found
 | 
			
		||||
                return undefined;
 | 
			
		||||
            }
 | 
			
		||||
            }
 | 
			
		||||
            archivePath = path.join(yield utils.createTempDirectory(), utils.getCacheFileName(compressionMethod));
 | 
			
		||||
            core.debug(`Archive Path: ${archivePath}`);
 | 
			
		||||
            // Download the cache from the cache entry
 | 
			
		||||
@@ -53261,11 +53485,6 @@ var CompressionMethod;
 | 
			
		||||
    CompressionMethod["ZstdWithoutLong"] = "zstd-without-long";
 | 
			
		||||
    CompressionMethod["Zstd"] = "zstd";
 | 
			
		||||
})(CompressionMethod = exports.CompressionMethod || (exports.CompressionMethod = {}));
 | 
			
		||||
var ArchiveToolType;
 | 
			
		||||
(function (ArchiveToolType) {
 | 
			
		||||
    ArchiveToolType["GNU"] = "gnu";
 | 
			
		||||
    ArchiveToolType["BSD"] = "bsd";
 | 
			
		||||
})(ArchiveToolType = exports.ArchiveToolType || (exports.ArchiveToolType = {}));
 | 
			
		||||
// The default number of retry attempts.
 | 
			
		||||
exports.DefaultRetryAttempts = 2;
 | 
			
		||||
// The default delay in milliseconds between retry attempts.
 | 
			
		||||
@@ -53274,12 +53493,6 @@ exports.DefaultRetryDelay = 5000;
 | 
			
		||||
// over the socket during this period, the socket is destroyed and the download
 | 
			
		||||
// is aborted.
 | 
			
		||||
exports.SocketTimeout = 5000;
 | 
			
		||||
// The default path of GNUtar on hosted Windows runners
 | 
			
		||||
exports.GnuTarPathOnWindows = `${process.env['PROGRAMFILES']}\\Git\\usr\\bin\\tar.exe`;
 | 
			
		||||
// The default path of BSDtar on hosted Windows runners
 | 
			
		||||
exports.SystemTarPathOnWindows = `${process.env['SYSTEMDRIVE']}\\Windows\\System32\\tar.exe`;
 | 
			
		||||
exports.TarFilename = 'cache.tar';
 | 
			
		||||
exports.ManifestFilename = 'manifest.txt';
 | 
			
		||||
//# sourceMappingURL=constants.js.map
 | 
			
		||||
 | 
			
		||||
/***/ }),
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										701
									
								
								dist/save/index.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										701
									
								
								dist/save/index.js
									
									
									
									
										vendored
									
									
								
							@@ -1177,6 +1177,10 @@ function getVersion(app) {
 | 
			
		||||
// Use zstandard if possible to maximize cache performance
 | 
			
		||||
function getCompressionMethod() {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        if (process.platform === 'win32' && !(yield isGnuTarInstalled())) {
 | 
			
		||||
            // Disable zstd due to bug https://github.com/actions/cache/issues/301
 | 
			
		||||
            return constants_1.CompressionMethod.Gzip;
 | 
			
		||||
        }
 | 
			
		||||
        const versionOutput = yield getVersion('zstd');
 | 
			
		||||
        const version = semver.clean(versionOutput);
 | 
			
		||||
        if (!versionOutput.toLowerCase().includes('zstd command line interface')) {
 | 
			
		||||
@@ -1200,16 +1204,13 @@ function getCacheFileName(compressionMethod) {
 | 
			
		||||
        : constants_1.CacheFilename.Zstd;
 | 
			
		||||
}
 | 
			
		||||
exports.getCacheFileName = getCacheFileName;
 | 
			
		||||
function getGnuTarPathOnWindows() {
 | 
			
		||||
function isGnuTarInstalled() {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        if (fs.existsSync(constants_1.GnuTarPathOnWindows)) {
 | 
			
		||||
            return constants_1.GnuTarPathOnWindows;
 | 
			
		||||
        }
 | 
			
		||||
        const versionOutput = yield getVersion('tar');
 | 
			
		||||
        return versionOutput.toLowerCase().includes('gnu tar') ? io.which('tar') : '';
 | 
			
		||||
        return versionOutput.toLowerCase().includes('gnu tar');
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
exports.getGnuTarPathOnWindows = getGnuTarPathOnWindows;
 | 
			
		||||
exports.isGnuTarInstalled = isGnuTarInstalled;
 | 
			
		||||
function assertDefined(name, value) {
 | 
			
		||||
    if (value === undefined) {
 | 
			
		||||
        throw Error(`Expected ${name} but value was undefiend`);
 | 
			
		||||
@@ -3045,18 +3046,19 @@ exports.default = _default;
 | 
			
		||||
/***/ }),
 | 
			
		||||
/* 105 */,
 | 
			
		||||
/* 106 */
 | 
			
		||||
/***/ (function(__unusedmodule, exports) {
 | 
			
		||||
/***/ (function(__unusedmodule, exports, __webpack_require__) {
 | 
			
		||||
 | 
			
		||||
"use strict";
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
Object.defineProperty(exports, '__esModule', { value: true });
 | 
			
		||||
 | 
			
		||||
var tslib = __webpack_require__(640);
 | 
			
		||||
 | 
			
		||||
// Copyright (c) Microsoft Corporation.
 | 
			
		||||
// Licensed under the MIT license.
 | 
			
		||||
/// <reference path="../shims-public.d.ts" />
 | 
			
		||||
const listenersMap = new WeakMap();
 | 
			
		||||
const abortedMap = new WeakMap();
 | 
			
		||||
var listenersMap = new WeakMap();
 | 
			
		||||
var abortedMap = new WeakMap();
 | 
			
		||||
/**
 | 
			
		||||
 * An aborter instance implements AbortSignal interface, can abort HTTP requests.
 | 
			
		||||
 *
 | 
			
		||||
@@ -3070,8 +3072,8 @@ const abortedMap = new WeakMap();
 | 
			
		||||
 * await doAsyncWork(AbortSignal.none);
 | 
			
		||||
 * ```
 | 
			
		||||
 */
 | 
			
		||||
class AbortSignal {
 | 
			
		||||
    constructor() {
 | 
			
		||||
var AbortSignal = /** @class */ (function () {
 | 
			
		||||
    function AbortSignal() {
 | 
			
		||||
        /**
 | 
			
		||||
         * onabort event listener.
 | 
			
		||||
         */
 | 
			
		||||
@@ -3079,65 +3081,74 @@ class AbortSignal {
 | 
			
		||||
        listenersMap.set(this, []);
 | 
			
		||||
        abortedMap.set(this, false);
 | 
			
		||||
    }
 | 
			
		||||
    Object.defineProperty(AbortSignal.prototype, "aborted", {
 | 
			
		||||
        /**
 | 
			
		||||
         * Status of whether aborted or not.
 | 
			
		||||
         *
 | 
			
		||||
         * @readonly
 | 
			
		||||
         */
 | 
			
		||||
    get aborted() {
 | 
			
		||||
        get: function () {
 | 
			
		||||
            if (!abortedMap.has(this)) {
 | 
			
		||||
                throw new TypeError("Expected `this` to be an instance of AbortSignal.");
 | 
			
		||||
            }
 | 
			
		||||
            return abortedMap.get(this);
 | 
			
		||||
    }
 | 
			
		||||
        },
 | 
			
		||||
        enumerable: false,
 | 
			
		||||
        configurable: true
 | 
			
		||||
    });
 | 
			
		||||
    Object.defineProperty(AbortSignal, "none", {
 | 
			
		||||
        /**
 | 
			
		||||
         * Creates a new AbortSignal instance that will never be aborted.
 | 
			
		||||
         *
 | 
			
		||||
         * @readonly
 | 
			
		||||
         */
 | 
			
		||||
    static get none() {
 | 
			
		||||
        get: function () {
 | 
			
		||||
            return new AbortSignal();
 | 
			
		||||
    }
 | 
			
		||||
        },
 | 
			
		||||
        enumerable: false,
 | 
			
		||||
        configurable: true
 | 
			
		||||
    });
 | 
			
		||||
    /**
 | 
			
		||||
     * Added new "abort" event listener, only support "abort" event.
 | 
			
		||||
     *
 | 
			
		||||
     * @param _type - Only support "abort" event
 | 
			
		||||
     * @param listener - The listener to be added
 | 
			
		||||
     */
 | 
			
		||||
    addEventListener(
 | 
			
		||||
    AbortSignal.prototype.addEventListener = function (
 | 
			
		||||
    // tslint:disable-next-line:variable-name
 | 
			
		||||
    _type, listener) {
 | 
			
		||||
        if (!listenersMap.has(this)) {
 | 
			
		||||
            throw new TypeError("Expected `this` to be an instance of AbortSignal.");
 | 
			
		||||
        }
 | 
			
		||||
        const listeners = listenersMap.get(this);
 | 
			
		||||
        var listeners = listenersMap.get(this);
 | 
			
		||||
        listeners.push(listener);
 | 
			
		||||
    }
 | 
			
		||||
    };
 | 
			
		||||
    /**
 | 
			
		||||
     * Remove "abort" event listener, only support "abort" event.
 | 
			
		||||
     *
 | 
			
		||||
     * @param _type - Only support "abort" event
 | 
			
		||||
     * @param listener - The listener to be removed
 | 
			
		||||
     */
 | 
			
		||||
    removeEventListener(
 | 
			
		||||
    AbortSignal.prototype.removeEventListener = function (
 | 
			
		||||
    // tslint:disable-next-line:variable-name
 | 
			
		||||
    _type, listener) {
 | 
			
		||||
        if (!listenersMap.has(this)) {
 | 
			
		||||
            throw new TypeError("Expected `this` to be an instance of AbortSignal.");
 | 
			
		||||
        }
 | 
			
		||||
        const listeners = listenersMap.get(this);
 | 
			
		||||
        const index = listeners.indexOf(listener);
 | 
			
		||||
        var listeners = listenersMap.get(this);
 | 
			
		||||
        var index = listeners.indexOf(listener);
 | 
			
		||||
        if (index > -1) {
 | 
			
		||||
            listeners.splice(index, 1);
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    };
 | 
			
		||||
    /**
 | 
			
		||||
     * Dispatches a synthetic event to the AbortSignal.
 | 
			
		||||
     */
 | 
			
		||||
    dispatchEvent(_event) {
 | 
			
		||||
    AbortSignal.prototype.dispatchEvent = function (_event) {
 | 
			
		||||
        throw new Error("This is a stub dispatchEvent implementation that should not be used.  It only exists for type-checking purposes.");
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
    };
 | 
			
		||||
    return AbortSignal;
 | 
			
		||||
}());
 | 
			
		||||
/**
 | 
			
		||||
 * Helper to trigger an abort event immediately, the onabort and all abort event listeners will be triggered.
 | 
			
		||||
 * Will try to trigger abort event for all linked AbortSignal nodes.
 | 
			
		||||
@@ -3155,12 +3166,12 @@ function abortSignal(signal) {
 | 
			
		||||
    if (signal.onabort) {
 | 
			
		||||
        signal.onabort.call(signal);
 | 
			
		||||
    }
 | 
			
		||||
    const listeners = listenersMap.get(signal);
 | 
			
		||||
    var listeners = listenersMap.get(signal);
 | 
			
		||||
    if (listeners) {
 | 
			
		||||
        // Create a copy of listeners so mutations to the array
 | 
			
		||||
        // (e.g. via removeListener calls) don't affect the listeners
 | 
			
		||||
        // we invoke.
 | 
			
		||||
        listeners.slice().forEach((listener) => {
 | 
			
		||||
        listeners.slice().forEach(function (listener) {
 | 
			
		||||
            listener.call(signal, { type: "abort" });
 | 
			
		||||
        });
 | 
			
		||||
    }
 | 
			
		||||
@@ -3186,12 +3197,15 @@ function abortSignal(signal) {
 | 
			
		||||
 * }
 | 
			
		||||
 * ```
 | 
			
		||||
 */
 | 
			
		||||
class AbortError extends Error {
 | 
			
		||||
    constructor(message) {
 | 
			
		||||
        super(message);
 | 
			
		||||
        this.name = "AbortError";
 | 
			
		||||
var AbortError = /** @class */ (function (_super) {
 | 
			
		||||
    tslib.__extends(AbortError, _super);
 | 
			
		||||
    function AbortError(message) {
 | 
			
		||||
        var _this = _super.call(this, message) || this;
 | 
			
		||||
        _this.name = "AbortError";
 | 
			
		||||
        return _this;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
    return AbortError;
 | 
			
		||||
}(Error));
 | 
			
		||||
/**
 | 
			
		||||
 * An AbortController provides an AbortSignal and the associated controls to signal
 | 
			
		||||
 * that an asynchronous operation should be aborted.
 | 
			
		||||
@@ -3226,9 +3240,10 @@ class AbortError extends Error {
 | 
			
		||||
 * await doAsyncWork(aborter.withTimeout(25 * 1000));
 | 
			
		||||
 * ```
 | 
			
		||||
 */
 | 
			
		||||
class AbortController {
 | 
			
		||||
var AbortController = /** @class */ (function () {
 | 
			
		||||
    // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
 | 
			
		||||
    constructor(parentSignals) {
 | 
			
		||||
    function AbortController(parentSignals) {
 | 
			
		||||
        var _this = this;
 | 
			
		||||
        this._signal = new AbortSignal();
 | 
			
		||||
        if (!parentSignals) {
 | 
			
		||||
            return;
 | 
			
		||||
@@ -3238,7 +3253,8 @@ class AbortController {
 | 
			
		||||
            // eslint-disable-next-line prefer-rest-params
 | 
			
		||||
            parentSignals = arguments;
 | 
			
		||||
        }
 | 
			
		||||
        for (const parentSignal of parentSignals) {
 | 
			
		||||
        for (var _i = 0, parentSignals_1 = parentSignals; _i < parentSignals_1.length; _i++) {
 | 
			
		||||
            var parentSignal = parentSignals_1[_i];
 | 
			
		||||
            // if the parent signal has already had abort() called,
 | 
			
		||||
            // then call abort on this signal as well.
 | 
			
		||||
            if (parentSignal.aborted) {
 | 
			
		||||
@@ -3246,42 +3262,47 @@ class AbortController {
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                // when the parent signal aborts, this signal should as well.
 | 
			
		||||
                parentSignal.addEventListener("abort", () => {
 | 
			
		||||
                    this.abort();
 | 
			
		||||
                parentSignal.addEventListener("abort", function () {
 | 
			
		||||
                    _this.abort();
 | 
			
		||||
                });
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    Object.defineProperty(AbortController.prototype, "signal", {
 | 
			
		||||
        /**
 | 
			
		||||
         * The AbortSignal associated with this controller that will signal aborted
 | 
			
		||||
         * when the abort method is called on this controller.
 | 
			
		||||
         *
 | 
			
		||||
         * @readonly
 | 
			
		||||
         */
 | 
			
		||||
    get signal() {
 | 
			
		||||
        get: function () {
 | 
			
		||||
            return this._signal;
 | 
			
		||||
    }
 | 
			
		||||
        },
 | 
			
		||||
        enumerable: false,
 | 
			
		||||
        configurable: true
 | 
			
		||||
    });
 | 
			
		||||
    /**
 | 
			
		||||
     * Signal that any operations passed this controller's associated abort signal
 | 
			
		||||
     * to cancel any remaining work and throw an `AbortError`.
 | 
			
		||||
     */
 | 
			
		||||
    abort() {
 | 
			
		||||
    AbortController.prototype.abort = function () {
 | 
			
		||||
        abortSignal(this._signal);
 | 
			
		||||
    }
 | 
			
		||||
    };
 | 
			
		||||
    /**
 | 
			
		||||
     * Creates a new AbortSignal instance that will abort after the provided ms.
 | 
			
		||||
     * @param ms - Elapsed time in milliseconds to trigger an abort.
 | 
			
		||||
     */
 | 
			
		||||
    static timeout(ms) {
 | 
			
		||||
        const signal = new AbortSignal();
 | 
			
		||||
        const timer = setTimeout(abortSignal, ms, signal);
 | 
			
		||||
    AbortController.timeout = function (ms) {
 | 
			
		||||
        var signal = new AbortSignal();
 | 
			
		||||
        var timer = setTimeout(abortSignal, ms, signal);
 | 
			
		||||
        // Prevent the active Timer from keeping the Node.js event loop active.
 | 
			
		||||
        if (typeof timer.unref === "function") {
 | 
			
		||||
            timer.unref();
 | 
			
		||||
        }
 | 
			
		||||
        return signal;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
    };
 | 
			
		||||
    return AbortController;
 | 
			
		||||
}());
 | 
			
		||||
 | 
			
		||||
exports.AbortController = AbortController;
 | 
			
		||||
exports.AbortError = AbortError;
 | 
			
		||||
@@ -3432,7 +3453,6 @@ function getCacheEntry(keys, paths, options) {
 | 
			
		||||
        const resource = `cache?keys=${encodeURIComponent(keys.join(','))}&version=${version}`;
 | 
			
		||||
        const response = yield requestUtils_1.retryTypedResponse('getCacheEntry', () => __awaiter(this, void 0, void 0, function* () { return httpClient.getJson(getCacheApiUrl(resource)); }));
 | 
			
		||||
        if (response.statusCode === 204) {
 | 
			
		||||
            // Cache not found
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
        if (!requestUtils_1.isSuccessStatusCode(response.statusCode)) {
 | 
			
		||||
@@ -3441,7 +3461,6 @@ function getCacheEntry(keys, paths, options) {
 | 
			
		||||
        const cacheResult = response.result;
 | 
			
		||||
        const cacheDownloadUrl = cacheResult === null || cacheResult === void 0 ? void 0 : cacheResult.archiveLocation;
 | 
			
		||||
        if (!cacheDownloadUrl) {
 | 
			
		||||
            // Cache achiveLocation not found. This should never happen, and hence bail out.
 | 
			
		||||
            throw new Error('Cache not found.');
 | 
			
		||||
        }
 | 
			
		||||
        core.setSecret(cacheDownloadUrl);
 | 
			
		||||
@@ -38036,19 +38055,21 @@ const path = __importStar(__webpack_require__(622));
 | 
			
		||||
const utils = __importStar(__webpack_require__(15));
 | 
			
		||||
const constants_1 = __webpack_require__(931);
 | 
			
		||||
const IS_WINDOWS = process.platform === 'win32';
 | 
			
		||||
// Returns tar path and type: BSD or GNU
 | 
			
		||||
function getTarPath() {
 | 
			
		||||
function getTarPath(args, compressionMethod) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        switch (process.platform) {
 | 
			
		||||
            case 'win32': {
 | 
			
		||||
                const gnuTar = yield utils.getGnuTarPathOnWindows();
 | 
			
		||||
                const systemTar = constants_1.SystemTarPathOnWindows;
 | 
			
		||||
                if (gnuTar) {
 | 
			
		||||
                    // Use GNUtar as default on windows
 | 
			
		||||
                    return { path: gnuTar, type: constants_1.ArchiveToolType.GNU };
 | 
			
		||||
                const systemTar = `${process.env['windir']}\\System32\\tar.exe`;
 | 
			
		||||
                if (compressionMethod !== constants_1.CompressionMethod.Gzip) {
 | 
			
		||||
                    // We only use zstandard compression on windows when gnu tar is installed due to
 | 
			
		||||
                    // a bug with compressing large files with bsdtar + zstd
 | 
			
		||||
                    args.push('--force-local');
 | 
			
		||||
                }
 | 
			
		||||
                else if (fs_1.existsSync(systemTar)) {
 | 
			
		||||
                    return { path: systemTar, type: constants_1.ArchiveToolType.BSD };
 | 
			
		||||
                    return systemTar;
 | 
			
		||||
                }
 | 
			
		||||
                else if (yield utils.isGnuTarInstalled()) {
 | 
			
		||||
                    args.push('--force-local');
 | 
			
		||||
                }
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
@@ -38056,92 +38077,25 @@ function getTarPath() {
 | 
			
		||||
                const gnuTar = yield io.which('gtar', false);
 | 
			
		||||
                if (gnuTar) {
 | 
			
		||||
                    // fix permission denied errors when extracting BSD tar archive with GNU tar - https://github.com/actions/cache/issues/527
 | 
			
		||||
                    return { path: gnuTar, type: constants_1.ArchiveToolType.GNU };
 | 
			
		||||
                }
 | 
			
		||||
                else {
 | 
			
		||||
                    return {
 | 
			
		||||
                        path: yield io.which('tar', true),
 | 
			
		||||
                        type: constants_1.ArchiveToolType.BSD
 | 
			
		||||
                    };
 | 
			
		||||
                    args.push('--delay-directory-restore');
 | 
			
		||||
                    return gnuTar;
 | 
			
		||||
                }
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
            default:
 | 
			
		||||
                break;
 | 
			
		||||
        }
 | 
			
		||||
        // Default assumption is GNU tar is present in path
 | 
			
		||||
        return {
 | 
			
		||||
            path: yield io.which('tar', true),
 | 
			
		||||
            type: constants_1.ArchiveToolType.GNU
 | 
			
		||||
        };
 | 
			
		||||
        return yield io.which('tar', true);
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
// Return arguments for tar as per tarPath, compressionMethod, method type and os
 | 
			
		||||
function getTarArgs(tarPath, compressionMethod, type, archivePath = '') {
 | 
			
		||||
function execTar(args, compressionMethod, cwd) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        const args = [`"${tarPath.path}"`];
 | 
			
		||||
        const cacheFileName = utils.getCacheFileName(compressionMethod);
 | 
			
		||||
        const tarFile = 'cache.tar';
 | 
			
		||||
        const workingDirectory = getWorkingDirectory();
 | 
			
		||||
        // Speficic args for BSD tar on windows for workaround
 | 
			
		||||
        const BSD_TAR_ZSTD = tarPath.type === constants_1.ArchiveToolType.BSD &&
 | 
			
		||||
            compressionMethod !== constants_1.CompressionMethod.Gzip &&
 | 
			
		||||
            IS_WINDOWS;
 | 
			
		||||
        // Method specific args
 | 
			
		||||
        switch (type) {
 | 
			
		||||
            case 'create':
 | 
			
		||||
                args.push('--posix', '-cf', BSD_TAR_ZSTD
 | 
			
		||||
                    ? tarFile
 | 
			
		||||
                    : cacheFileName.replace(new RegExp(`\\${path.sep}`, 'g'), '/'), '--exclude', BSD_TAR_ZSTD
 | 
			
		||||
                    ? tarFile
 | 
			
		||||
                    : cacheFileName.replace(new RegExp(`\\${path.sep}`, 'g'), '/'), '-P', '-C', workingDirectory.replace(new RegExp(`\\${path.sep}`, 'g'), '/'), '--files-from', constants_1.ManifestFilename);
 | 
			
		||||
                break;
 | 
			
		||||
            case 'extract':
 | 
			
		||||
                args.push('-xf', BSD_TAR_ZSTD
 | 
			
		||||
                    ? tarFile
 | 
			
		||||
                    : archivePath.replace(new RegExp(`\\${path.sep}`, 'g'), '/'), '-P', '-C', workingDirectory.replace(new RegExp(`\\${path.sep}`, 'g'), '/'));
 | 
			
		||||
                break;
 | 
			
		||||
            case 'list':
 | 
			
		||||
                args.push('-tf', BSD_TAR_ZSTD
 | 
			
		||||
                    ? tarFile
 | 
			
		||||
                    : archivePath.replace(new RegExp(`\\${path.sep}`, 'g'), '/'), '-P');
 | 
			
		||||
                break;
 | 
			
		||||
        try {
 | 
			
		||||
            yield exec_1.exec(`"${yield getTarPath(args, compressionMethod)}"`, args, { cwd });
 | 
			
		||||
        }
 | 
			
		||||
        // Platform specific args
 | 
			
		||||
        if (tarPath.type === constants_1.ArchiveToolType.GNU) {
 | 
			
		||||
            switch (process.platform) {
 | 
			
		||||
                case 'win32':
 | 
			
		||||
                    args.push('--force-local');
 | 
			
		||||
                    break;
 | 
			
		||||
                case 'darwin':
 | 
			
		||||
                    args.push('--delay-directory-restore');
 | 
			
		||||
                    break;
 | 
			
		||||
        catch (error) {
 | 
			
		||||
            throw new Error(`Tar failed with error: ${error === null || error === void 0 ? void 0 : error.message}`);
 | 
			
		||||
        }
 | 
			
		||||
        }
 | 
			
		||||
        return args;
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
// Returns commands to run tar and compression program
 | 
			
		||||
function getCommands(compressionMethod, type, archivePath = '') {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        let args;
 | 
			
		||||
        const tarPath = yield getTarPath();
 | 
			
		||||
        const tarArgs = yield getTarArgs(tarPath, compressionMethod, type, archivePath);
 | 
			
		||||
        const compressionArgs = type !== 'create'
 | 
			
		||||
            ? yield getDecompressionProgram(tarPath, compressionMethod, archivePath)
 | 
			
		||||
            : yield getCompressionProgram(tarPath, compressionMethod);
 | 
			
		||||
        const BSD_TAR_ZSTD = tarPath.type === constants_1.ArchiveToolType.BSD &&
 | 
			
		||||
            compressionMethod !== constants_1.CompressionMethod.Gzip &&
 | 
			
		||||
            IS_WINDOWS;
 | 
			
		||||
        if (BSD_TAR_ZSTD && type !== 'create') {
 | 
			
		||||
            args = [[...compressionArgs].join(' '), [...tarArgs].join(' ')];
 | 
			
		||||
        }
 | 
			
		||||
        else {
 | 
			
		||||
            args = [[...tarArgs].join(' '), [...compressionArgs].join(' ')];
 | 
			
		||||
        }
 | 
			
		||||
        if (BSD_TAR_ZSTD) {
 | 
			
		||||
            return args;
 | 
			
		||||
        }
 | 
			
		||||
        return [args.join(' ')];
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
function getWorkingDirectory() {
 | 
			
		||||
@@ -38149,116 +38103,91 @@ function getWorkingDirectory() {
 | 
			
		||||
    return (_a = process.env['GITHUB_WORKSPACE']) !== null && _a !== void 0 ? _a : process.cwd();
 | 
			
		||||
}
 | 
			
		||||
// Common function for extractTar and listTar to get the compression method
 | 
			
		||||
function getDecompressionProgram(tarPath, compressionMethod, archivePath) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
function getCompressionProgram(compressionMethod) {
 | 
			
		||||
    // -d: Decompress.
 | 
			
		||||
    // unzstd is equivalent to 'zstd -d'
 | 
			
		||||
    // --long=#: Enables long distance matching with # bits. Maximum is 30 (1GB) on 32-bit OS and 31 (2GB) on 64-bit.
 | 
			
		||||
    // Using 30 here because we also support 32-bit self-hosted runners.
 | 
			
		||||
        const BSD_TAR_ZSTD = tarPath.type === constants_1.ArchiveToolType.BSD &&
 | 
			
		||||
            compressionMethod !== constants_1.CompressionMethod.Gzip &&
 | 
			
		||||
            IS_WINDOWS;
 | 
			
		||||
    switch (compressionMethod) {
 | 
			
		||||
        case constants_1.CompressionMethod.Zstd:
 | 
			
		||||
                return BSD_TAR_ZSTD
 | 
			
		||||
                    ? [
 | 
			
		||||
                        'zstd -d --long=30 -o',
 | 
			
		||||
                        constants_1.TarFilename,
 | 
			
		||||
                        archivePath.replace(new RegExp(`\\${path.sep}`, 'g'), '/')
 | 
			
		||||
                    ]
 | 
			
		||||
                    : [
 | 
			
		||||
            return [
 | 
			
		||||
                '--use-compress-program',
 | 
			
		||||
                        IS_WINDOWS ? '"zstd -d --long=30"' : 'unzstd --long=30'
 | 
			
		||||
                IS_WINDOWS ? 'zstd -d --long=30' : 'unzstd --long=30'
 | 
			
		||||
            ];
 | 
			
		||||
        case constants_1.CompressionMethod.ZstdWithoutLong:
 | 
			
		||||
                return BSD_TAR_ZSTD
 | 
			
		||||
                    ? [
 | 
			
		||||
                        'zstd -d -o',
 | 
			
		||||
                        constants_1.TarFilename,
 | 
			
		||||
                        archivePath.replace(new RegExp(`\\${path.sep}`, 'g'), '/')
 | 
			
		||||
                    ]
 | 
			
		||||
                    : ['--use-compress-program', IS_WINDOWS ? '"zstd -d"' : 'unzstd'];
 | 
			
		||||
            return ['--use-compress-program', IS_WINDOWS ? 'zstd -d' : 'unzstd'];
 | 
			
		||||
        default:
 | 
			
		||||
            return ['-z'];
 | 
			
		||||
    }
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
// Used for creating the archive
 | 
			
		||||
// -T#: Compress using # working thread. If # is 0, attempt to detect and use the number of physical CPU cores.
 | 
			
		||||
// zstdmt is equivalent to 'zstd -T0'
 | 
			
		||||
// --long=#: Enables long distance matching with # bits. Maximum is 30 (1GB) on 32-bit OS and 31 (2GB) on 64-bit.
 | 
			
		||||
// Using 30 here because we also support 32-bit self-hosted runners.
 | 
			
		||||
// Long range mode is added to zstd in v1.3.2 release, so we will not use --long in older version of zstd.
 | 
			
		||||
function getCompressionProgram(tarPath, compressionMethod) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        const cacheFileName = utils.getCacheFileName(compressionMethod);
 | 
			
		||||
        const BSD_TAR_ZSTD = tarPath.type === constants_1.ArchiveToolType.BSD &&
 | 
			
		||||
            compressionMethod !== constants_1.CompressionMethod.Gzip &&
 | 
			
		||||
            IS_WINDOWS;
 | 
			
		||||
        switch (compressionMethod) {
 | 
			
		||||
            case constants_1.CompressionMethod.Zstd:
 | 
			
		||||
                return BSD_TAR_ZSTD
 | 
			
		||||
                    ? [
 | 
			
		||||
                        'zstd -T0 --long=30 -o',
 | 
			
		||||
                        cacheFileName.replace(new RegExp(`\\${path.sep}`, 'g'), '/'),
 | 
			
		||||
                        constants_1.TarFilename
 | 
			
		||||
                    ]
 | 
			
		||||
                    : [
 | 
			
		||||
                        '--use-compress-program',
 | 
			
		||||
                        IS_WINDOWS ? '"zstd -T0 --long=30"' : 'zstdmt --long=30'
 | 
			
		||||
                    ];
 | 
			
		||||
            case constants_1.CompressionMethod.ZstdWithoutLong:
 | 
			
		||||
                return BSD_TAR_ZSTD
 | 
			
		||||
                    ? [
 | 
			
		||||
                        'zstd -T0 -o',
 | 
			
		||||
                        cacheFileName.replace(new RegExp(`\\${path.sep}`, 'g'), '/'),
 | 
			
		||||
                        constants_1.TarFilename
 | 
			
		||||
                    ]
 | 
			
		||||
                    : ['--use-compress-program', IS_WINDOWS ? '"zstd -T0"' : 'zstdmt'];
 | 
			
		||||
            default:
 | 
			
		||||
                return ['-z'];
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
// Executes all commands as separate processes
 | 
			
		||||
function execCommands(commands, cwd) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        for (const command of commands) {
 | 
			
		||||
            try {
 | 
			
		||||
                yield exec_1.exec(command, undefined, { cwd });
 | 
			
		||||
            }
 | 
			
		||||
            catch (error) {
 | 
			
		||||
                throw new Error(`${command.split(' ')[0]} failed with error: ${error === null || error === void 0 ? void 0 : error.message}`);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
// List the contents of a tar
 | 
			
		||||
function listTar(archivePath, compressionMethod) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        const commands = yield getCommands(compressionMethod, 'list', archivePath);
 | 
			
		||||
        yield execCommands(commands);
 | 
			
		||||
        const args = [
 | 
			
		||||
            ...getCompressionProgram(compressionMethod),
 | 
			
		||||
            '-tf',
 | 
			
		||||
            archivePath.replace(new RegExp(`\\${path.sep}`, 'g'), '/'),
 | 
			
		||||
            '-P'
 | 
			
		||||
        ];
 | 
			
		||||
        yield execTar(args, compressionMethod);
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
exports.listTar = listTar;
 | 
			
		||||
// Extract a tar
 | 
			
		||||
function extractTar(archivePath, compressionMethod) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        // Create directory to extract tar into
 | 
			
		||||
        const workingDirectory = getWorkingDirectory();
 | 
			
		||||
        yield io.mkdirP(workingDirectory);
 | 
			
		||||
        const commands = yield getCommands(compressionMethod, 'extract', archivePath);
 | 
			
		||||
        yield execCommands(commands);
 | 
			
		||||
        const args = [
 | 
			
		||||
            ...getCompressionProgram(compressionMethod),
 | 
			
		||||
            '-xf',
 | 
			
		||||
            archivePath.replace(new RegExp(`\\${path.sep}`, 'g'), '/'),
 | 
			
		||||
            '-P',
 | 
			
		||||
            '-C',
 | 
			
		||||
            workingDirectory.replace(new RegExp(`\\${path.sep}`, 'g'), '/')
 | 
			
		||||
        ];
 | 
			
		||||
        yield execTar(args, compressionMethod);
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
exports.extractTar = extractTar;
 | 
			
		||||
// Create a tar
 | 
			
		||||
function createTar(archiveFolder, sourceDirectories, compressionMethod) {
 | 
			
		||||
    return __awaiter(this, void 0, void 0, function* () {
 | 
			
		||||
        // Write source directories to manifest.txt to avoid command length limits
 | 
			
		||||
        fs_1.writeFileSync(path.join(archiveFolder, constants_1.ManifestFilename), sourceDirectories.join('\n'));
 | 
			
		||||
        const commands = yield getCommands(compressionMethod, 'create');
 | 
			
		||||
        yield execCommands(commands, archiveFolder);
 | 
			
		||||
        const manifestFilename = 'manifest.txt';
 | 
			
		||||
        const cacheFileName = utils.getCacheFileName(compressionMethod);
 | 
			
		||||
        fs_1.writeFileSync(path.join(archiveFolder, manifestFilename), sourceDirectories.join('\n'));
 | 
			
		||||
        const workingDirectory = getWorkingDirectory();
 | 
			
		||||
        // -T#: Compress using # working thread. If # is 0, attempt to detect and use the number of physical CPU cores.
 | 
			
		||||
        // zstdmt is equivalent to 'zstd -T0'
 | 
			
		||||
        // --long=#: Enables long distance matching with # bits. Maximum is 30 (1GB) on 32-bit OS and 31 (2GB) on 64-bit.
 | 
			
		||||
        // Using 30 here because we also support 32-bit self-hosted runners.
 | 
			
		||||
        // Long range mode is added to zstd in v1.3.2 release, so we will not use --long in older version of zstd.
 | 
			
		||||
        function getCompressionProgram() {
 | 
			
		||||
            switch (compressionMethod) {
 | 
			
		||||
                case constants_1.CompressionMethod.Zstd:
 | 
			
		||||
                    return [
 | 
			
		||||
                        '--use-compress-program',
 | 
			
		||||
                        IS_WINDOWS ? 'zstd -T0 --long=30' : 'zstdmt --long=30'
 | 
			
		||||
                    ];
 | 
			
		||||
                case constants_1.CompressionMethod.ZstdWithoutLong:
 | 
			
		||||
                    return ['--use-compress-program', IS_WINDOWS ? 'zstd -T0' : 'zstdmt'];
 | 
			
		||||
                default:
 | 
			
		||||
                    return ['-z'];
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        const args = [
 | 
			
		||||
            '--posix',
 | 
			
		||||
            ...getCompressionProgram(),
 | 
			
		||||
            '-cf',
 | 
			
		||||
            cacheFileName.replace(new RegExp(`\\${path.sep}`, 'g'), '/'),
 | 
			
		||||
            '--exclude',
 | 
			
		||||
            cacheFileName.replace(new RegExp(`\\${path.sep}`, 'g'), '/'),
 | 
			
		||||
            '-P',
 | 
			
		||||
            '-C',
 | 
			
		||||
            workingDirectory.replace(new RegExp(`\\${path.sep}`, 'g'), '/'),
 | 
			
		||||
            '--files-from',
 | 
			
		||||
            manifestFilename
 | 
			
		||||
        ];
 | 
			
		||||
        yield execTar(args, compressionMethod, archiveFolder);
 | 
			
		||||
    });
 | 
			
		||||
}
 | 
			
		||||
exports.createTar = createTar;
 | 
			
		||||
@@ -44197,7 +44126,318 @@ exports.default = _default;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/***/ }),
 | 
			
		||||
/* 640 */,
 | 
			
		||||
/* 640 */
 | 
			
		||||
/***/ (function(module) {
 | 
			
		||||
 | 
			
		||||
/*! *****************************************************************************
 | 
			
		||||
Copyright (c) Microsoft Corporation.
 | 
			
		||||
 | 
			
		||||
Permission to use, copy, modify, and/or distribute this software for any
 | 
			
		||||
purpose with or without fee is hereby granted.
 | 
			
		||||
 | 
			
		||||
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
 | 
			
		||||
REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
 | 
			
		||||
AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
 | 
			
		||||
INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
 | 
			
		||||
LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
 | 
			
		||||
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 | 
			
		||||
PERFORMANCE OF THIS SOFTWARE.
 | 
			
		||||
***************************************************************************** */
 | 
			
		||||
/* global global, define, System, Reflect, Promise */
 | 
			
		||||
var __extends;
 | 
			
		||||
var __assign;
 | 
			
		||||
var __rest;
 | 
			
		||||
var __decorate;
 | 
			
		||||
var __param;
 | 
			
		||||
var __metadata;
 | 
			
		||||
var __awaiter;
 | 
			
		||||
var __generator;
 | 
			
		||||
var __exportStar;
 | 
			
		||||
var __values;
 | 
			
		||||
var __read;
 | 
			
		||||
var __spread;
 | 
			
		||||
var __spreadArrays;
 | 
			
		||||
var __spreadArray;
 | 
			
		||||
var __await;
 | 
			
		||||
var __asyncGenerator;
 | 
			
		||||
var __asyncDelegator;
 | 
			
		||||
var __asyncValues;
 | 
			
		||||
var __makeTemplateObject;
 | 
			
		||||
var __importStar;
 | 
			
		||||
var __importDefault;
 | 
			
		||||
var __classPrivateFieldGet;
 | 
			
		||||
var __classPrivateFieldSet;
 | 
			
		||||
var __createBinding;
 | 
			
		||||
(function (factory) {
 | 
			
		||||
    var root = typeof global === "object" ? global : typeof self === "object" ? self : typeof this === "object" ? this : {};
 | 
			
		||||
    if (typeof define === "function" && define.amd) {
 | 
			
		||||
        define("tslib", ["exports"], function (exports) { factory(createExporter(root, createExporter(exports))); });
 | 
			
		||||
    }
 | 
			
		||||
    else if ( true && typeof module.exports === "object") {
 | 
			
		||||
        factory(createExporter(root, createExporter(module.exports)));
 | 
			
		||||
    }
 | 
			
		||||
    else {
 | 
			
		||||
        factory(createExporter(root));
 | 
			
		||||
    }
 | 
			
		||||
    function createExporter(exports, previous) {
 | 
			
		||||
        if (exports !== root) {
 | 
			
		||||
            if (typeof Object.create === "function") {
 | 
			
		||||
                Object.defineProperty(exports, "__esModule", { value: true });
 | 
			
		||||
            }
 | 
			
		||||
            else {
 | 
			
		||||
                exports.__esModule = true;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return function (id, v) { return exports[id] = previous ? previous(id, v) : v; };
 | 
			
		||||
    }
 | 
			
		||||
})
 | 
			
		||||
(function (exporter) {
 | 
			
		||||
    var extendStatics = Object.setPrototypeOf ||
 | 
			
		||||
        ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
 | 
			
		||||
        function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
 | 
			
		||||
 | 
			
		||||
    __extends = function (d, b) {
 | 
			
		||||
        if (typeof b !== "function" && b !== null)
 | 
			
		||||
            throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
 | 
			
		||||
        extendStatics(d, b);
 | 
			
		||||
        function __() { this.constructor = d; }
 | 
			
		||||
        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __assign = Object.assign || function (t) {
 | 
			
		||||
        for (var s, i = 1, n = arguments.length; i < n; i++) {
 | 
			
		||||
            s = arguments[i];
 | 
			
		||||
            for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
 | 
			
		||||
        }
 | 
			
		||||
        return t;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __rest = function (s, e) {
 | 
			
		||||
        var t = {};
 | 
			
		||||
        for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
 | 
			
		||||
            t[p] = s[p];
 | 
			
		||||
        if (s != null && typeof Object.getOwnPropertySymbols === "function")
 | 
			
		||||
            for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
 | 
			
		||||
                if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
 | 
			
		||||
                    t[p[i]] = s[p[i]];
 | 
			
		||||
            }
 | 
			
		||||
        return t;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __decorate = function (decorators, target, key, desc) {
 | 
			
		||||
        var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
 | 
			
		||||
        if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
 | 
			
		||||
        else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
 | 
			
		||||
        return c > 3 && r && Object.defineProperty(target, key, r), r;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __param = function (paramIndex, decorator) {
 | 
			
		||||
        return function (target, key) { decorator(target, key, paramIndex); }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __metadata = function (metadataKey, metadataValue) {
 | 
			
		||||
        if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __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());
 | 
			
		||||
        });
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __generator = function (thisArg, body) {
 | 
			
		||||
        var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
 | 
			
		||||
        return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
 | 
			
		||||
        function verb(n) { return function (v) { return step([n, v]); }; }
 | 
			
		||||
        function step(op) {
 | 
			
		||||
            if (f) throw new TypeError("Generator is already executing.");
 | 
			
		||||
            while (_) try {
 | 
			
		||||
                if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
 | 
			
		||||
                if (y = 0, t) op = [op[0] & 2, t.value];
 | 
			
		||||
                switch (op[0]) {
 | 
			
		||||
                    case 0: case 1: t = op; break;
 | 
			
		||||
                    case 4: _.label++; return { value: op[1], done: false };
 | 
			
		||||
                    case 5: _.label++; y = op[1]; op = [0]; continue;
 | 
			
		||||
                    case 7: op = _.ops.pop(); _.trys.pop(); continue;
 | 
			
		||||
                    default:
 | 
			
		||||
                        if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
 | 
			
		||||
                        if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
 | 
			
		||||
                        if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
 | 
			
		||||
                        if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
 | 
			
		||||
                        if (t[2]) _.ops.pop();
 | 
			
		||||
                        _.trys.pop(); continue;
 | 
			
		||||
                }
 | 
			
		||||
                op = body.call(thisArg, _);
 | 
			
		||||
            } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
 | 
			
		||||
            if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
 | 
			
		||||
        }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __exportStar = function(m, o) {
 | 
			
		||||
        for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __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];
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    __values = function (o) {
 | 
			
		||||
        var s = typeof Symbol === "function" && Symbol.iterator, m = s && o[s], i = 0;
 | 
			
		||||
        if (m) return m.call(o);
 | 
			
		||||
        if (o && typeof o.length === "number") return {
 | 
			
		||||
            next: function () {
 | 
			
		||||
                if (o && i >= o.length) o = void 0;
 | 
			
		||||
                return { value: o && o[i++], done: !o };
 | 
			
		||||
            }
 | 
			
		||||
        };
 | 
			
		||||
        throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __read = function (o, n) {
 | 
			
		||||
        var m = typeof Symbol === "function" && o[Symbol.iterator];
 | 
			
		||||
        if (!m) return o;
 | 
			
		||||
        var i = m.call(o), r, ar = [], e;
 | 
			
		||||
        try {
 | 
			
		||||
            while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
 | 
			
		||||
        }
 | 
			
		||||
        catch (error) { e = { error: error }; }
 | 
			
		||||
        finally {
 | 
			
		||||
            try {
 | 
			
		||||
                if (r && !r.done && (m = i["return"])) m.call(i);
 | 
			
		||||
            }
 | 
			
		||||
            finally { if (e) throw e.error; }
 | 
			
		||||
        }
 | 
			
		||||
        return ar;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    /** @deprecated */
 | 
			
		||||
    __spread = function () {
 | 
			
		||||
        for (var ar = [], i = 0; i < arguments.length; i++)
 | 
			
		||||
            ar = ar.concat(__read(arguments[i]));
 | 
			
		||||
        return ar;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    /** @deprecated */
 | 
			
		||||
    __spreadArrays = function () {
 | 
			
		||||
        for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
 | 
			
		||||
        for (var r = Array(s), k = 0, i = 0; i < il; i++)
 | 
			
		||||
            for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
 | 
			
		||||
                r[k] = a[j];
 | 
			
		||||
        return r;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __spreadArray = function (to, from, pack) {
 | 
			
		||||
        if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {
 | 
			
		||||
            if (ar || !(i in from)) {
 | 
			
		||||
                if (!ar) ar = Array.prototype.slice.call(from, 0, i);
 | 
			
		||||
                ar[i] = from[i];
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return to.concat(ar || Array.prototype.slice.call(from));
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __await = function (v) {
 | 
			
		||||
        return this instanceof __await ? (this.v = v, this) : new __await(v);
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __asyncGenerator = function (thisArg, _arguments, generator) {
 | 
			
		||||
        if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
 | 
			
		||||
        var g = generator.apply(thisArg, _arguments || []), i, q = [];
 | 
			
		||||
        return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
 | 
			
		||||
        function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
 | 
			
		||||
        function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
 | 
			
		||||
        function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r);  }
 | 
			
		||||
        function fulfill(value) { resume("next", value); }
 | 
			
		||||
        function reject(value) { resume("throw", value); }
 | 
			
		||||
        function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __asyncDelegator = function (o) {
 | 
			
		||||
        var i, p;
 | 
			
		||||
        return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
 | 
			
		||||
        function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __asyncValues = function (o) {
 | 
			
		||||
        if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
 | 
			
		||||
        var m = o[Symbol.asyncIterator], i;
 | 
			
		||||
        return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
 | 
			
		||||
        function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
 | 
			
		||||
        function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __makeTemplateObject = function (cooked, raw) {
 | 
			
		||||
        if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
 | 
			
		||||
        return cooked;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    var __setModuleDefault = Object.create ? (function(o, v) {
 | 
			
		||||
        Object.defineProperty(o, "default", { enumerable: true, value: v });
 | 
			
		||||
    }) : function(o, v) {
 | 
			
		||||
        o["default"] = v;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __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;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __importDefault = function (mod) {
 | 
			
		||||
        return (mod && mod.__esModule) ? mod : { "default": mod };
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __classPrivateFieldGet = function (receiver, state, kind, f) {
 | 
			
		||||
        if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
 | 
			
		||||
        if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
 | 
			
		||||
        return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    __classPrivateFieldSet = function (receiver, state, value, kind, f) {
 | 
			
		||||
        if (kind === "m") throw new TypeError("Private method is not writable");
 | 
			
		||||
        if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
 | 
			
		||||
        if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
 | 
			
		||||
        return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    exporter("__extends", __extends);
 | 
			
		||||
    exporter("__assign", __assign);
 | 
			
		||||
    exporter("__rest", __rest);
 | 
			
		||||
    exporter("__decorate", __decorate);
 | 
			
		||||
    exporter("__param", __param);
 | 
			
		||||
    exporter("__metadata", __metadata);
 | 
			
		||||
    exporter("__awaiter", __awaiter);
 | 
			
		||||
    exporter("__generator", __generator);
 | 
			
		||||
    exporter("__exportStar", __exportStar);
 | 
			
		||||
    exporter("__createBinding", __createBinding);
 | 
			
		||||
    exporter("__values", __values);
 | 
			
		||||
    exporter("__read", __read);
 | 
			
		||||
    exporter("__spread", __spread);
 | 
			
		||||
    exporter("__spreadArrays", __spreadArrays);
 | 
			
		||||
    exporter("__spreadArray", __spreadArray);
 | 
			
		||||
    exporter("__await", __await);
 | 
			
		||||
    exporter("__asyncGenerator", __asyncGenerator);
 | 
			
		||||
    exporter("__asyncDelegator", __asyncDelegator);
 | 
			
		||||
    exporter("__asyncValues", __asyncValues);
 | 
			
		||||
    exporter("__makeTemplateObject", __makeTemplateObject);
 | 
			
		||||
    exporter("__importStar", __importStar);
 | 
			
		||||
    exporter("__importDefault", __importDefault);
 | 
			
		||||
    exporter("__classPrivateFieldGet", __classPrivateFieldGet);
 | 
			
		||||
    exporter("__classPrivateFieldSet", __classPrivateFieldSet);
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/***/ }),
 | 
			
		||||
/* 641 */,
 | 
			
		||||
/* 642 */,
 | 
			
		||||
/* 643 */,
 | 
			
		||||
@@ -47175,7 +47415,6 @@ const path = __importStar(__webpack_require__(622));
 | 
			
		||||
const utils = __importStar(__webpack_require__(15));
 | 
			
		||||
const cacheHttpClient = __importStar(__webpack_require__(114));
 | 
			
		||||
const tar_1 = __webpack_require__(434);
 | 
			
		||||
const constants_1 = __webpack_require__(931);
 | 
			
		||||
class ValidationError extends Error {
 | 
			
		||||
    constructor(message) {
 | 
			
		||||
        super(message);
 | 
			
		||||
@@ -47237,32 +47476,17 @@ function restoreCache(paths, primaryKey, restoreKeys, options) {
 | 
			
		||||
        for (const key of keys) {
 | 
			
		||||
            checkKey(key);
 | 
			
		||||
        }
 | 
			
		||||
        let cacheEntry;
 | 
			
		||||
        let compressionMethod = yield utils.getCompressionMethod();
 | 
			
		||||
        const compressionMethod = yield utils.getCompressionMethod();
 | 
			
		||||
        let archivePath = '';
 | 
			
		||||
        try {
 | 
			
		||||
            // path are needed to compute version
 | 
			
		||||
            cacheEntry = yield cacheHttpClient.getCacheEntry(keys, paths, {
 | 
			
		||||
            const cacheEntry = yield cacheHttpClient.getCacheEntry(keys, paths, {
 | 
			
		||||
                compressionMethod
 | 
			
		||||
            });
 | 
			
		||||
            if (!(cacheEntry === null || cacheEntry === void 0 ? void 0 : cacheEntry.archiveLocation)) {
 | 
			
		||||
                // This is to support the old cache entry created by gzip on windows.
 | 
			
		||||
                if (process.platform === 'win32' &&
 | 
			
		||||
                    compressionMethod !== constants_1.CompressionMethod.Gzip) {
 | 
			
		||||
                    compressionMethod = constants_1.CompressionMethod.Gzip;
 | 
			
		||||
                    cacheEntry = yield cacheHttpClient.getCacheEntry(keys, paths, {
 | 
			
		||||
                        compressionMethod
 | 
			
		||||
                    });
 | 
			
		||||
                    if (!(cacheEntry === null || cacheEntry === void 0 ? void 0 : cacheEntry.archiveLocation)) {
 | 
			
		||||
                        return undefined;
 | 
			
		||||
                    }
 | 
			
		||||
                    core.debug("Couldn't find cache entry with zstd compression, falling back to gzip compression.");
 | 
			
		||||
                }
 | 
			
		||||
                else {
 | 
			
		||||
                // Cache not found
 | 
			
		||||
                return undefined;
 | 
			
		||||
            }
 | 
			
		||||
            }
 | 
			
		||||
            archivePath = path.join(yield utils.createTempDirectory(), utils.getCacheFileName(compressionMethod));
 | 
			
		||||
            core.debug(`Archive Path: ${archivePath}`);
 | 
			
		||||
            // Download the cache from the cache entry
 | 
			
		||||
@@ -53264,11 +53488,6 @@ var CompressionMethod;
 | 
			
		||||
    CompressionMethod["ZstdWithoutLong"] = "zstd-without-long";
 | 
			
		||||
    CompressionMethod["Zstd"] = "zstd";
 | 
			
		||||
})(CompressionMethod = exports.CompressionMethod || (exports.CompressionMethod = {}));
 | 
			
		||||
var ArchiveToolType;
 | 
			
		||||
(function (ArchiveToolType) {
 | 
			
		||||
    ArchiveToolType["GNU"] = "gnu";
 | 
			
		||||
    ArchiveToolType["BSD"] = "bsd";
 | 
			
		||||
})(ArchiveToolType = exports.ArchiveToolType || (exports.ArchiveToolType = {}));
 | 
			
		||||
// The default number of retry attempts.
 | 
			
		||||
exports.DefaultRetryAttempts = 2;
 | 
			
		||||
// The default delay in milliseconds between retry attempts.
 | 
			
		||||
@@ -53277,12 +53496,6 @@ exports.DefaultRetryDelay = 5000;
 | 
			
		||||
// over the socket during this period, the socket is destroyed and the download
 | 
			
		||||
// is aborted.
 | 
			
		||||
exports.SocketTimeout = 5000;
 | 
			
		||||
// The default path of GNUtar on hosted Windows runners
 | 
			
		||||
exports.GnuTarPathOnWindows = `${process.env['PROGRAMFILES']}\\Git\\usr\\bin\\tar.exe`;
 | 
			
		||||
// The default path of BSDtar on hosted Windows runners
 | 
			
		||||
exports.SystemTarPathOnWindows = `${process.env['SYSTEMDRIVE']}\\Windows\\System32\\tar.exe`;
 | 
			
		||||
exports.TarFilename = 'cache.tar';
 | 
			
		||||
exports.ManifestFilename = 'manifest.txt';
 | 
			
		||||
//# sourceMappingURL=constants.js.map
 | 
			
		||||
 | 
			
		||||
/***/ }),
 | 
			
		||||
 
 | 
			
		||||
@@ -317,7 +317,7 @@ After [deprecation](https://github.blog/changelog/2022-10-11-github-actions-depr
 | 
			
		||||
### Bash shell
 | 
			
		||||
```yaml
 | 
			
		||||
- name: Get npm cache directory
 | 
			
		||||
  id: npm-cache-dir
 | 
			
		||||
  id: npm-cache
 | 
			
		||||
  shell: bash
 | 
			
		||||
  run: echo "dir=$(npm config get cache)" >> ${GITHUB_OUTPUT}
 | 
			
		||||
```
 | 
			
		||||
@@ -325,7 +325,7 @@ After [deprecation](https://github.blog/changelog/2022-10-11-github-actions-depr
 | 
			
		||||
### PWSH shell
 | 
			
		||||
```yaml
 | 
			
		||||
- name: Get npm cache directory
 | 
			
		||||
  id: npm-cache-dir
 | 
			
		||||
  id: npm-cache
 | 
			
		||||
  shell: pwsh
 | 
			
		||||
  run: echo "dir=$(npm config get cache)" >> ${env:GITHUB_OUTPUT}
 | 
			
		||||
```
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										38
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										38
									
								
								package-lock.json
									
									
									
										generated
									
									
									
								
							@@ -1,15 +1,15 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "cache",
 | 
			
		||||
  "version": "3.1.0-beta.3",
 | 
			
		||||
  "version": "3.0.11",
 | 
			
		||||
  "lockfileVersion": 2,
 | 
			
		||||
  "requires": true,
 | 
			
		||||
  "packages": {
 | 
			
		||||
    "": {
 | 
			
		||||
      "name": "cache",
 | 
			
		||||
      "version": "3.1.0-beta.3",
 | 
			
		||||
      "version": "3.0.11",
 | 
			
		||||
      "license": "MIT",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@actions/cache": "3.1.0-beta.3",
 | 
			
		||||
        "@actions/cache": "^3.0.5",
 | 
			
		||||
        "@actions/core": "^1.10.0",
 | 
			
		||||
        "@actions/exec": "^1.1.1",
 | 
			
		||||
        "@actions/io": "^1.1.2"
 | 
			
		||||
@@ -36,16 +36,15 @@
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@actions/cache": {
 | 
			
		||||
      "version": "3.1.0-beta.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@actions/cache/-/cache-3.1.0-beta.3.tgz",
 | 
			
		||||
      "integrity": "sha512-71S1vd0WKLbC2lAe04pCYqTLBjSa8gURtiqnVBCYAt8QVBjOfwa2D3ESf2m8K2xjUxman/Yimdp7CPJDyFnxZg==",
 | 
			
		||||
      "version": "3.0.5",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@actions/cache/-/cache-3.0.5.tgz",
 | 
			
		||||
      "integrity": "sha512-0WpPmwnRPkn5k5ASmjoX8bY8NrZEPTwN+64nGYJmR/bHjEVgC8svdf5K956wi67tNJBGJky2+UfvNbUOtHmMHg==",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "@actions/core": "^1.10.0",
 | 
			
		||||
        "@actions/exec": "^1.0.1",
 | 
			
		||||
        "@actions/glob": "^0.1.0",
 | 
			
		||||
        "@actions/http-client": "^2.0.1",
 | 
			
		||||
        "@actions/io": "^1.0.1",
 | 
			
		||||
        "@azure/abort-controller": "^1.1.0",
 | 
			
		||||
        "@azure/ms-rest-js": "^2.6.0",
 | 
			
		||||
        "@azure/storage-blob": "^12.8.0",
 | 
			
		||||
        "semver": "^6.1.0",
 | 
			
		||||
@@ -112,14 +111,14 @@
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@azure/abort-controller": {
 | 
			
		||||
      "version": "1.1.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.1.0.tgz",
 | 
			
		||||
      "integrity": "sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==",
 | 
			
		||||
      "version": "1.0.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.0.4.tgz",
 | 
			
		||||
      "integrity": "sha512-lNUmDRVGpanCsiUN3NWxFTdwmdFI53xwhkTFfHDGTYk46ca7Ind3nanJc+U6Zj9Tv+9nTCWRBscWEW1DyKOpTw==",
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "tslib": "^2.2.0"
 | 
			
		||||
        "tslib": "^2.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "engines": {
 | 
			
		||||
        "node": ">=12.0.0"
 | 
			
		||||
        "node": ">=8.0.0"
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "node_modules/@azure/abort-controller/node_modules/tslib": {
 | 
			
		||||
@@ -9722,16 +9721,15 @@
 | 
			
		||||
  },
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "@actions/cache": {
 | 
			
		||||
      "version": "3.1.0-beta.3",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@actions/cache/-/cache-3.1.0-beta.3.tgz",
 | 
			
		||||
      "integrity": "sha512-71S1vd0WKLbC2lAe04pCYqTLBjSa8gURtiqnVBCYAt8QVBjOfwa2D3ESf2m8K2xjUxman/Yimdp7CPJDyFnxZg==",
 | 
			
		||||
      "version": "3.0.5",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@actions/cache/-/cache-3.0.5.tgz",
 | 
			
		||||
      "integrity": "sha512-0WpPmwnRPkn5k5ASmjoX8bY8NrZEPTwN+64nGYJmR/bHjEVgC8svdf5K956wi67tNJBGJky2+UfvNbUOtHmMHg==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "@actions/core": "^1.10.0",
 | 
			
		||||
        "@actions/exec": "^1.0.1",
 | 
			
		||||
        "@actions/glob": "^0.1.0",
 | 
			
		||||
        "@actions/http-client": "^2.0.1",
 | 
			
		||||
        "@actions/io": "^1.0.1",
 | 
			
		||||
        "@azure/abort-controller": "^1.1.0",
 | 
			
		||||
        "@azure/ms-rest-js": "^2.6.0",
 | 
			
		||||
        "@azure/storage-blob": "^12.8.0",
 | 
			
		||||
        "semver": "^6.1.0",
 | 
			
		||||
@@ -9794,11 +9792,11 @@
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    "@azure/abort-controller": {
 | 
			
		||||
      "version": "1.1.0",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.1.0.tgz",
 | 
			
		||||
      "integrity": "sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw==",
 | 
			
		||||
      "version": "1.0.4",
 | 
			
		||||
      "resolved": "https://registry.npmjs.org/@azure/abort-controller/-/abort-controller-1.0.4.tgz",
 | 
			
		||||
      "integrity": "sha512-lNUmDRVGpanCsiUN3NWxFTdwmdFI53xwhkTFfHDGTYk46ca7Ind3nanJc+U6Zj9Tv+9nTCWRBscWEW1DyKOpTw==",
 | 
			
		||||
      "requires": {
 | 
			
		||||
        "tslib": "^2.2.0"
 | 
			
		||||
        "tslib": "^2.0.0"
 | 
			
		||||
      },
 | 
			
		||||
      "dependencies": {
 | 
			
		||||
        "tslib": {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,6 @@
 | 
			
		||||
{
 | 
			
		||||
  "name": "cache",
 | 
			
		||||
  "version": "3.1.0-beta.3",
 | 
			
		||||
  "version": "3.0.11",
 | 
			
		||||
  "private": true,
 | 
			
		||||
  "description": "Cache dependencies and build outputs",
 | 
			
		||||
  "main": "dist/restore/index.js",
 | 
			
		||||
@@ -23,7 +23,7 @@
 | 
			
		||||
  "author": "GitHub",
 | 
			
		||||
  "license": "MIT",
 | 
			
		||||
  "dependencies": {
 | 
			
		||||
    "@actions/cache": "3.1.0-beta.3",
 | 
			
		||||
    "@actions/cache": "^3.0.5",
 | 
			
		||||
    "@actions/core": "^1.10.0",
 | 
			
		||||
    "@actions/exec": "^1.1.1",
 | 
			
		||||
    "@actions/io": "^1.1.2"
 | 
			
		||||
 
 | 
			
		||||
@@ -14,7 +14,7 @@ A cache today is immutable and cannot be updated. But some use cases require the
 | 
			
		||||
          restore-keys: |
 | 
			
		||||
            primes-${{ runner.os }}
 | 
			
		||||
  ```          
 | 
			
		||||
  Please note that this will create a new cache on every run and hence will consume the cache [quota](./README.md#cache-limits).
 | 
			
		||||
  Please note that this will create a new cache on every run and hence will consume the cache [quota](#cache-limits).
 | 
			
		||||
  
 | 
			
		||||
## Use cache across feature branches
 | 
			
		||||
Reusing cache across feature branches is not allowed today to provide cache [isolation](https://docs.github.com/en/actions/using-workflows/caching-dependencies-to-speed-up-workflows#restrictions-for-accessing-a-cache). However if both feature branches are from the default branch, a good way to achieve this is to ensure that the default branch has a cache. This cache will then be consumable by both feature branches.
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user