Merge pull request #1057 from akv-platform/cache-miss
Do not restore state if the cache does not exist
This commit is contained in:
commit
60f51589e2
|
@ -1611,15 +1611,28 @@ const unlinkSafely = (filePath) => {
|
|||
/* ignore */
|
||||
}
|
||||
};
|
||||
const resetCacheWithOctokit = (cacheKey) => __awaiter(void 0, void 0, void 0, function* () {
|
||||
const getOctokitClient = () => {
|
||||
const token = core.getInput('repo-token');
|
||||
const client = (0, github_1.getOctokit)(token, undefined, plugin_retry_1.retry);
|
||||
// TODO: better way to get repository?
|
||||
const repo = process.env['GITHUB_REPOSITORY'];
|
||||
return (0, github_1.getOctokit)(token, undefined, plugin_retry_1.retry);
|
||||
};
|
||||
const checkIfCacheExists = (cacheKey) => __awaiter(void 0, void 0, void 0, function* () {
|
||||
const client = getOctokitClient();
|
||||
try {
|
||||
const issueResult = yield client.request(`/repos/${github_1.context.repo.owner}/${github_1.context.repo.repo}/actions/caches`);
|
||||
const caches = issueResult.data['actions_caches'] || [];
|
||||
return Boolean(caches.find(cache => cache['key'] === cacheKey));
|
||||
}
|
||||
catch (error) {
|
||||
core.debug(`Error checking if cache exist: ${error.message}`);
|
||||
}
|
||||
return false;
|
||||
});
|
||||
const resetCacheWithOctokit = (cacheKey) => __awaiter(void 0, void 0, void 0, function* () {
|
||||
const client = getOctokitClient();
|
||||
core.debug(`remove cache "${cacheKey}"`);
|
||||
try {
|
||||
// TODO: replace with client.rest.
|
||||
yield client.request(`DELETE /repos/${repo}/actions/caches?key=${cacheKey}`);
|
||||
yield client.request(`DELETE /repos/${github_1.context.repo.owner}/${github_1.context.repo.repo}/actions/caches?key=${cacheKey}`);
|
||||
}
|
||||
catch (error) {
|
||||
if (error.status) {
|
||||
|
@ -1659,9 +1672,14 @@ class StateCacheStorage {
|
|||
const filePath = path_1.default.join(tmpDir, STATE_FILE);
|
||||
unlinkSafely(filePath);
|
||||
try {
|
||||
const cacheExists = yield checkIfCacheExists(CACHE_KEY);
|
||||
if (!cacheExists) {
|
||||
core.info('The saved state was not found, the process starts from the first issue.');
|
||||
return '';
|
||||
}
|
||||
yield cache.restoreCache([path_1.default.dirname(filePath)], CACHE_KEY);
|
||||
if (!fs_1.default.existsSync(filePath)) {
|
||||
core.info('The stored state has not been found, probably because of the very first run or the previous run failed');
|
||||
core.warning('Unknown error when unpacking the cache, the process starts from the first issue.');
|
||||
return '';
|
||||
}
|
||||
return fs_1.default.readFileSync(path_1.default.join(tmpDir, STATE_FILE), {
|
||||
|
@ -1766,7 +1784,8 @@ class State {
|
|||
this.reset();
|
||||
const serialized = yield this.stateStorage.restore();
|
||||
this.deserialize(serialized);
|
||||
core.info(`state: restored with info about ${this.processedIssuesIDs.size} issue(s)`);
|
||||
if (this.processedIssuesIDs.size > 0)
|
||||
core.info(`state: restored with info about ${this.processedIssuesIDs.size} issue(s)`);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,7 +3,7 @@ import fs from 'fs';
|
|||
import path from 'path';
|
||||
import os from 'os';
|
||||
import * as core from '@actions/core';
|
||||
import {getOctokit} from '@actions/github';
|
||||
import {context, getOctokit} from '@actions/github';
|
||||
import {retry as octokitRetry} from '@octokit/plugin-retry';
|
||||
import * as cache from '@actions/cache';
|
||||
|
||||
|
@ -25,16 +25,32 @@ const unlinkSafely = (filePath: string) => {
|
|||
}
|
||||
};
|
||||
|
||||
const resetCacheWithOctokit = async (cacheKey: string): Promise<void> => {
|
||||
const getOctokitClient = () => {
|
||||
const token = core.getInput('repo-token');
|
||||
const client = getOctokit(token, undefined, octokitRetry);
|
||||
// TODO: better way to get repository?
|
||||
const repo = process.env['GITHUB_REPOSITORY'];
|
||||
return getOctokit(token, undefined, octokitRetry);
|
||||
};
|
||||
|
||||
const checkIfCacheExists = async (cacheKey: string): Promise<boolean> => {
|
||||
const client = getOctokitClient();
|
||||
try {
|
||||
const issueResult = await client.request(
|
||||
`/repos/${context.repo.owner}/${context.repo.repo}/actions/caches`
|
||||
);
|
||||
const caches: Array<{key?: string}> =
|
||||
issueResult.data['actions_caches'] || [];
|
||||
return Boolean(caches.find(cache => cache['key'] === cacheKey));
|
||||
} catch (error) {
|
||||
core.debug(`Error checking if cache exist: ${error.message}`);
|
||||
}
|
||||
return false;
|
||||
};
|
||||
const resetCacheWithOctokit = async (cacheKey: string): Promise<void> => {
|
||||
const client = getOctokitClient();
|
||||
core.debug(`remove cache "${cacheKey}"`);
|
||||
try {
|
||||
// TODO: replace with client.rest.
|
||||
await client.request(
|
||||
`DELETE /repos/${repo}/actions/caches?key=${cacheKey}`
|
||||
`DELETE /repos/${context.repo.owner}/${context.repo.repo}/actions/caches?key=${cacheKey}`
|
||||
);
|
||||
} catch (error) {
|
||||
if (error.status) {
|
||||
|
@ -76,11 +92,19 @@ export class StateCacheStorage implements IStateStorage {
|
|||
const filePath = path.join(tmpDir, STATE_FILE);
|
||||
unlinkSafely(filePath);
|
||||
try {
|
||||
const cacheExists = await checkIfCacheExists(CACHE_KEY);
|
||||
if (!cacheExists) {
|
||||
core.info(
|
||||
'The saved state was not found, the process starts from the first issue.'
|
||||
);
|
||||
return '';
|
||||
}
|
||||
|
||||
await cache.restoreCache([path.dirname(filePath)], CACHE_KEY);
|
||||
|
||||
if (!fs.existsSync(filePath)) {
|
||||
core.info(
|
||||
'The stored state has not been found, probably because of the very first run or the previous run failed'
|
||||
core.warning(
|
||||
'Unknown error when unpacking the cache, the process starts from the first issue.'
|
||||
);
|
||||
return '';
|
||||
}
|
||||
|
|
|
@ -64,8 +64,9 @@ export class State implements IState {
|
|||
this.reset();
|
||||
const serialized = await this.stateStorage.restore();
|
||||
this.deserialize(serialized);
|
||||
core.info(
|
||||
`state: restored with info about ${this.processedIssuesIDs.size} issue(s)`
|
||||
);
|
||||
if (this.processedIssuesIDs.size > 0)
|
||||
core.info(
|
||||
`state: restored with info about ${this.processedIssuesIDs.size} issue(s)`
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue