diff --git a/packages/cache/__tests__/tar.test.ts b/packages/cache/__tests__/tar.test.ts index 6983d5f7..6579cb3e 100644 --- a/packages/cache/__tests__/tar.test.ts +++ b/packages/cache/__tests__/tar.test.ts @@ -12,6 +12,7 @@ jest.mock('@actions/io') const IS_WINDOWS = process.platform === 'win32' const IS_MAC = process.platform === 'darwin' +const windowsGnuTar = `${process.env['PROGRAMFILES']}\\Git\\usr\\bin\\tar.exe` const defaultTarPath = process.platform === 'darwin' ? 'gtar' : 'tar' @@ -46,7 +47,7 @@ test('zstd extract tar', async () => { : 'cache.tar' const workspace = process.env['GITHUB_WORKSPACE'] const tarPath = IS_WINDOWS - ? `${process.env['PROGRAMFILES']}\\Git\\usr\\bin\\tar.exe` + ? windowsGnuTar : defaultTarPath await tar.extractTar(archivePath, CompressionMethod.Zstd) @@ -82,7 +83,7 @@ test('gzip extract tar', async () => { expect(mkdirMock).toHaveBeenCalledWith(workspace) const tarPath = IS_WINDOWS - ? `${process.env['PROGRAMFILES']}\\Git\\usr\\bin\\tar.exe` + ? windowsGnuTar : defaultTarPath expect(execMock).toHaveBeenCalledTimes(1) expect(execMock).toHaveBeenCalledWith( @@ -144,7 +145,7 @@ test('zstd create tar', async () => { await tar.createTar(archiveFolder, sourceDirectories, CompressionMethod.Zstd) const tarPath = IS_WINDOWS - ? `${process.env['PROGRAMFILES']}\\Git\\usr\\bin\\tar.exe` + ? windowsGnuTar : defaultTarPath expect(execMock).toHaveBeenCalledTimes(1) @@ -184,7 +185,7 @@ test('gzip create tar', async () => { await tar.createTar(archiveFolder, sourceDirectories, CompressionMethod.Gzip) const tarPath = IS_WINDOWS - ? `${process.env['PROGRAMFILES']}\\Git\\usr\\bin\\tar.exe` + ? windowsGnuTar : defaultTarPath expect(execMock).toHaveBeenCalledTimes(1) @@ -221,7 +222,7 @@ test('zstd list tar', async () => { await tar.listTar(archivePath, CompressionMethod.Zstd) const tarPath = IS_WINDOWS - ? `${process.env['PROGRAMFILES']}\\Git\\usr\\bin\\tar.exe` + ? windowsGnuTar : defaultTarPath expect(execMock).toHaveBeenCalledTimes(1) expect(execMock).toHaveBeenCalledWith( @@ -249,7 +250,7 @@ test('zstdWithoutLong list tar', async () => { await tar.listTar(archivePath, CompressionMethod.ZstdWithoutLong) const tarPath = IS_WINDOWS - ? `${process.env['PROGRAMFILES']}\\Git\\usr\\bin\\tar.exe` + ? windowsGnuTar : defaultTarPath expect(execMock).toHaveBeenCalledTimes(1) expect(execMock).toHaveBeenCalledWith( @@ -276,7 +277,7 @@ test('gzip list tar', async () => { await tar.listTar(archivePath, CompressionMethod.Gzip) const tarPath = IS_WINDOWS - ? `${process.env['PROGRAMFILES']}\\Git\\usr\\bin\\tar.exe` + ? windowsGnuTar : defaultTarPath expect(execMock).toHaveBeenCalledTimes(1) expect(execMock).toHaveBeenCalledWith( diff --git a/packages/cache/src/internal/tar.ts b/packages/cache/src/internal/tar.ts index 1941afd1..fab9a925 100644 --- a/packages/cache/src/internal/tar.ts +++ b/packages/cache/src/internal/tar.ts @@ -11,14 +11,15 @@ async function getTarPath( args: string[], compressionMethod: CompressionMethod ): Promise { + var tarPath = await io.which('tar', true) switch (process.platform) { case 'win32': { - const systemTar = `${process.env['windir']}\\System32\\tar.exe` const gnuTar = `${process.env['PROGRAMFILES']}\\Git\\usr\\bin\\tar.exe` + const systemTar = `${process.env['windir']}\\System32\\tar.exe` if (existsSync(gnuTar)) { // Use GNUtar as default on windows args.push('--force-local') - return gnuTar + tarPath = gnuTar } else if ( compressionMethod !== CompressionMethod.Gzip || (await utils.isGnuTarInstalled()) @@ -27,7 +28,7 @@ async function getTarPath( // a bug with compressing large files with bsdtar + zstd args.push('--force-local') } else if (existsSync(systemTar)) { - return systemTar + tarPath = systemTar } break } @@ -36,14 +37,14 @@ async function getTarPath( if (gnuTar) { // fix permission denied errors when extracting BSD tar archive with GNU tar - https://github.com/actions/cache/issues/527 args.push('--delay-directory-restore') - return gnuTar + tarPath = gnuTar } break } default: break } - return await io.which('tar', true) + return tarPath } async function execTar(