Merge branch 'main' into henrymercer/drop-token-check

This commit is contained in:
Henry Mercer 2022-07-12 18:21:09 +01:00 committed by GitHub
commit 4cb248b0ec
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
17 changed files with 50 additions and 36 deletions

View file

@ -2,7 +2,8 @@
## [UNRELEASED] ## [UNRELEASED]
No user facing changes. - You can now quickly debug a job that uses the CodeQL Action by re-running the job from the GitHub UI and selecting the "Enable debug logging" option. [#1132](https://github.com/github/codeql-action/pull/1132)
- You can now see diagnostic messages produced by the analysis in the logs of the `analyze` Action by enabling debug mode. To enable debug mode, pass `debug: true` to the `init` Action, or [enable step debug logging](https://docs.github.com/en/actions/monitoring-and-troubleshooting-workflows/enabling-debug-logging#enabling-step-debug-logging). This feature is available for CodeQL CLI version 2.10.0 and later. [#1133](https://github.com/github/codeql-action/pull/1133)
## 2.1.15 - 28 Jun 2022 ## 2.1.15 - 28 Jun 2022

View file

@ -56,7 +56,10 @@ inputs:
This input also sets the number of threads that can later be used by the "analyze" action. This input also sets the number of threads that can later be used by the "analyze" action.
required: false required: false
debug: debug:
description: Enable debugging mode. This will result in more output being produced which may be useful when debugging certain issues. description: >-
Enable debugging mode.
This will result in more output being produced which may be useful when debugging certain issues.
Debugging mode is enabled automatically when step debug logging is turned on.
required: false required: false
default: 'false' default: 'false'
debug-artifact-name: debug-artifact-name:

4
lib/analyze-action.js generated
View file

@ -145,7 +145,7 @@ async function run() {
return; return;
} }
finally { finally {
if (config !== undefined && config.debugMode) { if (config === null || config === void 0 ? void 0 : config.debugMode) {
try { try {
// Upload the database bundles as an Actions artifact for debugging // Upload the database bundles as an Actions artifact for debugging
const toUpload = []; const toUpload = [];
@ -158,7 +158,7 @@ async function run() {
console.log(`Failed to upload database debug bundles: ${error}`); console.log(`Failed to upload database debug bundles: ${error}`);
} }
} }
if (core.isDebug() && config !== undefined) { if (config === null || config === void 0 ? void 0 : config.debugMode) {
core.info("Debug mode is on. Printing CodeQL debug logs..."); core.info("Debug mode is on. Printing CodeQL debug logs...");
for (const language of config.languages) { for (const language of config.languages) {
const databaseDirectory = util.getCodeQLDatabasePath(config, language); const databaseDirectory = util.getCodeQLDatabasePath(config, language);

File diff suppressed because one or more lines are too long

14
lib/analyze.js generated
View file

@ -115,10 +115,8 @@ async function runQueries(sarifFolder, memoryFlag, addSnippetsFlag, threadsFlag,
const statusReport = {}; const statusReport = {};
let locPromise = Promise.resolve({}); let locPromise = Promise.resolve({});
const cliCanCountBaseline = await cliCanCountLoC(); const cliCanCountBaseline = await cliCanCountLoC();
const debugMode = process.env["INTERNAL_CODEQL_ACTION_DEBUG_LOC"] || const countLocDebugMode = process.env["INTERNAL_CODEQL_ACTION_DEBUG_LOC"] || config.debugMode;
process.env["ACTIONS_RUNNER_DEBUG"] || if (!cliCanCountBaseline || countLocDebugMode) {
process.env["ACTIONS_STEP_DEBUG"];
if (!cliCanCountBaseline || debugMode) {
// count the number of lines in the background // count the number of lines in the background
locPromise = (0, count_loc_1.countLoc)(path.resolve(), locPromise = (0, count_loc_1.countLoc)(path.resolve(),
// config.paths specifies external directories. the current // config.paths specifies external directories. the current
@ -174,14 +172,14 @@ async function runQueries(sarifFolder, memoryFlag, addSnippetsFlag, threadsFlag,
logger.startGroup(`Interpreting results for ${language}`); logger.startGroup(`Interpreting results for ${language}`);
const startTimeInterpretResults = new Date().getTime(); const startTimeInterpretResults = new Date().getTime();
const sarifFile = path.join(sarifFolder, `${language}.sarif`); const sarifFile = path.join(sarifFolder, `${language}.sarif`);
const analysisSummary = await runInterpretResults(language, querySuitePaths, sarifFile); const analysisSummary = await runInterpretResults(language, querySuitePaths, sarifFile, config.debugMode);
if (!cliCanCountBaseline) if (!cliCanCountBaseline)
await injectLinesOfCode(sarifFile, language, locPromise); await injectLinesOfCode(sarifFile, language, locPromise);
statusReport[`interpret_results_${language}_duration_ms`] = statusReport[`interpret_results_${language}_duration_ms`] =
new Date().getTime() - startTimeInterpretResults; new Date().getTime() - startTimeInterpretResults;
logger.endGroup(); logger.endGroup();
logger.info(analysisSummary); logger.info(analysisSummary);
if (!cliCanCountBaseline || debugMode) if (!cliCanCountBaseline || countLocDebugMode)
printLinesOfCodeSummary(logger, language, await locPromise); printLinesOfCodeSummary(logger, language, await locPromise);
if (cliCanCountBaseline) if (cliCanCountBaseline)
logger.info(await runPrintLinesOfCode(language)); logger.info(await runPrintLinesOfCode(language));
@ -196,10 +194,10 @@ async function runQueries(sarifFolder, memoryFlag, addSnippetsFlag, threadsFlag,
} }
} }
return statusReport; return statusReport;
async function runInterpretResults(language, queries, sarifFile) { async function runInterpretResults(language, queries, sarifFile, enableDebugLogging) {
const databasePath = util.getCodeQLDatabasePath(config, language); const databasePath = util.getCodeQLDatabasePath(config, language);
const codeql = await (0, codeql_1.getCodeQL)(config.codeQLCmd); const codeql = await (0, codeql_1.getCodeQL)(config.codeQLCmd);
return await codeql.databaseInterpretResults(databasePath, queries, sarifFile, addSnippetsFlag, threadsFlag, automationDetailsId); return await codeql.databaseInterpretResults(databasePath, queries, sarifFile, addSnippetsFlag, threadsFlag, enableDebugLogging ? "-vv" : "-v", automationDetailsId);
} }
async function cliCanCountLoC() { async function cliCanCountLoC() {
return await util.codeQlVersionAbove(await (0, codeql_1.getCodeQL)(config.codeQLCmd), codeql_1.CODEQL_VERSION_COUNTS_LINES); return await util.codeQlVersionAbove(await (0, codeql_1.getCodeQL)(config.codeQLCmd), codeql_1.CODEQL_VERSION_COUNTS_LINES);

File diff suppressed because one or more lines are too long

4
lib/codeql.js generated
View file

@ -619,13 +619,13 @@ async function getCodeQLForCmd(cmd, checkVersion) {
codeqlArgs.push(querySuitePath); codeqlArgs.push(querySuitePath);
await runTool(cmd, codeqlArgs); await runTool(cmd, codeqlArgs);
}, },
async databaseInterpretResults(databasePath, querySuitePaths, sarifFile, addSnippetsFlag, threadsFlag, automationDetailsId) { async databaseInterpretResults(databasePath, querySuitePaths, sarifFile, addSnippetsFlag, threadsFlag, verbosityFlag, automationDetailsId) {
const codeqlArgs = [ const codeqlArgs = [
"database", "database",
"interpret-results", "interpret-results",
threadsFlag, threadsFlag,
"--format=sarif-latest", "--format=sarif-latest",
"-v", verbosityFlag,
`--output=${sarifFile}`, `--output=${sarifFile}`,
addSnippetsFlag, addSnippetsFlag,
...getExtraOptionsFromEnv(["database", "interpret-results"]), ...getExtraOptionsFromEnv(["database", "interpret-results"]),

File diff suppressed because one or more lines are too long

4
lib/codeql.test.js generated
View file

@ -226,14 +226,14 @@ ava_1.default.beforeEach(() => {
const runnerConstructorStub = stubToolRunnerConstructor(); const runnerConstructorStub = stubToolRunnerConstructor();
const codeqlObject = await codeql.getCodeQLForTesting(); const codeqlObject = await codeql.getCodeQLForTesting();
sinon.stub(codeqlObject, "getVersion").resolves("2.7.0"); sinon.stub(codeqlObject, "getVersion").resolves("2.7.0");
await codeqlObject.databaseInterpretResults("", [], "", "", "", ""); await codeqlObject.databaseInterpretResults("", [], "", "", "", "-v", "");
t.false(runnerConstructorStub.firstCall.args[1].includes("--sarif-add-query-help"), "--sarif-add-query-help should be absent, but it is present"); t.false(runnerConstructorStub.firstCall.args[1].includes("--sarif-add-query-help"), "--sarif-add-query-help should be absent, but it is present");
}); });
(0, ava_1.default)("databaseInterpretResults() sets --sarif-add-query-help for 2.7.1", async (t) => { (0, ava_1.default)("databaseInterpretResults() sets --sarif-add-query-help for 2.7.1", async (t) => {
const runnerConstructorStub = stubToolRunnerConstructor(); const runnerConstructorStub = stubToolRunnerConstructor();
const codeqlObject = await codeql.getCodeQLForTesting(); const codeqlObject = await codeql.getCodeQLForTesting();
sinon.stub(codeqlObject, "getVersion").resolves("2.7.1"); sinon.stub(codeqlObject, "getVersion").resolves("2.7.1");
await codeqlObject.databaseInterpretResults("", [], "", "", "", ""); await codeqlObject.databaseInterpretResults("", [], "", "", "", "-v", "");
t.true(runnerConstructorStub.firstCall.args[1].includes("--sarif-add-query-help"), "--sarif-add-query-help should be present, but it is absent"); t.true(runnerConstructorStub.firstCall.args[1].includes("--sarif-add-query-help"), "--sarif-add-query-help should be present, but it is absent");
}); });
const stubConfig = { const stubConfig = {

File diff suppressed because one or more lines are too long

7
lib/init-action.js generated
View file

@ -93,7 +93,12 @@ async function run() {
codeql = initCodeQLResult.codeql; codeql = initCodeQLResult.codeql;
toolsVersion = initCodeQLResult.toolsVersion; toolsVersion = initCodeQLResult.toolsVersion;
await (0, util_1.enrichEnvironment)(util_1.Mode.actions, codeql); await (0, util_1.enrichEnvironment)(util_1.Mode.actions, codeql);
config = await (0, init_1.initConfig)((0, actions_util_1.getOptionalInput)("languages"), (0, actions_util_1.getOptionalInput)("queries"), (0, actions_util_1.getOptionalInput)("packs"), (0, actions_util_1.getOptionalInput)("config-file"), (0, actions_util_1.getOptionalInput)("db-location"), (0, actions_util_1.getOptionalInput)("debug") === "true", (0, actions_util_1.getOptionalInput)("debug-artifact-name") || util_1.DEFAULT_DEBUG_ARTIFACT_NAME, (0, actions_util_1.getOptionalInput)("debug-database-name") || util_1.DEFAULT_DEBUG_DATABASE_NAME, repositoryNwo, (0, actions_util_1.getTemporaryDirectory)(), codeql, (0, util_1.getRequiredEnvParam)("GITHUB_WORKSPACE"), gitHubVersion, apiDetails, featureFlags, logger); config = await (0, init_1.initConfig)((0, actions_util_1.getOptionalInput)("languages"), (0, actions_util_1.getOptionalInput)("queries"), (0, actions_util_1.getOptionalInput)("packs"), (0, actions_util_1.getOptionalInput)("config-file"), (0, actions_util_1.getOptionalInput)("db-location"),
// Debug mode is enabled if:
// - The `init` Action is passed `debug: true`.
// - Actions step debugging is enabled (e.g. by [enabling debug logging for a rerun](https://docs.github.com/en/actions/managing-workflow-runs/re-running-workflows-and-jobs#re-running-all-the-jobs-in-a-workflow),
// or by setting the `ACTIONS_STEP_DEBUG` secret to `true`).
(0, actions_util_1.getOptionalInput)("debug") === "true" || core.isDebug(), (0, actions_util_1.getOptionalInput)("debug-artifact-name") || util_1.DEFAULT_DEBUG_ARTIFACT_NAME, (0, actions_util_1.getOptionalInput)("debug-database-name") || util_1.DEFAULT_DEBUG_DATABASE_NAME, repositoryNwo, (0, actions_util_1.getTemporaryDirectory)(), codeql, (0, util_1.getRequiredEnvParam)("GITHUB_WORKSPACE"), gitHubVersion, apiDetails, featureFlags, logger);
if (config.languages.includes(languages_1.Language.python) && if (config.languages.includes(languages_1.Language.python) &&
(0, actions_util_1.getRequiredInput)("setup-python-dependencies") === "true") { (0, actions_util_1.getRequiredInput)("setup-python-dependencies") === "true") {
try { try {

File diff suppressed because one or more lines are too long

View file

@ -236,7 +236,7 @@ async function run() {
return; return;
} finally { } finally {
if (config !== undefined && config.debugMode) { if (config?.debugMode) {
try { try {
// Upload the database bundles as an Actions artifact for debugging // Upload the database bundles as an Actions artifact for debugging
const toUpload: string[] = []; const toUpload: string[] = [];
@ -260,7 +260,7 @@ async function run() {
} }
} }
if (core.isDebug() && config !== undefined) { if (config?.debugMode) {
core.info("Debug mode is on. Printing CodeQL debug logs..."); core.info("Debug mode is on. Printing CodeQL debug logs...");
for (const language of config.languages) { for (const language of config.languages) {
const databaseDirectory = util.getCodeQLDatabasePath(config, language); const databaseDirectory = util.getCodeQLDatabasePath(config, language);

View file

@ -209,11 +209,9 @@ export async function runQueries(
{} {}
); );
const cliCanCountBaseline = await cliCanCountLoC(); const cliCanCountBaseline = await cliCanCountLoC();
const debugMode = const countLocDebugMode =
process.env["INTERNAL_CODEQL_ACTION_DEBUG_LOC"] || process.env["INTERNAL_CODEQL_ACTION_DEBUG_LOC"] || config.debugMode;
process.env["ACTIONS_RUNNER_DEBUG"] || if (!cliCanCountBaseline || countLocDebugMode) {
process.env["ACTIONS_STEP_DEBUG"];
if (!cliCanCountBaseline || debugMode) {
// count the number of lines in the background // count the number of lines in the background
locPromise = countLoc( locPromise = countLoc(
path.resolve(), path.resolve(),
@ -310,7 +308,8 @@ export async function runQueries(
const analysisSummary = await runInterpretResults( const analysisSummary = await runInterpretResults(
language, language,
querySuitePaths, querySuitePaths,
sarifFile sarifFile,
config.debugMode
); );
if (!cliCanCountBaseline) if (!cliCanCountBaseline)
await injectLinesOfCode(sarifFile, language, locPromise); await injectLinesOfCode(sarifFile, language, locPromise);
@ -318,7 +317,7 @@ export async function runQueries(
new Date().getTime() - startTimeInterpretResults; new Date().getTime() - startTimeInterpretResults;
logger.endGroup(); logger.endGroup();
logger.info(analysisSummary); logger.info(analysisSummary);
if (!cliCanCountBaseline || debugMode) if (!cliCanCountBaseline || countLocDebugMode)
printLinesOfCodeSummary(logger, language, await locPromise); printLinesOfCodeSummary(logger, language, await locPromise);
if (cliCanCountBaseline) logger.info(await runPrintLinesOfCode(language)); if (cliCanCountBaseline) logger.info(await runPrintLinesOfCode(language));
} catch (e) { } catch (e) {
@ -339,7 +338,8 @@ export async function runQueries(
async function runInterpretResults( async function runInterpretResults(
language: Language, language: Language,
queries: string[], queries: string[],
sarifFile: string sarifFile: string,
enableDebugLogging: boolean
): Promise<string> { ): Promise<string> {
const databasePath = util.getCodeQLDatabasePath(config, language); const databasePath = util.getCodeQLDatabasePath(config, language);
const codeql = await getCodeQL(config.codeQLCmd); const codeql = await getCodeQL(config.codeQLCmd);
@ -349,6 +349,7 @@ export async function runQueries(
sarifFile, sarifFile,
addSnippetsFlag, addSnippetsFlag,
threadsFlag, threadsFlag,
enableDebugLogging ? "-vv" : "-v",
automationDetailsId automationDetailsId
); );
} }

View file

@ -400,7 +400,7 @@ test("databaseInterpretResults() does not set --sarif-add-query-help for 2.7.0",
const runnerConstructorStub = stubToolRunnerConstructor(); const runnerConstructorStub = stubToolRunnerConstructor();
const codeqlObject = await codeql.getCodeQLForTesting(); const codeqlObject = await codeql.getCodeQLForTesting();
sinon.stub(codeqlObject, "getVersion").resolves("2.7.0"); sinon.stub(codeqlObject, "getVersion").resolves("2.7.0");
await codeqlObject.databaseInterpretResults("", [], "", "", "", ""); await codeqlObject.databaseInterpretResults("", [], "", "", "", "-v", "");
t.false( t.false(
runnerConstructorStub.firstCall.args[1].includes("--sarif-add-query-help"), runnerConstructorStub.firstCall.args[1].includes("--sarif-add-query-help"),
"--sarif-add-query-help should be absent, but it is present" "--sarif-add-query-help should be absent, but it is present"
@ -411,7 +411,7 @@ test("databaseInterpretResults() sets --sarif-add-query-help for 2.7.1", async (
const runnerConstructorStub = stubToolRunnerConstructor(); const runnerConstructorStub = stubToolRunnerConstructor();
const codeqlObject = await codeql.getCodeQLForTesting(); const codeqlObject = await codeql.getCodeQLForTesting();
sinon.stub(codeqlObject, "getVersion").resolves("2.7.1"); sinon.stub(codeqlObject, "getVersion").resolves("2.7.1");
await codeqlObject.databaseInterpretResults("", [], "", "", "", ""); await codeqlObject.databaseInterpretResults("", [], "", "", "", "-v", "");
t.true( t.true(
runnerConstructorStub.firstCall.args[1].includes("--sarif-add-query-help"), runnerConstructorStub.firstCall.args[1].includes("--sarif-add-query-help"),
"--sarif-add-query-help should be present, but it is absent" "--sarif-add-query-help should be present, but it is absent"

View file

@ -157,6 +157,7 @@ export interface CodeQL {
sarifFile: string, sarifFile: string,
addSnippetsFlag: string, addSnippetsFlag: string,
threadsFlag: string, threadsFlag: string,
verbosityFlag: string | undefined,
automationDetailsId: string | undefined automationDetailsId: string | undefined
): Promise<string>; ): Promise<string>;
/** /**
@ -928,6 +929,7 @@ async function getCodeQLForCmd(
sarifFile: string, sarifFile: string,
addSnippetsFlag: string, addSnippetsFlag: string,
threadsFlag: string, threadsFlag: string,
verbosityFlag: string,
automationDetailsId: string | undefined automationDetailsId: string | undefined
): Promise<string> { ): Promise<string> {
const codeqlArgs = [ const codeqlArgs = [
@ -935,7 +937,7 @@ async function getCodeQLForCmd(
"interpret-results", "interpret-results",
threadsFlag, threadsFlag,
"--format=sarif-latest", "--format=sarif-latest",
"-v", verbosityFlag,
`--output=${sarifFile}`, `--output=${sarifFile}`,
addSnippetsFlag, addSnippetsFlag,
...getExtraOptionsFromEnv(["database", "interpret-results"]), ...getExtraOptionsFromEnv(["database", "interpret-results"]),

View file

@ -183,7 +183,11 @@ async function run() {
getOptionalInput("packs"), getOptionalInput("packs"),
getOptionalInput("config-file"), getOptionalInput("config-file"),
getOptionalInput("db-location"), getOptionalInput("db-location"),
getOptionalInput("debug") === "true", // Debug mode is enabled if:
// - The `init` Action is passed `debug: true`.
// - Actions step debugging is enabled (e.g. by [enabling debug logging for a rerun](https://docs.github.com/en/actions/managing-workflow-runs/re-running-workflows-and-jobs#re-running-all-the-jobs-in-a-workflow),
// or by setting the `ACTIONS_STEP_DEBUG` secret to `true`).
getOptionalInput("debug") === "true" || core.isDebug(),
getOptionalInput("debug-artifact-name") || DEFAULT_DEBUG_ARTIFACT_NAME, getOptionalInput("debug-artifact-name") || DEFAULT_DEBUG_ARTIFACT_NAME,
getOptionalInput("debug-database-name") || DEFAULT_DEBUG_DATABASE_NAME, getOptionalInput("debug-database-name") || DEFAULT_DEBUG_DATABASE_NAME,
repositoryNwo, repositoryNwo,