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
2020-04-22 16:36:34 -04:00
import { Events , Inputs , State } from "./constants" ;
2019-10-30 14:48:49 -04:00
import * as utils from "./utils/actionUtils" ;
2021-05-27 10:46:35 -05:00
// Catch and log any unhandled exceptions. These exceptions can leak out of the uploadChunk method in
// @actions/toolkit when a failed upload closes the file descriptor causing any in-process reads to
// throw an uncaught exception. Instead of failing this action, just warn.
process . on ( "uncaughtException" , e = > utils . logWarning ( e . message ) ) ;
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."
) ;
}
utils . setCacheHitOutput ( false ) ;
2020-09-29 09:58:32 -05:00
return ;
}
2019-11-21 14:37:54 -05:00
if ( ! utils . isValidEvent ( ) ) {
utils . logWarning (
` 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-21 14:37:54 -05:00
) ;
return ;
}
2019-10-30 14:48:49 -04:00
const state = utils . getCacheState ( ) ;
// Inputs are re-evaluted before the post action, so we want the original key used for restore
2020-05-19 13:46:58 -04:00
const primaryKey = core . getState ( State . CachePrimaryKey ) ;
2019-10-30 14:48:49 -04:00
if ( ! primaryKey ) {
2019-11-21 14:37:54 -05:00
utils . logWarning ( ` Error retrieving key from state. ` ) ;
2019-10-30 14:48:49 -04:00
return ;
}
if ( utils . isExactKeyMatch ( primaryKey , state ) ) {
core . info (
` Cache hit occurred on the primary key ${ primaryKey } , not saving cache. `
) ;
return ;
}
2020-06-02 10:21:03 -05:00
const cachePaths = utils . getInputAsArray ( Inputs . Path , {
required : true
} ) ;
2020-05-14 17:27:38 -04:00
try {
2020-10-02 09:59:55 -05:00
await cache . saveCache ( cachePaths , primaryKey , {
uploadChunkSize : utils.getInputAsInt ( Inputs . UploadChunkSize )
} ) ;
2021-02-04 01:07:49 +03:00
core . info ( ` Cache saved with key: ${ primaryKey } ` ) ;
2020-05-14 17:27:38 -04:00
} catch ( error ) {
if ( error . name === cache . ValidationError . name ) {
throw error ;
} else if ( error . name === cache . ReserveCacheError . name ) {
core . info ( error . message ) ;
} else {
utils . logWarning ( error . message ) ;
}
2019-10-30 14:48:49 -04:00
}
} catch ( error ) {
2019-11-21 14:37:54 -05:00
utils . logWarning ( error . message ) ;
2019-10-30 14:48:49 -04:00
}
}
run ( ) ;
export default run ;