diff --git a/packages/cache/RELEASES.md b/packages/cache/RELEASES.md index dc3901f9..201b1a8d 100644 --- a/packages/cache/RELEASES.md +++ b/packages/cache/RELEASES.md @@ -36,4 +36,7 @@ ### 1.0.6 - Make caching more verbose [#650](https://github.com/actions/toolkit/pull/650) -- Use GNU tar on macOS if available [#701](https://github.com/actions/toolkit/pull/701) \ No newline at end of file +- Use GNU tar on macOS if available [#701](https://github.com/actions/toolkit/pull/701) + +### 1.0.7 +- Fixes permissions issue extracting archives with GNU tar on macOS ([issue](https://github.com/actions/cache/issues/527)) diff --git a/packages/cache/__tests__/tar.test.ts b/packages/cache/__tests__/tar.test.ts index 3f7a1b3b..fa81af95 100644 --- a/packages/cache/__tests__/tar.test.ts +++ b/packages/cache/__tests__/tar.test.ts @@ -11,6 +11,7 @@ jest.mock('@actions/exec') jest.mock('@actions/io') const IS_WINDOWS = process.platform === 'win32' +const IS_MAC = process.platform === 'darwin' const defaultTarPath = process.platform === 'darwin' ? 'gtar' : 'tar' @@ -55,7 +56,9 @@ test('zstd extract tar', async () => { '-P', '-C', IS_WINDOWS ? workspace?.replace(/\\/g, '/') : workspace - ].concat(IS_WINDOWS ? ['--force-local'] : []), + ] + .concat(IS_WINDOWS ? ['--force-local'] : []) + .concat(IS_MAC ? ['--delay-directory-restore'] : []), {cwd: undefined} ) }) @@ -84,7 +87,7 @@ test('gzip extract tar', async () => { '-P', '-C', IS_WINDOWS ? workspace?.replace(/\\/g, '/') : workspace - ], + ].concat(IS_MAC ? ['--delay-directory-restore'] : []), {cwd: undefined} ) }) @@ -145,7 +148,9 @@ test('zstd create tar', async () => { IS_WINDOWS ? workspace?.replace(/\\/g, '/') : workspace, '--files-from', 'manifest.txt' - ].concat(IS_WINDOWS ? ['--force-local'] : []), + ] + .concat(IS_WINDOWS ? ['--force-local'] : []) + .concat(IS_MAC ? ['--delay-directory-restore'] : []), { cwd: archiveFolder } @@ -180,7 +185,7 @@ test('gzip create tar', async () => { IS_WINDOWS ? workspace?.replace(/\\/g, '/') : workspace, '--files-from', 'manifest.txt' - ], + ].concat(IS_MAC ? ['--delay-directory-restore'] : []), { cwd: archiveFolder } @@ -205,7 +210,9 @@ test('zstd list tar', async () => { '-tf', IS_WINDOWS ? archivePath.replace(/\\/g, '/') : archivePath, '-P' - ].concat(IS_WINDOWS ? ['--force-local'] : []), + ] + .concat(IS_WINDOWS ? ['--force-local'] : []) + .concat(IS_MAC ? ['--delay-directory-restore'] : []), {cwd: undefined} ) }) @@ -228,7 +235,9 @@ test('zstdWithoutLong list tar', async () => { '-tf', IS_WINDOWS ? archivePath.replace(/\\/g, '/') : archivePath, '-P' - ].concat(IS_WINDOWS ? ['--force-local'] : []), + ] + .concat(IS_WINDOWS ? ['--force-local'] : []) + .concat(IS_MAC ? ['--delay-directory-restore'] : []), {cwd: undefined} ) }) @@ -252,7 +261,7 @@ test('gzip list tar', async () => { '-tf', IS_WINDOWS ? archivePath.replace(/\\/g, '/') : archivePath, '-P' - ], + ].concat(IS_MAC ? ['--delay-directory-restore'] : []), {cwd: undefined} ) }) diff --git a/packages/cache/package-lock.json b/packages/cache/package-lock.json index ab004147..a1a9f8d3 100644 --- a/packages/cache/package-lock.json +++ b/packages/cache/package-lock.json @@ -1,6 +1,6 @@ { "name": "@actions/cache", - "version": "1.0.6", + "version": "1.0.7", "lockfileVersion": 1, "requires": true, "dependencies": { diff --git a/packages/cache/package.json b/packages/cache/package.json index 62dd2bea..7b03e2f5 100644 --- a/packages/cache/package.json +++ b/packages/cache/package.json @@ -1,6 +1,6 @@ { "name": "@actions/cache", - "version": "1.0.6", + "version": "1.0.7", "preview": true, "description": "Actions cache lib", "keywords": [ diff --git a/packages/cache/src/internal/tar.ts b/packages/cache/src/internal/tar.ts index 1b70dac0..fbea7c2e 100644 --- a/packages/cache/src/internal/tar.ts +++ b/packages/cache/src/internal/tar.ts @@ -26,6 +26,8 @@ async function getTarPath( case 'darwin': { const gnuTar = await 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 + args.push('--delay-directory-restore') return gnuTar } break