Revert "Prefer gtar if available"

This commit is contained in:
Henry Mercer 2025-02-18 10:38:41 +00:00 committed by GitHub
parent acadfedea5
commit 65a3aa1fbc
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 24 additions and 55 deletions

37
lib/tar.js generated
View file

@ -48,8 +48,8 @@ const actions_util_1 = require("./actions-util");
const util_1 = require("./util");
const MIN_REQUIRED_BSD_TAR_VERSION = "3.4.3";
const MIN_REQUIRED_GNU_TAR_VERSION = "1.31";
async function getTarVersion(programName) {
const tar = await io.which(programName, true);
async function getTarVersion() {
const tar = await io.which("tar", true);
let stdout = "";
const exitCode = await new toolrunner_1.ToolRunner(tar, ["--version"], {
listeners: {
@ -59,46 +59,31 @@ async function getTarVersion(programName) {
},
}).exec();
if (exitCode !== 0) {
throw new Error(`Failed to call ${programName} --version`);
throw new Error("Failed to call tar --version");
}
// Return whether this is GNU tar or BSD tar, and the version number
if (stdout.includes("GNU tar")) {
const match = stdout.match(/tar \(GNU tar\) ([0-9.]+)/);
if (!match || !match[1]) {
throw new Error(`Failed to parse output of ${programName} --version.`);
throw new Error("Failed to parse output of tar --version.");
}
return { name: programName, type: "gnu", version: match[1] };
return { type: "gnu", version: match[1] };
}
else if (stdout.includes("bsdtar")) {
const match = stdout.match(/bsdtar ([0-9.]+)/);
if (!match || !match[1]) {
throw new Error(`Failed to parse output of ${programName} --version.`);
throw new Error("Failed to parse output of tar --version.");
}
return { name: programName, type: "bsd", version: match[1] };
return { type: "bsd", version: match[1] };
}
else {
throw new Error("Unknown tar version");
}
}
async function pickTarCommand() {
// bsdtar 3.5.3 on the macos-14 (arm) action runner image is prone to crash with the following
// error messages when extracting zstd archives:
//
// tar: Child process exited with status 1
// tar: Error exit delayed from previous errors.
//
// To avoid this problem, prefer GNU tar under the name "gtar" if it is available.
try {
return await getTarVersion("gtar");
}
catch {
return await getTarVersion("tar");
}
}
async function isZstdAvailable(logger) {
const foundZstdBinary = await (0, util_1.isBinaryAccessible)("zstd", logger);
try {
const tarVersion = await pickTarCommand();
const tarVersion = await getTarVersion();
const { type, version } = tarVersion;
logger.info(`Found ${type} tar version ${version}.`);
switch (type) {
@ -165,9 +150,9 @@ async function extractTarZst(tar, dest, tarVersion, logger) {
args.push("--overwrite");
}
args.push("-f", tar instanceof stream.Readable ? "-" : tar, "-C", dest);
process.stdout.write(`[command]${tarVersion.name} ${args.join(" ")}\n`);
process.stdout.write(`[command]tar ${args.join(" ")}\n`);
await new Promise((resolve, reject) => {
const tarProcess = (0, child_process_1.spawn)(tarVersion.name, args, { stdio: "pipe" });
const tarProcess = (0, child_process_1.spawn)("tar", args, { stdio: "pipe" });
let stdout = "";
tarProcess.stdout?.on("data", (data) => {
stdout += data.toString();
@ -189,7 +174,7 @@ async function extractTarZst(tar, dest, tarVersion, logger) {
}
tarProcess.on("exit", (code) => {
if (code !== 0) {
reject(new actions_util_1.CommandInvocationError(tarVersion.name, args, code ?? undefined, stdout, stderr));
reject(new actions_util_1.CommandInvocationError("tar", args, code ?? undefined, stdout, stderr));
}
resolve();
});

File diff suppressed because one or more lines are too long