-
Notifications
You must be signed in to change notification settings - Fork 7
/
restoreImpl.ts
106 lines (88 loc) · 3.22 KB
/
restoreImpl.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
import * as core from "@actions/core";
import { Events, Inputs, Outputs, State } from "./constants";
import { restoreExtraCaches } from "./restoreExtraCaches";
import { IStateProvider } from "./stateProvider";
import * as utils from "./utils/actionUtils";
async function restoreImpl(
stateProvider: IStateProvider
): Promise<string | undefined> {
try {
if (!utils.isCacheFeatureAvailable()) {
core.setOutput(Outputs.CacheHit, "false");
return;
}
// Validate inputs, this can cause task failure
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 primaryKey = core.getInput(Inputs.Key, { required: true });
stateProvider.setState(State.CachePrimaryKey, primaryKey);
const restoreKeys = utils.getInputAsArray(Inputs.RestoreKeys);
const cachePaths = utils.paths;
const enableCrossOsArchive = utils.getInputAsBool(
Inputs.EnableCrossOsArchive
);
const failOnCacheMiss = utils.getInputAsBool(Inputs.FailOnCacheMiss);
const lookupOnly = utils.getInputAsBool(Inputs.LookupOnly);
let cacheKey = await utils.getCacheKey(
cachePaths,
primaryKey,
restoreKeys,
lookupOnly,
enableCrossOsArchive
);
const restoreKeyHit = utils.getInputAsBool(Inputs.RestoreKeyHit);
const restoreKey = await utils.getCacheKey(
cachePaths,
primaryKey,
restoreKeys,
true,
enableCrossOsArchive
);
if (restoreKeyHit) {
cacheKey = restoreKey;
}
if (!cacheKey) {
if (failOnCacheMiss) {
throw new Error(
`Failed to restore cache entry. Exiting as fail-on-cache-miss is set. Input key: ${primaryKey}`
);
}
core.info(
`Cache not found for input keys: ${JSON.stringify([
primaryKey,
...restoreKeys
])}`
);
await restoreExtraCaches(
cachePaths,
lookupOnly,
enableCrossOsArchive
);
return;
}
// Store the matched cache key in states
stateProvider.setState(State.CacheMatchedKey, cacheKey);
const isExactKeyMatch =
utils.isExactKeyMatch(
core.getInput(Inputs.Key, { required: true }),
cacheKey
) || restoreKeyHit;
core.setOutput(Outputs.CacheHit, isExactKeyMatch.toString());
if (lookupOnly) {
core.info(`Cache found and can be restored from key: ${cacheKey}`);
} else {
core.info(`Cache restored from key: ${cacheKey}`);
}
await restoreExtraCaches(cachePaths, lookupOnly, enableCrossOsArchive);
return cacheKey;
} catch (error: unknown) {
core.setFailed((error as Error).message);
}
}
export default restoreImpl;