Add logging for determining whether to run the Go autobuilder
This commit is contained in:
parent
b42a495e8a
commit
14d7039828
3 changed files with 91 additions and 51 deletions
60
lib/analyze-action.js
generated
60
lib/analyze-action.js
generated
|
|
@ -93,6 +93,42 @@ function doesGoExtractionOutputExist(config) {
|
||||||
".trap.tar",
|
".trap.tar",
|
||||||
].some((ext) => fileName.endsWith(ext)));
|
].some((ext) => fileName.endsWith(ext)));
|
||||||
}
|
}
|
||||||
|
/**
|
||||||
|
* When Go extraction reconciliation is enabled, either via the feature flag
|
||||||
|
* or an environment variable, we will attempt to autobuild Go to preserve
|
||||||
|
* compatibility for users who have set up Go using a legacy scanning style
|
||||||
|
* CodeQL workflow, i.e. one without an autobuild step or manual build
|
||||||
|
* steps.
|
||||||
|
*
|
||||||
|
* - We detect whether an autobuild step is present by checking the
|
||||||
|
* `CODEQL_ACTION_DID_AUTOBUILD_GOLANG` environment variable, which is set
|
||||||
|
* when the autobuilder is invoked.
|
||||||
|
* - We approximate whether manual build steps are present by looking at
|
||||||
|
* whether any extraction output already exists for Go.
|
||||||
|
*/
|
||||||
|
async function runGoAutobuilderIfLegacyWorkflow(config, featureFlags, logger) {
|
||||||
|
// Only proceed if the beta Go extraction reconciliation behavior is
|
||||||
|
// enabled.
|
||||||
|
if (process.env["CODEQL_ACTION_RECONCILE_GO_EXTRACTION"] !== "true" &&
|
||||||
|
!(await featureFlags.getValue(feature_flags_1.FeatureFlag.GolangExtractionReconciliationEnabled))) {
|
||||||
|
logger.debug("Won't run the Go autobuilder since Go extraction reconciliation is not enabled.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!(languages_1.Language.go in config.languages)) {
|
||||||
|
logger.info("Won't run the Go autobuilder since Go analysis is not enabled.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (process.env["CODEQL_ACTION_DID_AUTOBUILD_GOLANG"] === "true") {
|
||||||
|
logger.info("Won't run the Go autobuilder since it has already been run.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// This captures whether a user has added manual build steps for Go
|
||||||
|
if (doesGoExtractionOutputExist(config)) {
|
||||||
|
logger.info("Won't run the Go autobuilder since at least one file of Go code has already been extracted.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
await (0, autobuild_1.runAutobuild)(languages_1.Language.go, config, logger);
|
||||||
|
}
|
||||||
async function run() {
|
async function run() {
|
||||||
const startedAt = new Date();
|
const startedAt = new Date();
|
||||||
let uploadResult = undefined;
|
let uploadResult = undefined;
|
||||||
|
|
@ -127,29 +163,7 @@ async function run() {
|
||||||
const repositoryNwo = (0, repository_1.parseRepositoryNwo)(util.getRequiredEnvParam("GITHUB_REPOSITORY"));
|
const repositoryNwo = (0, repository_1.parseRepositoryNwo)(util.getRequiredEnvParam("GITHUB_REPOSITORY"));
|
||||||
const gitHubVersion = await (0, api_client_1.getGitHubVersionActionsOnly)();
|
const gitHubVersion = await (0, api_client_1.getGitHubVersionActionsOnly)();
|
||||||
const featureFlags = new feature_flags_1.GitHubFeatureFlags(gitHubVersion, apiDetails, repositoryNwo, logger);
|
const featureFlags = new feature_flags_1.GitHubFeatureFlags(gitHubVersion, apiDetails, repositoryNwo, logger);
|
||||||
// When Go extraction reconciliation is enabled, either via the feature flag
|
await runGoAutobuilderIfLegacyWorkflow(config, featureFlags, logger);
|
||||||
// or an environment variable, we will attempt to autobuild Go to preserve
|
|
||||||
// compatibility for users who have set up Go using a legacy scanning style
|
|
||||||
// CodeQL workflow, i.e. one without an autobuild step or manual build
|
|
||||||
// steps.
|
|
||||||
//
|
|
||||||
// - We detect whether an autobuild step is present by checking the
|
|
||||||
// `CODEQL_ACTION_DID_AUTOBUILD_GOLANG` environment variable, which is set
|
|
||||||
// when the autobuilder is invoked.
|
|
||||||
// - We approximate whether manual build steps are present by looking at
|
|
||||||
// whether any extraction output already exists for Go.
|
|
||||||
if (
|
|
||||||
// Only proceed if the beta Go extraction reconciliation behavior is
|
|
||||||
// enabled.
|
|
||||||
(process.env["CODEQL_ACTION_RECONCILE_GO_EXTRACTION"] === "true" ||
|
|
||||||
(await featureFlags.getValue(feature_flags_1.FeatureFlag.GolangExtractionReconciliationEnabled))) &&
|
|
||||||
languages_1.Language.go in config.languages &&
|
|
||||||
// This captures whether the autobuilder has already been invoked
|
|
||||||
process.env["CODEQL_ACTION_DID_AUTOBUILD_GOLANG"] !== "true" &&
|
|
||||||
// This captures whether a user has added manual build steps for Go
|
|
||||||
!doesGoExtractionOutputExist(config)) {
|
|
||||||
await (0, autobuild_1.runAutobuild)(languages_1.Language.go, config, logger);
|
|
||||||
}
|
|
||||||
dbCreationTimings = await (0, analyze_1.runFinalize)(outputDir, threads, memory, config, logger, featureFlags);
|
dbCreationTimings = await (0, analyze_1.runFinalize)(outputDir, threads, memory, config, logger, featureFlags);
|
||||||
if (actionsUtil.getRequiredInput("skip-queries") !== "true") {
|
if (actionsUtil.getRequiredInput("skip-queries") !== "true") {
|
||||||
runStats = await (0, analyze_1.runQueries)(outputDir, memory, util.getAddSnippetsFlag(actionsUtil.getRequiredInput("add-snippets")), threads, actionsUtil.getOptionalInput("category"), config, logger);
|
runStats = await (0, analyze_1.runQueries)(outputDir, memory, util.getAddSnippetsFlag(actionsUtil.getRequiredInput("add-snippets")), threads, actionsUtil.getOptionalInput("category"), config, logger);
|
||||||
|
|
|
||||||
File diff suppressed because one or more lines are too long
|
|
@ -19,7 +19,7 @@ import { runAutobuild } from "./autobuild";
|
||||||
import { getCodeQL } from "./codeql";
|
import { getCodeQL } from "./codeql";
|
||||||
import { Config, getConfig } from "./config-utils";
|
import { Config, getConfig } from "./config-utils";
|
||||||
import { uploadDatabases } from "./database-upload";
|
import { uploadDatabases } from "./database-upload";
|
||||||
import { FeatureFlag, GitHubFeatureFlags } from "./feature-flags";
|
import { FeatureFlag, FeatureFlags, GitHubFeatureFlags } from "./feature-flags";
|
||||||
import { Language } from "./languages";
|
import { Language } from "./languages";
|
||||||
import { getActionsLogger, Logger } from "./logging";
|
import { getActionsLogger, Logger } from "./logging";
|
||||||
import { parseRepositoryNwo } from "./repository";
|
import { parseRepositoryNwo } from "./repository";
|
||||||
|
|
@ -122,6 +122,57 @@ function doesGoExtractionOutputExist(config: Config): boolean {
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* When Go extraction reconciliation is enabled, either via the feature flag
|
||||||
|
* or an environment variable, we will attempt to autobuild Go to preserve
|
||||||
|
* compatibility for users who have set up Go using a legacy scanning style
|
||||||
|
* CodeQL workflow, i.e. one without an autobuild step or manual build
|
||||||
|
* steps.
|
||||||
|
*
|
||||||
|
* - We detect whether an autobuild step is present by checking the
|
||||||
|
* `CODEQL_ACTION_DID_AUTOBUILD_GOLANG` environment variable, which is set
|
||||||
|
* when the autobuilder is invoked.
|
||||||
|
* - We approximate whether manual build steps are present by looking at
|
||||||
|
* whether any extraction output already exists for Go.
|
||||||
|
*/
|
||||||
|
async function runGoAutobuilderIfLegacyWorkflow(
|
||||||
|
config: Config,
|
||||||
|
featureFlags: FeatureFlags,
|
||||||
|
logger: Logger
|
||||||
|
) {
|
||||||
|
// Only proceed if the beta Go extraction reconciliation behavior is
|
||||||
|
// enabled.
|
||||||
|
if (
|
||||||
|
process.env["CODEQL_ACTION_RECONCILE_GO_EXTRACTION"] !== "true" &&
|
||||||
|
!(await featureFlags.getValue(
|
||||||
|
FeatureFlag.GolangExtractionReconciliationEnabled
|
||||||
|
))
|
||||||
|
) {
|
||||||
|
logger.debug(
|
||||||
|
"Won't run the Go autobuilder since Go extraction reconciliation is not enabled."
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (!(Language.go in config.languages)) {
|
||||||
|
logger.info(
|
||||||
|
"Won't run the Go autobuilder since Go analysis is not enabled."
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (process.env["CODEQL_ACTION_DID_AUTOBUILD_GOLANG"] === "true") {
|
||||||
|
logger.info("Won't run the Go autobuilder since it has already been run.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
// This captures whether a user has added manual build steps for Go
|
||||||
|
if (doesGoExtractionOutputExist(config)) {
|
||||||
|
logger.info(
|
||||||
|
"Won't run the Go autobuilder since at least one file of Go code has already been extracted."
|
||||||
|
);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
await runAutobuild(Language.go, config, logger);
|
||||||
|
}
|
||||||
|
|
||||||
async function run() {
|
async function run() {
|
||||||
const startedAt = new Date();
|
const startedAt = new Date();
|
||||||
let uploadResult: UploadResult | undefined = undefined;
|
let uploadResult: UploadResult | undefined = undefined;
|
||||||
|
|
@ -191,32 +242,7 @@ async function run() {
|
||||||
logger
|
logger
|
||||||
);
|
);
|
||||||
|
|
||||||
// When Go extraction reconciliation is enabled, either via the feature flag
|
await runGoAutobuilderIfLegacyWorkflow(config, featureFlags, logger);
|
||||||
// or an environment variable, we will attempt to autobuild Go to preserve
|
|
||||||
// compatibility for users who have set up Go using a legacy scanning style
|
|
||||||
// CodeQL workflow, i.e. one without an autobuild step or manual build
|
|
||||||
// steps.
|
|
||||||
//
|
|
||||||
// - We detect whether an autobuild step is present by checking the
|
|
||||||
// `CODEQL_ACTION_DID_AUTOBUILD_GOLANG` environment variable, which is set
|
|
||||||
// when the autobuilder is invoked.
|
|
||||||
// - We approximate whether manual build steps are present by looking at
|
|
||||||
// whether any extraction output already exists for Go.
|
|
||||||
if (
|
|
||||||
// Only proceed if the beta Go extraction reconciliation behavior is
|
|
||||||
// enabled.
|
|
||||||
(process.env["CODEQL_ACTION_RECONCILE_GO_EXTRACTION"] === "true" ||
|
|
||||||
(await featureFlags.getValue(
|
|
||||||
FeatureFlag.GolangExtractionReconciliationEnabled
|
|
||||||
))) &&
|
|
||||||
Language.go in config.languages &&
|
|
||||||
// This captures whether the autobuilder has already been invoked
|
|
||||||
process.env["CODEQL_ACTION_DID_AUTOBUILD_GOLANG"] !== "true" &&
|
|
||||||
// This captures whether a user has added manual build steps for Go
|
|
||||||
!doesGoExtractionOutputExist(config)
|
|
||||||
) {
|
|
||||||
await runAutobuild(Language.go, config, logger);
|
|
||||||
}
|
|
||||||
|
|
||||||
dbCreationTimings = await runFinalize(
|
dbCreationTimings = await runFinalize(
|
||||||
outputDir,
|
outputDir,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue