Extract directly to toolcache when feature enabled

This commit is contained in:
Henry Mercer 2024-12-02 18:23:41 +00:00
parent 6695503422
commit 198fb4b4b2
15 changed files with 175 additions and 153 deletions

18
lib/tar.js generated
View file

@ -22,23 +22,17 @@ var __importStar = (this && this.__importStar) || function (mod) {
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.isZstdAvailable = isZstdAvailable;
exports.extract = extract;
exports.extractTarZst = extractTarZst;
exports.createExtractFolder = createExtractFolder;
exports.inferCompressionMethod = inferCompressionMethod;
const child_process_1 = require("child_process");
const fs = __importStar(require("fs"));
const path_1 = __importDefault(require("path"));
const stream = __importStar(require("stream"));
const toolrunner_1 = require("@actions/exec/lib/toolrunner");
const toolcache = __importStar(require("@actions/tool-cache"));
const safe_which_1 = require("@chrisgavin/safe-which");
const uuid_1 = require("uuid");
const actions_util_1 = require("./actions-util");
const util_1 = require("./util");
const MIN_REQUIRED_BSD_TAR_VERSION = "3.4.3";
@ -104,17 +98,18 @@ async function isZstdAvailable(logger) {
return { available: false, foundZstdBinary };
}
}
async function extract(tarPath, compressionMethod, tarVersion, logger) {
async function extract(tarPath, dest, compressionMethod, tarVersion, logger) {
// Ensure destination exists
fs.mkdirSync(dest, { recursive: true });
switch (compressionMethod) {
case "gzip":
// Defensively continue to call the toolcache API as requesting a gzipped
// bundle may be a fallback option.
return await toolcache.extractTar(tarPath);
return await toolcache.extractTar(tarPath, dest);
case "zstd": {
if (!tarVersion) {
throw new Error("Could not determine tar version, which is required to extract a Zstandard archive.");
}
const dest = await createExtractFolder();
await extractTarZst(tarPath, dest, tarVersion, logger);
return dest;
}
@ -169,11 +164,6 @@ async function extractTarZst(tar, dest, tarVersion, logger) {
throw e;
}
}
async function createExtractFolder() {
const dest = path_1.default.join((0, actions_util_1.getTemporaryDirectory)(), (0, uuid_1.v4)());
fs.mkdirSync(dest, { recursive: true });
return dest;
}
function inferCompressionMethod(tarPath) {
if (tarPath.endsWith(".tar.gz")) {
return "gzip";