Convert "Invalid source root" errors to UserErrors

This commit is contained in:
Andrew Eisenberg
2022-10-04 11:43:24 -07:00
parent 4cf80047d0
commit 9e044c5432
3 changed files with 69 additions and 34 deletions

View File

@@ -117,24 +117,7 @@ export async function runInit(
}
}
} catch (e) {
// Handle the situation where init is called twice
// for the same database in the same job.
if (
e instanceof Error &&
e.message?.includes("Refusing to create databases") &&
e.message.includes("exists and is not an empty directory.")
) {
throw new util.UserError(
`Is the "init" action called twice in the same job? ${e.message}`
);
} else if (
e instanceof Error &&
e.message?.includes("is not compatible with this CodeQL CLI")
) {
throw new util.UserError(e.message);
} else {
throw e;
}
throw processError(e);
}
return await getCombinedTracerConfig(
config,
@@ -144,6 +127,42 @@ export async function runInit(
);
}
/**
* Possibly convert this error into a UserError in order to avoid
* counting this error towards our internal error budget.
*
* @param e The error to possibly convert to a UserError.
*
* @returns A UserError if the error is a known error that can be
* attributed to the user, otherwise the original error.
*/
function processError(e: any): Error {
if (!(e instanceof Error)) {
return e;
}
if (
// Init action called twice
e.message?.includes("Refusing to create databases") &&
e.message?.includes("exists and is not an empty directory.")
) {
return new util.UserError(
`Is the "init" action called twice in the same job? ${e.message}`
);
}
if (
// Version of CodeQL CLI is incompatible with this version of the CodeQL Action
e.message?.includes("is not compatible with this CodeQL CLI") ||
// Expected source location for database creation does not exist
e.message?.includes("Invalid source root")
) {
return new util.UserError(e.message);
}
return e;
}
// Runs a powershell script to inject the tracer into a parent process
// so it can tracer future processes, hopefully including the build process.
// If processName is given then injects into the nearest parent process with