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