@ -3432,6 +3432,7 @@ function getCacheEntry(keys, paths, options) {
const resource = ` cache?keys= ${ encodeURIComponent ( keys . join ( ',' ) ) } &version= ${ version } ` ;
const response = yield requestUtils _1 . retryTypedResponse ( 'getCacheEntry' , ( ) => _ _awaiter ( this , void 0 , void 0 , function * ( ) { return httpClient . getJson ( getCacheApiUrl ( resource ) ) ; } ) ) ;
if ( response . statusCode === 204 ) {
// Cache not found
return null ;
}
if ( ! requestUtils _1 . isSuccessStatusCode ( response . statusCode ) ) {
@ -3440,6 +3441,7 @@ function getCacheEntry(keys, paths, options) {
const cacheResult = response . result ;
const cacheDownloadUrl = cacheResult === null || cacheResult === void 0 ? void 0 : cacheResult . archiveLocation ;
if ( ! cacheDownloadUrl ) {
// Cache achiveLocation not found. This should never happen, and hence bail out.
throw new Error ( 'Cache not found.' ) ;
}
core . setSecret ( cacheDownloadUrl ) ;
@ -38114,7 +38116,7 @@ const path = __importStar(__webpack_require__(622));
const utils = _ _importStar ( _ _webpack _require _ _ ( 15 ) ) ;
const constants _1 = _ _webpack _require _ _ ( 931 ) ;
const IS _WINDOWS = process . platform === 'win32' ;
// Function also mutates the args array. For non-mutation call with passing an empty array.
// Returns tar path and type: BSD or GNU
function getTarPath ( ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
switch ( process . platform ) {
@ -38146,6 +38148,7 @@ function getTarPath() {
default :
break ;
}
// Default assumption is GNU tar is present in path
return {
path : yield io . which ( 'tar' , true ) ,
type : constants _1 . ArchiveToolType . GNU
@ -38159,6 +38162,7 @@ function getTarArgs(tarPath, compressionMethod, type, archivePath = '') {
const cacheFileName = utils . getCacheFileName ( compressionMethod ) ;
const tarFile = 'cache.tar' ;
const workingDirectory = getWorkingDirectory ( ) ;
// Speficic args for BSD tar on windows for workaround
const BSD _TAR _ZSTD = tarPath . type === constants _1 . ArchiveToolType . BSD &&
compressionMethod !== constants _1 . CompressionMethod . Gzip &&
IS _WINDOWS ;
@ -38196,8 +38200,10 @@ function getTarArgs(tarPath, compressionMethod, type, archivePath = '') {
return args ;
} ) ;
}
function getArgs ( compressionMethod , type , archivePath = '' ) {
// Returns commands to run tar and compression program
function getCommands ( compressionMethod , type , archivePath = '' ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
let args ;
const tarPath = yield getTarPath ( ) ;
const tarArgs = yield getTarArgs ( tarPath , compressionMethod , type , archivePath ) ;
const compressionArgs = type !== 'create'
@ -38207,11 +38213,15 @@ function getArgs(compressionMethod, type, archivePath = '') {
compressionMethod !== constants _1 . CompressionMethod . Gzip &&
IS _WINDOWS ;
if ( BSD _TAR _ZSTD && type !== 'create' ) {
return [ ... compressionArgs , ... tarArgs ] . join ( ' ' ) ;
args = [ [ ... compressionArgs ] . join ( ' ' ) , [ ... tarArgs ] . join ( ' ' ) ] ;
}
else {
return [ ... tarArgs , ... compressionArgs ] . join ( ' ' ) ;
args = [ [ ... tarArgs ] . join ( ' ' ) , [ ... compressionArgs ] . join ( ' ' ) ] ;
}
if ( BSD _TAR _ZSTD ) {
return args ;
}
return [ args . join ( ' ' ) ] ;
} ) ;
}
function getWorkingDirectory ( ) {
@ -38234,8 +38244,7 @@ function getDecompressionProgram(tarPath, compressionMethod, archivePath) {
? [
'zstd -d --long=30 -o' ,
constants _1 . TarFilename ,
archivePath . replace ( new RegExp ( ` \\ ${ path . sep } ` , 'g' ) , '/' ) ,
'&&'
archivePath . replace ( new RegExp ( ` \\ ${ path . sep } ` , 'g' ) , '/' )
]
: [
'--use-compress-program' ,
@ -38246,8 +38255,7 @@ function getDecompressionProgram(tarPath, compressionMethod, archivePath) {
? [
'zstd -d -o' ,
constants _1 . TarFilename ,
archivePath . replace ( new RegExp ( ` \\ ${ path . sep } ` , 'g' ) , '/' ) ,
'&&'
archivePath . replace ( new RegExp ( ` \\ ${ path . sep } ` , 'g' ) , '/' )
]
: [ '--use-compress-program' , IS _WINDOWS ? '"zstd -d"' : 'unzstd' ] ;
default :
@ -38255,6 +38263,7 @@ function getDecompressionProgram(tarPath, compressionMethod, archivePath) {
}
} ) ;
}
// Used for creating the archive
// -T#: Compress using # working thread. If # is 0, attempt to detect and use the number of physical CPU cores.
// zstdmt is equivalent to 'zstd -T0'
// --long=#: Enables long distance matching with # bits. Maximum is 30 (1GB) on 32-bit OS and 31 (2GB) on 64-bit.
@ -38270,7 +38279,6 @@ function getCompressionProgram(tarPath, compressionMethod) {
case constants _1 . CompressionMethod . Zstd :
return BSD _TAR _ZSTD
? [
'&&' ,
'zstd -T0 --long=30 -o' ,
cacheFileName . replace ( new RegExp ( ` \\ ${ path . sep } ` , 'g' ) , '/' ) ,
constants _1 . TarFilename
@ -38282,7 +38290,6 @@ function getCompressionProgram(tarPath, compressionMethod) {
case constants _1 . CompressionMethod . ZstdWithoutLong :
return BSD _TAR _ZSTD
? [
'&&' ,
'zstd -T0 -o' ,
cacheFileName . replace ( new RegExp ( ` \\ ${ path . sep } ` , 'g' ) , '/' ) ,
constants _1 . TarFilename
@ -38293,44 +38300,45 @@ function getCompressionProgram(tarPath, compressionMethod) {
}
} ) ;
}
function listTar ( archivePath , compressionMethod ) {
// Executes all commands as separate processes
function execCommands ( commands , cwd ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
const args = yield getArgs ( compressionMethod , 'list' , archivePath ) ;
try {
yield exec _1 . exec ( args ) ;
}
catch ( error ) {
throw new Error ( ` Tar failed with error: ${ error === null || error === void 0 ? void 0 : error . message } ` ) ;
for ( const command of commands ) {
try {
yield exec _1 . exec ( command , undefined , { cwd } ) ;
}
catch ( error ) {
throw new Error ( ` ${ command . split ( ' ' ) [ 0 ] } failed with error: ${ error === null || error === void 0 ? void 0 : error . message } ` ) ;
}
}
} ) ;
}
// List the contents of a tar
function listTar ( archivePath , compressionMethod ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
const commands = yield getCommands ( compressionMethod , 'list' , archivePath ) ;
yield execCommands ( commands ) ;
} ) ;
}
exports . listTar = listTar ;
// Extract a tar
function extractTar ( archivePath , compressionMethod ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
// Create directory to extract tar into
const workingDirectory = getWorkingDirectory ( ) ;
yield io . mkdirP ( workingDirectory ) ;
const args = yield getArgs ( compressionMethod , 'extract' , archivePath ) ;
try {
yield exec _1 . exec ( args ) ;
}
catch ( error ) {
throw new Error ( ` Tar failed with error: ${ error === null || error === void 0 ? void 0 : error . message } ` ) ;
}
const commands = yield getCommands ( compressionMethod , 'extract' , archivePath ) ;
yield execCommands ( commands ) ;
} ) ;
}
exports . extractTar = extractTar ;
// Create a tar
function createTar ( archiveFolder , sourceDirectories , compressionMethod ) {
return _ _awaiter ( this , void 0 , void 0 , function * ( ) {
// Write source directories to manifest.txt to avoid command length limits
fs _1 . writeFileSync ( path . join ( archiveFolder , constants _1 . ManifestFilename ) , sourceDirectories . join ( '\n' ) ) ;
const args = yield getArgs ( compressionMethod , 'create' ) ;
try {
yield exec _1 . exec ( args , undefined , { cwd : archiveFolder } ) ;
}
catch ( error ) {
throw new Error ( ` Tar failed with error: ${ error === null || error === void 0 ? void 0 : error . message } ` ) ;
}
const commands = yield getCommands ( compressionMethod , 'create' ) ;
yield execCommands ( commands , archiveFolder ) ;
} ) ;
}
exports . createTar = createTar ;
@ -47204,15 +47212,12 @@ function restoreCache(paths, primaryKey, restoreKeys, options) {
let compressionMethod = yield utils . getCompressionMethod ( ) ;
let archivePath = '' ;
try {
try {
// path are needed to compute version
cacheEntry = yield cacheHttpClient . getCacheEntry ( keys , paths , {
compressionMethod
} ) ;
}
catch ( error ) {
// This is to support the old cache entry created
// by the old version of the cache action on windows.
// path are needed to compute version
cacheEntry = yield cacheHttpClient . getCacheEntry ( keys , paths , {
compressionMethod
} ) ;
if ( ! ( cacheEntry === null || cacheEntry === void 0 ? void 0 : cacheEntry . archiveLocation ) ) {
// This is to support the old cache entry created by gzip on windows.
if ( process . platform === 'win32' &&
compressionMethod !== constants _1 . CompressionMethod . Gzip ) {
compressionMethod = constants _1 . CompressionMethod . Gzip ;
@ -47220,17 +47225,15 @@ function restoreCache(paths, primaryKey, restoreKeys, options) {
compressionMethod
} ) ;
if ( ! ( cacheEntry === null || cacheEntry === void 0 ? void 0 : cacheEntry . archiveLocation ) ) {
throw error ;
return undefined ;
}
core . debug ( "Couldn't find cache entry with zstd compression, falling back to gzip compression." ) ;
}
else {
throw error ;
// Cache not found
return undefined ;
}
}
if ( ! ( cacheEntry === null || cacheEntry === void 0 ? void 0 : cacheEntry . archiveLocation ) ) {
// Cache not found
return undefined ;
}
archivePath = path . join ( yield utils . createTempDirectory ( ) , utils . getCacheFileName ( compressionMethod ) ) ;
core . debug ( ` Archive Path: ${ archivePath } ` ) ;
// Download the cache from the cache entry