mirror of
https://github.com/actions/cache.git
synced 2025-08-19 07:35:06 +00:00
When `read-only` is `true`, the cache is only restored and not saved. This allows for sharing the cache with multiple steps even if these steps may change them, and speeds them up regardless.
69 lines
2.0 KiB
TypeScript
69 lines
2.0 KiB
TypeScript
import * as cache from "@actions/cache";
|
|
import * as core from "@actions/core";
|
|
|
|
import { Events, Inputs, State } from "./constants";
|
|
import * as utils from "./utils/actionUtils";
|
|
|
|
async function run(): Promise<void> {
|
|
try {
|
|
if (utils.isGhes()) {
|
|
utils.logWarning("Cache action is not supported on GHES");
|
|
return;
|
|
}
|
|
|
|
if (utils.getInputAsBoolean(Inputs.ReadOnly)) {
|
|
core.info("Cache running in read-only mode, not saving cache.");
|
|
return;
|
|
}
|
|
|
|
if (!utils.isValidEvent()) {
|
|
utils.logWarning(
|
|
`Event Validation Error: The event type ${
|
|
process.env[Events.Key]
|
|
} is not supported because it's not tied to a branch or tag ref.`
|
|
);
|
|
return;
|
|
}
|
|
|
|
const state = utils.getCacheState();
|
|
|
|
// Inputs are re-evaluted before the post action, so we want the original key used for restore
|
|
const primaryKey = core.getState(State.CachePrimaryKey);
|
|
if (!primaryKey) {
|
|
utils.logWarning(`Error retrieving key from state.`);
|
|
return;
|
|
}
|
|
|
|
if (utils.isExactKeyMatch(primaryKey, state)) {
|
|
core.info(
|
|
`Cache hit occurred on the primary key ${primaryKey}, not saving cache.`
|
|
);
|
|
return;
|
|
}
|
|
|
|
const cachePaths = utils.getInputAsArray(Inputs.Path, {
|
|
required: true
|
|
});
|
|
|
|
try {
|
|
await cache.saveCache(cachePaths, primaryKey, {
|
|
uploadChunkSize: utils.getInputAsInt(Inputs.UploadChunkSize)
|
|
});
|
|
} 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);
|
|
}
|
|
}
|
|
} catch (error) {
|
|
utils.logWarning(error.message);
|
|
}
|
|
}
|
|
|
|
run();
|
|
|
|
export default run;
|