2020-05-14 23:27:38 +02:00
import * as cache from "@actions/cache" ;
2019-10-30 19:48:49 +01:00
import * as core from "@actions/core" ;
2020-03-18 14:35:13 +01:00
2019-11-13 16:54:39 +01:00
import { Events , Inputs , State } from "./constants" ;
2019-10-30 19:48:49 +01:00
import * as utils from "./utils/actionUtils" ;
2019-11-12 22:48:02 +01:00
async function run ( ) : Promise < void > {
2019-10-30 19:48:49 +01:00
try {
2022-03-23 14:09:24 +01:00
if ( ! cache . isAvailable ( ) ) {
if ( utils . isGhes ( ) ) {
utils . logWarning (
"Cache action is only supported on GHES version >= 3.5. If you are on version >=3.5 Please check with GHES admin if ArtifactCache service is enabled or not."
) ;
}
else {
utils . logWarning (
"Something is going wrong with ArtifactCache service which supports cache actions. Please check https://www.githubstatus.com/ for any ongoing issue in actions."
) ;
}
2020-09-29 16:58:32 +02:00
utils . setCacheHitOutput ( false ) ;
return ;
}
2019-10-30 19:48:49 +01:00
// Validate inputs, this can cause task failure
2019-11-13 16:54:39 +01:00
if ( ! utils . isValidEvent ( ) ) {
2019-11-21 20:37:54 +01:00
utils . logWarning (
2019-11-13 16:54:39 +01:00
` Event Validation Error: The event type ${
process . env [ Events . Key ]
2020-04-17 21:46:46 +02:00
} is not supported because it ' s not tied to a branch or tag ref . `
2019-11-13 16:54:39 +01:00
) ;
2019-11-21 20:37:54 +01:00
return ;
2019-11-13 16:54:39 +01:00
}
2019-10-30 19:48:49 +01:00
const primaryKey = core . getInput ( Inputs . Key , { required : true } ) ;
2020-05-19 19:46:58 +02:00
core . saveState ( State . CachePrimaryKey , primaryKey ) ;
2019-10-30 19:48:49 +01:00
2020-06-02 17:21:03 +02:00
const restoreKeys = utils . getInputAsArray ( Inputs . RestoreKeys ) ;
const cachePaths = utils . getInputAsArray ( Inputs . Path , {
required : true
} ) ;
2019-10-30 19:48:49 +01:00
2020-05-14 23:27:38 +02:00
try {
const cacheKey = await cache . restoreCache (
cachePaths ,
primaryKey ,
restoreKeys
2019-10-30 19:48:49 +01:00
) ;
2020-05-14 23:27:38 +02:00
if ( ! cacheKey ) {
core . info (
` Cache not found for input keys: ${ [
primaryKey ,
. . . restoreKeys
] . join ( ", " ) } `
2019-10-30 19:48:49 +01:00
) ;
return ;
}
2020-05-19 19:46:58 +02:00
// Store the matched cache key
2020-05-14 23:27:38 +02:00
utils . setCacheState ( cacheKey ) ;
2019-10-30 19:48:49 +01:00
2020-05-14 23:27:38 +02:00
const isExactKeyMatch = utils . isExactKeyMatch ( primaryKey , cacheKey ) ;
2019-10-30 19:48:49 +01:00
utils . setCacheHitOutput ( isExactKeyMatch ) ;
2020-05-14 23:27:38 +02:00
core . info ( ` Cache restored from key: ${ cacheKey } ` ) ;
2019-10-30 19:48:49 +01:00
} catch ( error ) {
2020-05-14 23:27:38 +02:00
if ( error . name === cache . ValidationError . name ) {
throw error ;
} else {
utils . logWarning ( error . message ) ;
utils . setCacheHitOutput ( false ) ;
}
2019-10-30 19:48:49 +01:00
}
} catch ( error ) {
core . setFailed ( error . message ) ;
}
}
run ( ) ;
export default run ;