mirror of
https://code.forgejo.org/actions/cache.git
synced 2025-04-16 16:01:22 +02:00
Run tar with sudo [actions/cache#133]
This commit is contained in:
parent
78a4b2143b
commit
1e5552f09c
2 changed files with 24 additions and 17 deletions
|
@ -25,14 +25,15 @@ test("extract tar", async () => {
|
||||||
const tarPath = IS_WINDOWS
|
const tarPath = IS_WINDOWS
|
||||||
? `${process.env["windir"]}\\System32\\tar.exe`
|
? `${process.env["windir"]}\\System32\\tar.exe`
|
||||||
: "tar";
|
: "tar";
|
||||||
|
let tarParams = ["-xz", "-f", archivePath, "-C", targetDirectory];
|
||||||
|
let tarExec = `${tarPath}`;
|
||||||
|
if (!IS_WINDOWS) {
|
||||||
|
tarExec = "sudo";
|
||||||
|
tarParams = [`${tarPath}`, ...tarParams];
|
||||||
|
}
|
||||||
|
|
||||||
expect(execMock).toHaveBeenCalledTimes(1);
|
expect(execMock).toHaveBeenCalledTimes(1);
|
||||||
expect(execMock).toHaveBeenCalledWith(`"${tarPath}"`, [
|
expect(execMock).toHaveBeenCalledWith(`"${tarExec}"`, tarParams);
|
||||||
"-xz",
|
|
||||||
"-f",
|
|
||||||
archivePath,
|
|
||||||
"-C",
|
|
||||||
targetDirectory
|
|
||||||
]);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test("create tar", async () => {
|
test("create tar", async () => {
|
||||||
|
@ -46,13 +47,13 @@ test("create tar", async () => {
|
||||||
const tarPath = IS_WINDOWS
|
const tarPath = IS_WINDOWS
|
||||||
? `${process.env["windir"]}\\System32\\tar.exe`
|
? `${process.env["windir"]}\\System32\\tar.exe`
|
||||||
: "tar";
|
: "tar";
|
||||||
|
let tarParams = ["-cz", "-f", archivePath, "-C", sourceDirectory, "."];
|
||||||
|
let tarExec = `${tarPath}`;
|
||||||
|
if (!IS_WINDOWS) {
|
||||||
|
tarExec = "sudo";
|
||||||
|
tarParams = [`${tarPath}`, ...tarParams];
|
||||||
|
}
|
||||||
|
|
||||||
expect(execMock).toHaveBeenCalledTimes(1);
|
expect(execMock).toHaveBeenCalledTimes(1);
|
||||||
expect(execMock).toHaveBeenCalledWith(`"${tarPath}"`, [
|
expect(execMock).toHaveBeenCalledWith(`"${tarExec}"`, tarParams);
|
||||||
"-cz",
|
|
||||||
"-f",
|
|
||||||
archivePath,
|
|
||||||
"-C",
|
|
||||||
sourceDirectory,
|
|
||||||
"."
|
|
||||||
]);
|
|
||||||
});
|
});
|
||||||
|
|
10
src/tar.ts
10
src/tar.ts
|
@ -15,10 +15,16 @@ async function getTarPath(): Promise<string> {
|
||||||
}
|
}
|
||||||
|
|
||||||
async function execTar(args: string[]): Promise<void> {
|
async function execTar(args: string[]): Promise<void> {
|
||||||
|
const IS_WINDOWS = process.platform === "win32";
|
||||||
try {
|
try {
|
||||||
await exec(`"${await getTarPath()}"`, args);
|
const tarPath = await getTarPath();
|
||||||
|
let tarExec = tarPath;
|
||||||
|
if (!IS_WINDOWS) {
|
||||||
|
tarExec = "sudo";
|
||||||
|
args = [`${tarPath}`, ...args];
|
||||||
|
}
|
||||||
|
await exec(`"${tarExec}"`, args);
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
const IS_WINDOWS = process.platform === "win32";
|
|
||||||
if (IS_WINDOWS) {
|
if (IS_WINDOWS) {
|
||||||
throw new Error(
|
throw new Error(
|
||||||
`Tar failed with error: ${error?.message}. Ensure BSD tar is installed and on the PATH.`
|
`Tar failed with error: ${error?.message}. Ensure BSD tar is installed and on the PATH.`
|
||||||
|
|
Loading…
Add table
Reference in a new issue