Better env failover.

I have been jumping through way too many hoops to make the non-standard checks on origin behave properly, oh well.
This commit is contained in:
Michael J Mulligan 2021-04-07 20:49:04 +01:00
parent 4c15f47e78
commit db5738640c
4 changed files with 171 additions and 114 deletions

View file

@ -6903,37 +6903,43 @@ function resolveCheckRunId(checkRunIdent) {
function prepareEnv() {
return __awaiter(this, void 0, void 0, function* () {
const startedAt = Date.now();
// Resolve Check Run ID
const prepareCheckRunIdentPromise = prepareCheckRunIdent();
const checkRunPromise = (() => __awaiter(this, void 0, void 0, function* () {
let checkRunIdent;
try {
checkRunIdent = JSON.parse(core.getState(constants_1.Env.CheckRunIdent));
}
catch (e) {
checkRunIdent = undefined;
}
if (!checkRunIdent) {
core.saveState(constants_1.Env.CheckRunIdent, JSON.stringify((checkRunIdent = yield prepareCheckRunIdent())));
}
return checkRunIdent;
}))();
const prepareLintPromise = (() => __awaiter(this, void 0, void 0, function* () {
let lintPath = core.getState(constants_1.Env.LintPath);
if (!lintPath) {
core.saveState(constants_1.Env.LintPath, (lintPath = yield prepareLint()));
}
return lintPath;
}))();
const patchPromise = (() => __awaiter(this, void 0, void 0, function* () {
let patchPath = core.getState(constants_1.Env.PatchPath);
if (!patchPath) {
core.saveState(constants_1.Env.PatchPath, (patchPath = yield fetchPatch()));
}
return patchPath;
}))();
// Prepare cache, lint and go in parallel.
const restoreCachePromise = cache_1.restoreCache();
const prepareLintPromise = prepareLint();
const installGoPromise = install_1.installGo();
const patchPromise = fetchPatch();
core.saveState(constants_1.Env.LintPath, yield prepareLintPromise);
const lintPath = yield prepareLintPromise;
const patchPath = yield patchPromise;
const checkRunIdent = yield checkRunPromise;
yield installGoPromise;
yield restoreCachePromise;
core.saveState(constants_1.Env.PatchPath, yield patchPromise);
core.saveState(constants_1.Env.CheckRunIdent, JSON.stringify(yield prepareCheckRunIdentPromise));
core.info(`Prepared env in ${Date.now() - startedAt}ms`);
});
}
function restoreEnv() {
return __awaiter(this, void 0, void 0, function* () {
const startedAt = Date.now();
const lintPath = core.getState(constants_1.Env.LintPath);
const patchPath = core.getState(constants_1.Env.PatchPath);
let checkRunId;
try {
const checkRunIdent = JSON.parse(core.getState(constants_1.Env.CheckRunIdent));
checkRunId = yield resolveCheckRunId(checkRunIdent);
}
catch (e) {
core.info(`::error::Error Resolving Check Run ID: ${e}`);
checkRunId = -1;
}
core.info(`Restored env in ${Date.now() - startedAt}ms`);
return { lintPath, patchPath, checkRunId };
return { lintPath, patchPath, checkRunIdent };
});
}
var LintSeverity;
@ -7200,10 +7206,10 @@ function runLint(lintPath, patchPath, checkRunId) {
function setup() {
return __awaiter(this, void 0, void 0, function* () {
try {
yield core.group(`prepare environment`, prepareEnv);
yield core.group(`pre-prepare environment`, prepareEnv);
}
catch (error) {
core.error(`Failed to prepare: ${error}, ${error.stack}`);
core.error(`Failed to pre-prepare: ${error}, ${error.stack}`);
core.setFailed(error.message);
}
});
@ -7212,8 +7218,16 @@ exports.setup = setup;
function run() {
return __awaiter(this, void 0, void 0, function* () {
try {
const { lintPath, patchPath, checkRunId } = yield core.group(`restore environment`, restoreEnv);
const { lintPath, patchPath, checkRunIdent } = yield core.group(`prepare environment`, prepareEnv);
core.addPath(path.dirname(lintPath));
let checkRunId;
try {
checkRunId = yield resolveCheckRunId(checkRunIdent);
}
catch (e) {
core.info(`::error::Error Resolving Check Run ID: ${e}`);
checkRunId = -1;
}
yield core.group(`run golangci-lint`, () => runLint(lintPath, patchPath, checkRunId));
}
catch (error) {

70
dist/pre/index.js vendored
View file

@ -6903,37 +6903,43 @@ function resolveCheckRunId(checkRunIdent) {
function prepareEnv() {
return __awaiter(this, void 0, void 0, function* () {
const startedAt = Date.now();
// Resolve Check Run ID
const prepareCheckRunIdentPromise = prepareCheckRunIdent();
const checkRunPromise = (() => __awaiter(this, void 0, void 0, function* () {
let checkRunIdent;
try {
checkRunIdent = JSON.parse(core.getState(constants_1.Env.CheckRunIdent));
}
catch (e) {
checkRunIdent = undefined;
}
if (!checkRunIdent) {
core.saveState(constants_1.Env.CheckRunIdent, JSON.stringify((checkRunIdent = yield prepareCheckRunIdent())));
}
return checkRunIdent;
}))();
const prepareLintPromise = (() => __awaiter(this, void 0, void 0, function* () {
let lintPath = core.getState(constants_1.Env.LintPath);
if (!lintPath) {
core.saveState(constants_1.Env.LintPath, (lintPath = yield prepareLint()));
}
return lintPath;
}))();
const patchPromise = (() => __awaiter(this, void 0, void 0, function* () {
let patchPath = core.getState(constants_1.Env.PatchPath);
if (!patchPath) {
core.saveState(constants_1.Env.PatchPath, (patchPath = yield fetchPatch()));
}
return patchPath;
}))();
// Prepare cache, lint and go in parallel.
const restoreCachePromise = cache_1.restoreCache();
const prepareLintPromise = prepareLint();
const installGoPromise = install_1.installGo();
const patchPromise = fetchPatch();
core.saveState(constants_1.Env.LintPath, yield prepareLintPromise);
const lintPath = yield prepareLintPromise;
const patchPath = yield patchPromise;
const checkRunIdent = yield checkRunPromise;
yield installGoPromise;
yield restoreCachePromise;
core.saveState(constants_1.Env.PatchPath, yield patchPromise);
core.saveState(constants_1.Env.CheckRunIdent, JSON.stringify(yield prepareCheckRunIdentPromise));
core.info(`Prepared env in ${Date.now() - startedAt}ms`);
});
}
function restoreEnv() {
return __awaiter(this, void 0, void 0, function* () {
const startedAt = Date.now();
const lintPath = core.getState(constants_1.Env.LintPath);
const patchPath = core.getState(constants_1.Env.PatchPath);
let checkRunId;
try {
const checkRunIdent = JSON.parse(core.getState(constants_1.Env.CheckRunIdent));
checkRunId = yield resolveCheckRunId(checkRunIdent);
}
catch (e) {
core.info(`::error::Error Resolving Check Run ID: ${e}`);
checkRunId = -1;
}
core.info(`Restored env in ${Date.now() - startedAt}ms`);
return { lintPath, patchPath, checkRunId };
return { lintPath, patchPath, checkRunIdent };
});
}
var LintSeverity;
@ -7200,10 +7206,10 @@ function runLint(lintPath, patchPath, checkRunId) {
function setup() {
return __awaiter(this, void 0, void 0, function* () {
try {
yield core.group(`prepare environment`, prepareEnv);
yield core.group(`pre-prepare environment`, prepareEnv);
}
catch (error) {
core.error(`Failed to prepare: ${error}, ${error.stack}`);
core.error(`Failed to pre-prepare: ${error}, ${error.stack}`);
core.setFailed(error.message);
}
});
@ -7212,8 +7218,16 @@ exports.setup = setup;
function run() {
return __awaiter(this, void 0, void 0, function* () {
try {
const { lintPath, patchPath, checkRunId } = yield core.group(`restore environment`, restoreEnv);
const { lintPath, patchPath, checkRunIdent } = yield core.group(`prepare environment`, prepareEnv);
core.addPath(path.dirname(lintPath));
let checkRunId;
try {
checkRunId = yield resolveCheckRunId(checkRunIdent);
}
catch (e) {
core.info(`::error::Error Resolving Check Run ID: ${e}`);
checkRunId = -1;
}
yield core.group(`run golangci-lint`, () => runLint(lintPath, patchPath, checkRunId));
}
catch (error) {

70
dist/run/index.js vendored
View file

@ -6913,37 +6913,43 @@ function resolveCheckRunId(checkRunIdent) {
function prepareEnv() {
return __awaiter(this, void 0, void 0, function* () {
const startedAt = Date.now();
// Resolve Check Run ID
const prepareCheckRunIdentPromise = prepareCheckRunIdent();
const checkRunPromise = (() => __awaiter(this, void 0, void 0, function* () {
let checkRunIdent;
try {
checkRunIdent = JSON.parse(core.getState(constants_1.Env.CheckRunIdent));
}
catch (e) {
checkRunIdent = undefined;
}
if (!checkRunIdent) {
core.saveState(constants_1.Env.CheckRunIdent, JSON.stringify((checkRunIdent = yield prepareCheckRunIdent())));
}
return checkRunIdent;
}))();
const prepareLintPromise = (() => __awaiter(this, void 0, void 0, function* () {
let lintPath = core.getState(constants_1.Env.LintPath);
if (!lintPath) {
core.saveState(constants_1.Env.LintPath, (lintPath = yield prepareLint()));
}
return lintPath;
}))();
const patchPromise = (() => __awaiter(this, void 0, void 0, function* () {
let patchPath = core.getState(constants_1.Env.PatchPath);
if (!patchPath) {
core.saveState(constants_1.Env.PatchPath, (patchPath = yield fetchPatch()));
}
return patchPath;
}))();
// Prepare cache, lint and go in parallel.
const restoreCachePromise = cache_1.restoreCache();
const prepareLintPromise = prepareLint();
const installGoPromise = install_1.installGo();
const patchPromise = fetchPatch();
core.saveState(constants_1.Env.LintPath, yield prepareLintPromise);
const lintPath = yield prepareLintPromise;
const patchPath = yield patchPromise;
const checkRunIdent = yield checkRunPromise;
yield installGoPromise;
yield restoreCachePromise;
core.saveState(constants_1.Env.PatchPath, yield patchPromise);
core.saveState(constants_1.Env.CheckRunIdent, JSON.stringify(yield prepareCheckRunIdentPromise));
core.info(`Prepared env in ${Date.now() - startedAt}ms`);
});
}
function restoreEnv() {
return __awaiter(this, void 0, void 0, function* () {
const startedAt = Date.now();
const lintPath = core.getState(constants_1.Env.LintPath);
const patchPath = core.getState(constants_1.Env.PatchPath);
let checkRunId;
try {
const checkRunIdent = JSON.parse(core.getState(constants_1.Env.CheckRunIdent));
checkRunId = yield resolveCheckRunId(checkRunIdent);
}
catch (e) {
core.info(`::error::Error Resolving Check Run ID: ${e}`);
checkRunId = -1;
}
core.info(`Restored env in ${Date.now() - startedAt}ms`);
return { lintPath, patchPath, checkRunId };
return { lintPath, patchPath, checkRunIdent };
});
}
var LintSeverity;
@ -7210,10 +7216,10 @@ function runLint(lintPath, patchPath, checkRunId) {
function setup() {
return __awaiter(this, void 0, void 0, function* () {
try {
yield core.group(`prepare environment`, prepareEnv);
yield core.group(`pre-prepare environment`, prepareEnv);
}
catch (error) {
core.error(`Failed to prepare: ${error}, ${error.stack}`);
core.error(`Failed to pre-prepare: ${error}, ${error.stack}`);
core.setFailed(error.message);
}
});
@ -7222,8 +7228,16 @@ exports.setup = setup;
function run() {
return __awaiter(this, void 0, void 0, function* () {
try {
const { lintPath, patchPath, checkRunId } = yield core.group(`restore environment`, restoreEnv);
const { lintPath, patchPath, checkRunIdent } = yield core.group(`prepare environment`, prepareEnv);
core.addPath(path.dirname(lintPath));
let checkRunId;
try {
checkRunId = yield resolveCheckRunId(checkRunIdent);
}
catch (e) {
core.info(`::error::Error Resolving Check Run ID: ${e}`);
checkRunId = -1;
}
yield core.group(`run golangci-lint`, () => runLint(lintPath, patchPath, checkRunId));
}
catch (error) {

View file

@ -80,7 +80,7 @@ async function fetchPatch(): Promise<string> {
type Env = {
lintPath: string
patchPath: string
checkRunId: number
checkRunIdent: CheckRunIdent
}
type CheckRunIdent = {
@ -270,44 +270,52 @@ async function resolveCheckRunId(checkRunIdent: CheckRunIdent): Promise<number>
return checkRunId
}
async function prepareEnv(): Promise<void> {
async function prepareEnv(): Promise<Env> {
const startedAt = Date.now()
// Resolve Check Run ID
const prepareCheckRunIdentPromise = prepareCheckRunIdent()
const checkRunPromise = (async () => {
let checkRunIdent: CheckRunIdent | undefined
try {
checkRunIdent = JSON.parse(core.getState(EnvKey.CheckRunIdent))
} catch (e) {
checkRunIdent = undefined
}
if (!checkRunIdent) {
core.saveState(EnvKey.CheckRunIdent, JSON.stringify((checkRunIdent = await prepareCheckRunIdent())))
}
return checkRunIdent
})()
const prepareLintPromise = (async () => {
let lintPath = core.getState(EnvKey.LintPath)
if (!lintPath) {
core.saveState(EnvKey.LintPath, (lintPath = await prepareLint()))
}
return lintPath
})()
const patchPromise = (async () => {
let patchPath = core.getState(EnvKey.PatchPath)
if (!patchPath) {
core.saveState(EnvKey.PatchPath, (patchPath = await fetchPatch()))
}
return patchPath
})()
// Prepare cache, lint and go in parallel.
const restoreCachePromise = restoreCache()
const prepareLintPromise = prepareLint()
const installGoPromise = installGo()
const patchPromise = fetchPatch()
core.saveState(EnvKey.LintPath, await prepareLintPromise)
const lintPath = await prepareLintPromise
const patchPath = await patchPromise
const checkRunIdent = await checkRunPromise
await installGoPromise
await restoreCachePromise
core.saveState(EnvKey.PatchPath, await patchPromise)
core.saveState(EnvKey.CheckRunIdent, JSON.stringify(await prepareCheckRunIdentPromise))
core.info(`Prepared env in ${Date.now() - startedAt}ms`)
}
async function restoreEnv(): Promise<Env> {
const startedAt = Date.now()
const lintPath = core.getState(EnvKey.LintPath)
const patchPath = core.getState(EnvKey.PatchPath)
let checkRunId: number
try {
const checkRunIdent: CheckRunIdent = JSON.parse(core.getState(EnvKey.CheckRunIdent))
checkRunId = await resolveCheckRunId(checkRunIdent)
} catch (e) {
core.info(`::error::Error Resolving Check Run ID: ${e}`)
checkRunId = -1
}
core.info(`Restored env in ${Date.now() - startedAt}ms`)
return { lintPath, patchPath, checkRunId }
return { lintPath, patchPath, checkRunIdent }
}
type ExecRes = {
@ -664,17 +672,24 @@ async function runLint(lintPath: string, patchPath: string, checkRunId: number):
export async function setup(): Promise<void> {
try {
await core.group(`prepare environment`, prepareEnv)
await core.group(`pre-prepare environment`, prepareEnv)
} catch (error) {
core.error(`Failed to prepare: ${error}, ${error.stack}`)
core.error(`Failed to pre-prepare: ${error}, ${error.stack}`)
core.setFailed(error.message)
}
}
export async function run(): Promise<void> {
try {
const { lintPath, patchPath, checkRunId } = await core.group(`restore environment`, restoreEnv)
const { lintPath, patchPath, checkRunIdent } = await core.group(`prepare environment`, prepareEnv)
core.addPath(path.dirname(lintPath))
let checkRunId: number
try {
checkRunId = await resolveCheckRunId(checkRunIdent)
} catch (e) {
core.info(`::error::Error Resolving Check Run ID: ${e}`)
checkRunId = -1
}
await core.group(`run golangci-lint`, () => runLint(lintPath, patchPath, checkRunId))
} catch (error) {
core.error(`Failed to run: ${error}, ${error.stack}`)