2020-05-15 05:27:38 +08:00
import * as cache from "@actions/cache" ;
2019-10-31 02:48:49 +08:00
import * as core from "@actions/core" ;
2020-03-18 21:35:13 +08:00
2019-11-13 23:54:39 +08:00
import { Events , Inputs , State } from "./constants" ;
2019-10-31 02:48:49 +08:00
import * as utils from "./utils/actionUtils" ;
2019-11-13 05:48:02 +08:00
async function run ( ) : Promise < void > {
2019-10-31 02:48:49 +08:00
try {
2022-03-23 21:09:24 +08: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 22:58:32 +08:00
utils . setCacheHitOutput ( false ) ;
return ;
}
2019-10-31 02:48:49 +08:00
// Validate inputs, this can cause task failure
2019-11-13 23:54:39 +08:00
if ( ! utils . isValidEvent ( ) ) {
2019-11-22 03:37:54 +08:00
utils . logWarning (
2019-11-13 23:54:39 +08:00
` Event Validation Error: The event type ${
process . env [ Events . Key ]
2020-04-18 03:46:46 +08:00
} is not supported because it ' s not tied to a branch or tag ref . `
2019-11-13 23:54:39 +08:00
) ;
2019-11-22 03:37:54 +08:00
return ;
2019-11-13 23:54:39 +08:00
}
2019-10-31 02:48:49 +08:00
const primaryKey = core . getInput ( Inputs . Key , { required : true } ) ;
2020-05-20 01:46:58 +08:00
core . saveState ( State . CachePrimaryKey , primaryKey ) ;
2019-10-31 02:48:49 +08:00
2020-06-02 23:21:03 +08:00
const restoreKeys = utils . getInputAsArray ( Inputs . RestoreKeys ) ;
const cachePaths = utils . getInputAsArray ( Inputs . Path , {
required : true
} ) ;
2019-10-31 02:48:49 +08:00
2020-05-15 05:27:38 +08:00
try {
const cacheKey = await cache . restoreCache (
cachePaths ,
primaryKey ,
restoreKeys
2019-10-31 02:48:49 +08:00
) ;
2020-05-15 05:27:38 +08:00
if ( ! cacheKey ) {
core . info (
` Cache not found for input keys: ${ [
primaryKey ,
. . . restoreKeys
] . join ( ", " ) } `
2019-10-31 02:48:49 +08:00
) ;
return ;
}
2020-05-20 01:46:58 +08:00
// Store the matched cache key
2020-05-15 05:27:38 +08:00
utils . setCacheState ( cacheKey ) ;
2019-10-31 02:48:49 +08:00
2020-05-15 05:27:38 +08:00
const isExactKeyMatch = utils . isExactKeyMatch ( primaryKey , cacheKey ) ;
2019-10-31 02:48:49 +08:00
utils . setCacheHitOutput ( isExactKeyMatch ) ;
2020-05-15 05:27:38 +08:00
core . info ( ` Cache restored from key: ${ cacheKey } ` ) ;
2019-10-31 02:48:49 +08:00
} catch ( error ) {
2020-05-15 05:27:38 +08:00
if ( error . name === cache . ValidationError . name ) {
throw error ;
} else {
utils . logWarning ( error . message ) ;
utils . setCacheHitOutput ( false ) ;
}
2019-10-31 02:48:49 +08:00
}
} catch ( error ) {
core . setFailed ( error . message ) ;
}
}
run ( ) ;
export default run ;