Override CODEQL_EXTRACTOR_GO_BUILD_TRACING with on when it's true
This commit is contained in:
parent
3069613ebd
commit
e195431677
33 changed files with 162 additions and 95 deletions
|
|
@ -128,7 +128,7 @@ export async function createdDBForScannedLanguages(
|
|||
|
||||
for (const language of config.languages) {
|
||||
if (
|
||||
isScannedLanguage(language) &&
|
||||
isScannedLanguage(language, logger) &&
|
||||
!dbIsFinalized(config, language, logger)
|
||||
) {
|
||||
logger.startGroup(`Extracting ${language}`);
|
||||
|
|
@ -522,7 +522,7 @@ export async function runFinalize(
|
|||
// step.
|
||||
if (await util.codeQlVersionAbove(codeql, CODEQL_VERSION_NEW_TRACING)) {
|
||||
// Delete variables as specified by the end-tracing script
|
||||
await endTracingForCluster(config);
|
||||
await endTracingForCluster(config, logger);
|
||||
} else {
|
||||
// Delete the tracer config env var to avoid tracing ourselves
|
||||
delete process.env[sharedEnv.ODASA_TRACER_CONFIGURATION];
|
||||
|
|
|
|||
|
|
@ -11,7 +11,9 @@ export function determineAutobuildLanguage(
|
|||
// We want pick the dominant language in the repo from the ones we're able to build
|
||||
// The languages are sorted in order specified by user or by lines of code if we got
|
||||
// them from the GitHub API, so try to build the first language on the list.
|
||||
const autobuildLanguages = config.languages.filter(isTracedLanguage);
|
||||
const autobuildLanguages = config.languages.filter((l) =>
|
||||
isTracedLanguage(l, logger)
|
||||
);
|
||||
const language = autobuildLanguages[0];
|
||||
|
||||
if (!language) {
|
||||
|
|
|
|||
|
|
@ -450,7 +450,8 @@ test("databaseInitCluster() Lua feature flag enabled, but old CLI", async (t) =>
|
|||
"",
|
||||
undefined,
|
||||
undefined,
|
||||
createFeatureFlags([FeatureFlag.LuaTracerConfigEnabled])
|
||||
createFeatureFlags([FeatureFlag.LuaTracerConfigEnabled]),
|
||||
getRunnerLogger(true)
|
||||
);
|
||||
t.false(
|
||||
runnerConstructorStub.firstCall.args[1].includes(
|
||||
|
|
@ -476,7 +477,8 @@ test("databaseInitCluster() Lua feature flag disabled, with old CLI", async (t)
|
|||
"",
|
||||
undefined,
|
||||
undefined,
|
||||
createFeatureFlags([])
|
||||
createFeatureFlags([]),
|
||||
getRunnerLogger(true)
|
||||
);
|
||||
t.false(
|
||||
runnerConstructorStub.firstCall.args[1].includes(
|
||||
|
|
@ -502,7 +504,8 @@ test("databaseInitCluster() Lua feature flag enabled, compatible CLI", async (t)
|
|||
"",
|
||||
undefined,
|
||||
undefined,
|
||||
createFeatureFlags([FeatureFlag.LuaTracerConfigEnabled])
|
||||
createFeatureFlags([FeatureFlag.LuaTracerConfigEnabled]),
|
||||
getRunnerLogger(true)
|
||||
);
|
||||
t.true(
|
||||
runnerConstructorStub.firstCall.args[1].includes(
|
||||
|
|
@ -522,7 +525,8 @@ test("databaseInitCluster() Lua feature flag disabled, compatible CLI", async (t
|
|||
"",
|
||||
undefined,
|
||||
undefined,
|
||||
createFeatureFlags([])
|
||||
createFeatureFlags([]),
|
||||
getRunnerLogger(true)
|
||||
);
|
||||
t.true(
|
||||
runnerConstructorStub.firstCall.args[1].includes(
|
||||
|
|
@ -553,7 +557,8 @@ test("databaseInitCluster() without injected codescanning config", async (t) =>
|
|||
"",
|
||||
undefined,
|
||||
undefined,
|
||||
createFeatureFlags([])
|
||||
createFeatureFlags([]),
|
||||
getRunnerLogger(true)
|
||||
);
|
||||
|
||||
const args = runnerConstructorStub.firstCall.args[1];
|
||||
|
|
@ -595,7 +600,8 @@ const injectedConfigMacro = test.macro({
|
|||
"",
|
||||
undefined,
|
||||
undefined,
|
||||
createFeatureFlags([])
|
||||
createFeatureFlags([]),
|
||||
getRunnerLogger(true)
|
||||
);
|
||||
|
||||
const args = runnerConstructorStub.firstCall.args[1];
|
||||
|
|
@ -904,7 +910,8 @@ test("does not use injected config", async (t: ExecutionContext<unknown>) => {
|
|||
"",
|
||||
undefined,
|
||||
undefined,
|
||||
createFeatureFlags([])
|
||||
createFeatureFlags([]),
|
||||
getRunnerLogger(true)
|
||||
);
|
||||
|
||||
const args = runnerConstructorStub.firstCall.args[1];
|
||||
|
|
|
|||
|
|
@ -91,7 +91,8 @@ export interface CodeQL {
|
|||
sourceRoot: string,
|
||||
processName: string | undefined,
|
||||
processLevel: number | undefined,
|
||||
featureFlags: FeatureFlags
|
||||
featureFlags: FeatureFlags,
|
||||
logger: Logger
|
||||
): Promise<void>;
|
||||
/**
|
||||
* Runs the autobuilder for the given language.
|
||||
|
|
@ -770,12 +771,15 @@ async function getCodeQLForCmd(
|
|||
sourceRoot: string,
|
||||
processName: string | undefined,
|
||||
processLevel: number | undefined,
|
||||
featureFlags: FeatureFlags
|
||||
featureFlags: FeatureFlags,
|
||||
logger: Logger
|
||||
) {
|
||||
const extraArgs = config.languages.map(
|
||||
(language) => `--language=${language}`
|
||||
);
|
||||
if (config.languages.filter(isTracedLanguage).length > 0) {
|
||||
if (
|
||||
config.languages.filter((l) => isTracedLanguage(l, logger)).length > 0
|
||||
) {
|
||||
extraArgs.push("--begin-tracing");
|
||||
extraArgs.push(...(await getTrapCachingExtractorConfigArgs(config)));
|
||||
if (processName !== undefined) {
|
||||
|
|
@ -796,7 +800,7 @@ async function getCodeQLForCmd(
|
|||
// Once we've released a fix, we should add a version gate based on the fixed version.
|
||||
!(
|
||||
config.languages.includes(Language.go) &&
|
||||
isTracedLanguage(Language.go) &&
|
||||
isTracedLanguage(Language.go, logger) &&
|
||||
process.platform === "win32"
|
||||
)
|
||||
) {
|
||||
|
|
|
|||
|
|
@ -275,7 +275,8 @@ async function run() {
|
|||
sourceRoot,
|
||||
"Runner.Worker.exe",
|
||||
undefined,
|
||||
featureFlags
|
||||
featureFlags,
|
||||
logger
|
||||
);
|
||||
if (tracerConfig !== undefined) {
|
||||
for (const [key, value] of Object.entries(tracerConfig.env)) {
|
||||
|
|
|
|||
|
|
@ -88,7 +88,8 @@ export async function runInit(
|
|||
sourceRoot: string,
|
||||
processName: string | undefined,
|
||||
processLevel: number | undefined,
|
||||
featureFlags: FeatureFlags
|
||||
featureFlags: FeatureFlags,
|
||||
logger: Logger
|
||||
): Promise<TracerConfig | undefined> {
|
||||
fs.mkdirSync(config.dbLocation, { recursive: true });
|
||||
|
||||
|
|
@ -100,7 +101,8 @@ export async function runInit(
|
|||
sourceRoot,
|
||||
processName,
|
||||
processLevel,
|
||||
featureFlags
|
||||
featureFlags,
|
||||
logger
|
||||
);
|
||||
} else {
|
||||
for (const language of config.languages) {
|
||||
|
|
@ -132,7 +134,7 @@ export async function runInit(
|
|||
throw e;
|
||||
}
|
||||
}
|
||||
return await getCombinedTracerConfig(config, codeql);
|
||||
return await getCombinedTracerConfig(config, codeql, logger);
|
||||
}
|
||||
|
||||
// Runs a powershell script to inject the tracer into a parent process
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import {
|
|||
isTracedLanguage,
|
||||
parseLanguage,
|
||||
} from "./languages";
|
||||
import { getRunnerLogger } from "./logging";
|
||||
import { setupTests } from "./testing-utils";
|
||||
|
||||
setupTests(test);
|
||||
|
|
@ -32,21 +33,25 @@ test("parseLanguage", async (t) => {
|
|||
});
|
||||
|
||||
test("isTracedLanguage", async (t) => {
|
||||
t.true(isTracedLanguage(Language.cpp));
|
||||
t.true(isTracedLanguage(Language.java));
|
||||
t.true(isTracedLanguage(Language.csharp));
|
||||
const logger = getRunnerLogger(true);
|
||||
|
||||
t.false(isTracedLanguage(Language.go));
|
||||
t.false(isTracedLanguage(Language.javascript));
|
||||
t.false(isTracedLanguage(Language.python));
|
||||
t.true(isTracedLanguage(Language.cpp, logger));
|
||||
t.true(isTracedLanguage(Language.java, logger));
|
||||
t.true(isTracedLanguage(Language.csharp, logger));
|
||||
|
||||
t.false(isTracedLanguage(Language.go, logger));
|
||||
t.false(isTracedLanguage(Language.javascript, logger));
|
||||
t.false(isTracedLanguage(Language.python, logger));
|
||||
});
|
||||
|
||||
test("isScannedLanguage", async (t) => {
|
||||
t.false(isScannedLanguage(Language.cpp));
|
||||
t.false(isScannedLanguage(Language.java));
|
||||
t.false(isScannedLanguage(Language.csharp));
|
||||
const logger = getRunnerLogger(true);
|
||||
|
||||
t.true(isScannedLanguage(Language.go));
|
||||
t.true(isScannedLanguage(Language.javascript));
|
||||
t.true(isScannedLanguage(Language.python));
|
||||
t.false(isScannedLanguage(Language.cpp, logger));
|
||||
t.false(isScannedLanguage(Language.java, logger));
|
||||
t.false(isScannedLanguage(Language.csharp, logger));
|
||||
|
||||
t.true(isScannedLanguage(Language.go, logger));
|
||||
t.true(isScannedLanguage(Language.javascript, logger));
|
||||
t.true(isScannedLanguage(Language.python, logger));
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,3 +1,7 @@
|
|||
import * as core from "@actions/core";
|
||||
|
||||
import { Logger } from "./logging";
|
||||
|
||||
// All the languages supported by CodeQL
|
||||
export enum Language {
|
||||
csharp = "csharp",
|
||||
|
|
@ -36,12 +40,14 @@ export function parseLanguage(language: string): Language | undefined {
|
|||
return undefined;
|
||||
}
|
||||
|
||||
export function isTracedLanguage(language: Language): boolean {
|
||||
export function isTracedLanguage(language: Language, logger: Logger): boolean {
|
||||
if (process.env["CODEQL_EXTRACTOR_GO_BUILD_TRACING"] === "true") {
|
||||
throw new Error(
|
||||
"The CODEQL_EXTRACTOR_GO_BUILD_TRACING environment variable is set to an invalid value. " +
|
||||
"To enable Go build tracing, please set it to 'on'."
|
||||
logger.warning(
|
||||
"The CODEQL_EXTRACTOR_GO_BUILD_TRACING environment variable was set to 'true', but it must " +
|
||||
"be 'on' to enable Go build tracing. Setting it to 'on'."
|
||||
);
|
||||
process.env["CODEQL_EXTRACTOR_GO_BUILD_TRACING"] = "on";
|
||||
core.exportVariable("CODEQL_EXTRACTOR_GO_BUILD_TRACING", "on");
|
||||
}
|
||||
|
||||
return (
|
||||
|
|
@ -51,6 +57,6 @@ export function isTracedLanguage(language: Language): boolean {
|
|||
);
|
||||
}
|
||||
|
||||
export function isScannedLanguage(language: Language): boolean {
|
||||
return !isTracedLanguage(language);
|
||||
export function isScannedLanguage(language: Language, logger: Logger): boolean {
|
||||
return !isTracedLanguage(language, logger);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -263,7 +263,8 @@ program
|
|||
sourceRoot,
|
||||
parseTraceProcessName(),
|
||||
parseTraceProcessLevel(),
|
||||
createFeatureFlags([])
|
||||
createFeatureFlags([]),
|
||||
logger
|
||||
);
|
||||
if (tracerConfig === undefined) {
|
||||
return;
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import test from "ava";
|
|||
import { setCodeQL } from "./codeql";
|
||||
import * as configUtils from "./config-utils";
|
||||
import { Language } from "./languages";
|
||||
import { getRunnerLogger } from "./logging";
|
||||
import { setupTests } from "./testing-utils";
|
||||
import {
|
||||
concatTracerConfigs,
|
||||
|
|
@ -329,7 +330,10 @@ test("getCombinedTracerConfig - return undefined when no languages are traced la
|
|||
},
|
||||
});
|
||||
|
||||
t.deepEqual(await getCombinedTracerConfig(config, codeQL), undefined);
|
||||
t.deepEqual(
|
||||
await getCombinedTracerConfig(config, codeQL, getRunnerLogger(true)),
|
||||
undefined
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
|
|
@ -359,7 +363,11 @@ test("getCombinedTracerConfig - valid spec file", async (t) => {
|
|||
},
|
||||
});
|
||||
|
||||
const result = await getCombinedTracerConfig(config, codeQL);
|
||||
const result = await getCombinedTracerConfig(
|
||||
config,
|
||||
codeQL,
|
||||
getRunnerLogger(true)
|
||||
);
|
||||
t.notDeepEqual(result, undefined);
|
||||
|
||||
const expectedEnv = {
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@ import * as path from "path";
|
|||
import { CodeQL, CODEQL_VERSION_NEW_TRACING } from "./codeql";
|
||||
import * as configUtils from "./config-utils";
|
||||
import { Language, isTracedLanguage } from "./languages";
|
||||
import { Logger } from "./logging";
|
||||
import * as util from "./util";
|
||||
import { codeQlVersionAbove } from "./util";
|
||||
|
||||
|
|
@ -21,10 +22,11 @@ const CRITICAL_TRACER_VARS = new Set([
|
|||
]);
|
||||
|
||||
export async function endTracingForCluster(
|
||||
config: configUtils.Config
|
||||
config: configUtils.Config,
|
||||
logger: Logger
|
||||
): Promise<void> {
|
||||
// If there are no traced languages, we don't need to do anything.
|
||||
if (!config.languages.some(isTracedLanguage)) return;
|
||||
if (!config.languages.some((l) => isTracedLanguage(l, logger))) return;
|
||||
|
||||
const envVariablesFile = path.resolve(
|
||||
config.dbLocation,
|
||||
|
|
@ -223,10 +225,13 @@ export function concatTracerConfigs(
|
|||
|
||||
export async function getCombinedTracerConfig(
|
||||
config: configUtils.Config,
|
||||
codeql: CodeQL
|
||||
codeql: CodeQL,
|
||||
logger: Logger
|
||||
): Promise<TracerConfig | undefined> {
|
||||
// Abort if there are no traced languages as there's nothing to do
|
||||
const tracedLanguages = config.languages.filter(isTracedLanguage);
|
||||
const tracedLanguages = config.languages.filter((l) =>
|
||||
isTracedLanguage(l, logger)
|
||||
);
|
||||
if (tracedLanguages.length === 0) {
|
||||
return undefined;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue