2021-06-16 09:52:44 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								import  *  as  core  from  '@actions/core' ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								import  *  as  exec  from  '@actions/exec' ;  
						 
					
						
							
								
									
										
										
										
											2022-03-31 21:10:37 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								import  *  as  cache  from  '@actions/cache' ;  
						 
					
						
							
								
									
										
										
										
											2021-06-16 09:52:44 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								type  SupportedPackageManagers  =  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  [ prop : string ] :  PackageManagerInfo ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								export  interface  PackageManagerInfo  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  lockFilePatterns : Array < string > ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  getCacheFolderCommand : string ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								export  const  supportedPackageManagers : SupportedPackageManagers  =  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  npm :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    lockFilePatterns :  [ 'package-lock.json' ,  'yarn.lock' ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    getCacheFolderCommand :  'npm config get cache' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } , 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-30 16:44:51 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  pnpm :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    lockFilePatterns :  [ 'pnpm-lock.yaml' ] , 
							 
						 
					
						
							
								
									
										
										
										
											2021-07-15 12:43:19 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    getCacheFolderCommand :  'pnpm store path' 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-30 16:44:51 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  } , 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-16 09:52:44 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  yarn1 :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    lockFilePatterns :  [ 'yarn.lock' ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    getCacheFolderCommand :  'yarn cache dir' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  yarn2 :  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    lockFilePatterns :  [ 'yarn.lock' ] , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    getCacheFolderCommand :  'yarn config get cacheFolder' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								export  const  getCommandOutput  =  async  ( toolCommand : string )  = >  {  
						 
					
						
							
								
									
										
										
										
											2021-12-27 12:34:06 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  let  { stdout ,  stderr ,  exitCode }  =  await  exec . getExecOutput ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    toolCommand , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    undefined , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    { ignoreReturnCode : true } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( exitCode )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    stderr  =  ! stderr . trim ( ) 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      ?  ` The ' ${ toolCommand } ' command failed with exit code:  ${ exitCode } ` 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      :  stderr ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-16 09:52:44 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    throw  new  Error ( stderr ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-06-30 16:44:51 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  return  stdout . trim ( ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-16 09:52:44 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const  getPackageManagerVersion  =  async  (  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  packageManager : string , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  command : string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								)  = >  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  stdOut  =  await  getCommandOutput ( ` ${ packageManager }   ${ command } ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( ! stdOut )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    throw  new  Error ( ` Could not retrieve version of  ${ packageManager } ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return  stdOut ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								export  const  getPackageManagerInfo  =  async  ( packageManager : string )  = >  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( packageManager  ===  'npm' )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  supportedPackageManagers . npm ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-30 16:44:51 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  }  else  if  ( packageManager  ===  'pnpm' )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  supportedPackageManagers . pnpm ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-16 09:52:44 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  }  else  if  ( packageManager  ===  'yarn' )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const  yarnVersion  =  await  getPackageManagerVersion ( 'yarn' ,  '--version' ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    core . debug ( ` Consumed yarn version is  ${ yarnVersion } ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( yarnVersion . startsWith ( '1.' ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      return  supportedPackageManagers . yarn1 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      return  supportedPackageManagers . yarn2 ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  null ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								export  const  getCacheDirectoryPath  =  async  (  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  packageManagerInfo : PackageManagerInfo , 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  packageManager : string 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								)  = >  {  
						 
					
						
							
								
									
										
										
										
											2021-07-15 12:43:19 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								  const  stdOut  =  await  getCommandOutput ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    packageManagerInfo . getCacheFolderCommand 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  ) ; 
							 
						 
					
						
							
								
									
										
										
										
											2021-06-16 09:52:44 +03:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( ! stdOut )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    throw  new  Error ( ` Could not get cache folder path for  ${ packageManager } ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  core . debug ( ` ${ packageManager }  path is  ${ stdOut } ` ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return  stdOut ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								} ;  
						 
					
						
							
								
									
										
										
										
											2022-03-31 21:10:37 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								export  function  isGhes ( ) :  boolean  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const  ghUrl  =  new  URL ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    process . env [ 'GITHUB_SERVER_URL' ]  ||  'https://github.com' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return  ghUrl . hostname . toUpperCase ( )  !==  'GITHUB.COM' ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								export  function  isCacheFeatureAvailable ( ) :  boolean  {  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  if  ( ! cache . isFeatureAvailable ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if  ( isGhes ( ) )  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      throw  new  Error ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        'Cache action is only supported on GHES version >= 3.5. If you are on version >=3.5 Please check with GHES admin if Actions cache service is enabled or not.' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }  else  { 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      core . warning ( 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        'The runner was not able to contact the cache service. Caching will be skipped' 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      ) ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return  false ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  } 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  return  true ; 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}