Run autobuild script via direct tracing when feature enabled

This commit is contained in:
Henry Mercer 2024-04-11 21:05:55 +01:00
parent 8f057a3d8e
commit cbe29f55df
15 changed files with 68 additions and 25 deletions

View file

@ -181,7 +181,7 @@ async function runAutobuildIfLegacyGoWorkflow(
logger.debug(
"Running Go autobuild because extraction output (TRAP files) for Go code has not been found.",
);
await runAutobuild(Language.go, config, features, logger);
await runAutobuild(config, Language.go, features, logger);
}
async function run() {

View file

@ -122,7 +122,7 @@ async function run() {
}
for (const language of languages) {
currentLanguage = language;
await runAutobuild(language, config, features, logger);
await runAutobuild(config, language, features, logger);
}
}
} catch (unwrappedError) {

View file

@ -157,8 +157,8 @@ export async function setupCppAutobuild(codeql: CodeQL, logger: Logger) {
}
export async function runAutobuild(
language: Language,
config: configUtils.Config,
language: Language,
features: FeatureEnablement,
logger: Logger,
) {
@ -173,7 +173,7 @@ export async function runAutobuild(
) {
await codeQL.extractUsingBuildMode(config, language);
} else {
await codeQL.runAutobuild(language, config.debugMode);
await codeQL.runAutobuild(config, language, features);
}
if (language === Language.go) {
core.exportVariable(EnvVar.DID_AUTOBUILD_GOLANG, "true");

View file

@ -910,7 +910,12 @@ test("runTool summarizes autobuilder errors", async (t) => {
sinon.stub(safeWhich, "safeWhich").resolves("");
await t.throwsAsync(
async () => await codeqlObject.runAutobuild(Language.java, false),
async () =>
await codeqlObject.runAutobuild(
stubConfig,
Language.java,
createFeatures([]),
),
{
instanceOf: CommandInvocationError,
message:
@ -938,7 +943,12 @@ test("runTool truncates long autobuilder errors", async (t) => {
sinon.stub(safeWhich, "safeWhich").resolves("");
await t.throwsAsync(
async () => await codeqlObject.runAutobuild(Language.java, false),
async () =>
await codeqlObject.runAutobuild(
stubConfig,
Language.java,
createFeatures([]),
),
{
instanceOf: CommandInvocationError,
message:

View file

@ -88,7 +88,11 @@ export interface CodeQL {
/**
* Runs the autobuilder for the given language.
*/
runAutobuild(language: Language, enableDebugLogging: boolean): Promise<void>;
runAutobuild(
config: Config,
language: Language,
features: FeatureEnablement,
): Promise<void>;
/**
* Extract code for a scanned language using 'codeql database trace-command'
* and running the language extractor.
@ -628,17 +632,35 @@ export async function getCodeQLForCmd(
{ stdin: externalRepositoryToken },
);
},
async runAutobuild(language: Language, enableDebugLogging: boolean) {
async runAutobuild(
config: Config,
language: Language,
features: FeatureEnablement,
) {
applyAutobuildAzurePipelinesTimeoutFix();
if (
await features.getValue(Feature.AutobuildDirectTracingEnabled, this)
) {
await runTool(cmd, [
"database",
"trace-command",
...(await getTrapCachingExtractorConfigArgsForLang(config, language)),
...getExtractionVerbosityArguments(config.debugMode),
...getExtraOptionsFromEnv(["database", "trace-command"]),
util.getCodeQLDatabasePath(config, language),
]);
return;
}
const autobuildCmd = path.join(
await this.resolveExtractor(language),
"tools",
process.platform === "win32" ? "autobuild.cmd" : "autobuild.sh",
);
applyAutobuildAzurePipelinesTimeoutFix();
// Bump the verbosity of the autobuild command if we're in debug mode
if (enableDebugLogging) {
if (config.debugMode) {
process.env[EnvVar.CLI_VERBOSITY] =
process.env[EnvVar.CLI_VERBOSITY] || EXTRACTION_DEBUG_MODE_VERBOSITY;
}