diff --git a/CHANGELOG.md b/CHANGELOG.md index ca2264d1d3..9c8f8f83b7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,7 @@ See the [releases page](https://github.com/github/codeql-action/releases) for th ## [UNRELEASED] - We are rolling out a feature in October 2023 that will improve the success rate of C/C++ autobuild. [#1889](https://github.com/github/codeql-action/pull/1889) +- Add a warning to help customers avoid inadvertently analyzing the same CodeQL language in multiple matrix jobs. [#1901](https://github.com/github/codeql-action/pull/1901) ## 2.21.8 - 19 Sep 2023 diff --git a/lib/init-action.js b/lib/init-action.js index fd33a87d27..7a468bf7d7 100644 --- a/lib/init-action.js +++ b/lib/init-action.js @@ -121,8 +121,7 @@ async function run() { const features = new feature_flags_1.Features(gitHubVersion, repositoryNwo, (0, actions_util_1.getTemporaryDirectory)(), logger); core.exportVariable(environment_1.EnvVar.JOB_RUN_UUID, (0, uuid_1.v4)()); try { - const workflowErrors = await (0, workflow_1.validateWorkflow)(logger); - if (!(await (0, status_report_1.sendStatusReport)(await (0, status_report_1.createStatusReportBase)("init", "starting", startedAt, await (0, util_1.checkDiskUsage)(logger), workflowErrors)))) { + if (!(await (0, status_report_1.sendStatusReport)(await (0, status_report_1.createStatusReportBase)("init", "starting", startedAt, await (0, util_1.checkDiskUsage)(logger))))) { return; } const codeQLDefaultVersionInfo = await features.getDefaultCliVersion(gitHubVersion.type); @@ -132,6 +131,7 @@ async function run() { toolsDownloadDurationMs = initCodeQLResult.toolsDownloadDurationMs; toolsVersion = initCodeQLResult.toolsVersion; toolsSource = initCodeQLResult.toolsSource; + await (0, workflow_1.validateWorkflow)(codeql, 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"), registriesInput, (0, actions_util_1.getOptionalInput)("config-file"), (0, actions_util_1.getOptionalInput)("db-location"), (0, actions_util_1.getOptionalInput)("config"), getTrapCachingEnabled(), // Debug mode is enabled if: // - The `init` Action is passed `debug: true`. diff --git a/lib/init-action.js.map b/lib/init-action.js.map index 3a15c38dab..00052e3163 100644 --- a/lib/init-action.js.map +++ b/lib/init-action.js.map @@ -1 +1 @@ -{"version":3,"file":"init-action.js","sourceRoot":"","sources":["../src/init-action.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"init-action.js","sourceRoot":"","sources":["../src/init-action.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/workflow.js b/lib/workflow.js index 9b7394f06a..9292a4c37b 100644 --- a/lib/workflow.js +++ b/lib/workflow.js @@ -78,11 +78,57 @@ exports.WorkflowErrors = toCodedErrors({ MissingPushHook: `Please specify an on.push hook to analyze and see code scanning alerts from the default branch on the Security tab.`, CheckoutWrongHead: `git checkout HEAD^2 is no longer necessary. Please remove this step as Code Scanning recommends analyzing the merge commit for best results.`, }); -function getWorkflowErrors(doc) { +/** + * Groups the given list of CodeQL languages by their extractor name. + * + * Resolves to `undefined` if the CodeQL version does not support language aliasing. + */ +async function groupLanguagesByExtractor(languages, codeql) { + const resolveResult = await codeql.betterResolveLanguages(); + if (!resolveResult.aliases) { + return undefined; + } + const aliases = resolveResult.aliases; + const languagesByExtractor = {}; + for (const language of languages) { + const extractorName = aliases[language] || language; + if (!languagesByExtractor[extractorName]) { + languagesByExtractor[extractorName] = []; + } + languagesByExtractor[extractorName].push(language); + } + return languagesByExtractor; +} +async function getWorkflowErrors(doc, codeql) { const errors = []; const jobName = process.env.GITHUB_JOB; if (jobName) { const job = doc?.jobs?.[jobName]; + if (job?.strategy?.matrix?.language) { + const matrixLanguages = job.strategy.matrix.language; + if (Array.isArray(matrixLanguages)) { + // Map extractors to entries in the `language` matrix parameter. This will allow us to + // detect languages which are analyzed in more than one job. + const matrixLanguagesByExtractor = await groupLanguagesByExtractor(matrixLanguages, codeql); + // If the CodeQL version does not support language aliasing, then `matrixLanguagesByExtractor` + // will be `undefined`. In this case, we cannot detect duplicate languages in the matrix. + if (matrixLanguagesByExtractor !== undefined) { + // Check for duplicate languages in the matrix + for (const [extractor, languages] of Object.entries(matrixLanguagesByExtractor)) { + if (languages.length > 1) { + errors.push({ + message: `CodeQL language '${extractor}' is referenced by more than one entry in the ` + + `'language' matrix parameter for job '${jobName}'. This may result in duplicate alerts. ` + + `Please edit the 'language' matrix parameter to keep only one of the following: ${languages + .map((language) => `'${language}'`) + .join(", ")}.`, + code: "DuplicateLanguageInMatrix", + }); + } + } + } + } + } const steps = job?.steps; if (Array.isArray(steps)) { for (const step of steps) { @@ -127,7 +173,7 @@ function getWorkflowErrors(doc) { return errors; } exports.getWorkflowErrors = getWorkflowErrors; -async function validateWorkflow(logger) { +async function validateWorkflow(codeql, logger) { let workflow; try { workflow = await getWorkflow(logger); @@ -137,7 +183,7 @@ async function validateWorkflow(logger) { } let workflowErrors; try { - workflowErrors = getWorkflowErrors(workflow); + workflowErrors = await getWorkflowErrors(workflow, codeql); } catch (e) { return `error: getWorkflowErrors() failed: ${String(e)}`; diff --git a/lib/workflow.js.map b/lib/workflow.js.map index 38da30e33c..9b8f6d2e0f 100644 --- a/lib/workflow.js.map +++ b/lib/workflow.js.map @@ -1 +1 @@ -{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"workflow.js","sourceRoot":"","sources":["../src/workflow.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/lib/workflow.test.js b/lib/workflow.test.js index 71b8537d50..ffd9115b17 100644 --- a/lib/workflow.test.js +++ b/lib/workflow.test.js @@ -28,119 +28,114 @@ var __importDefault = (this && this.__importDefault) || function (mod) { Object.defineProperty(exports, "__esModule", { value: true }); const ava_1 = __importDefault(require("ava")); const yaml = __importStar(require("js-yaml")); +const sinon = __importStar(require("sinon")); +const codeql_1 = require("./codeql"); const testing_utils_1 = require("./testing-utils"); const workflow_1 = require("./workflow"); function errorCodes(actual, expected) { return [actual.map(({ code }) => code), expected.map(({ code }) => code)]; } (0, testing_utils_1.setupTests)(ava_1.default); -(0, ava_1.default)("getWorkflowErrors() when on is empty", (t) => { - const errors = (0, workflow_1.getWorkflowErrors)({ on: {} }); +(0, ava_1.default)("getWorkflowErrors() when on is empty", async (t) => { + const errors = await (0, workflow_1.getWorkflowErrors)({ on: {} }, await (0, codeql_1.getCodeQLForTesting)()); t.deepEqual(...errorCodes(errors, [])); }); -(0, ava_1.default)("getWorkflowErrors() when on.push is an array missing pull_request", (t) => { - const errors = (0, workflow_1.getWorkflowErrors)({ on: ["push"] }); +(0, ava_1.default)("getWorkflowErrors() when on.push is an array missing pull_request", async (t) => { + const errors = await (0, workflow_1.getWorkflowErrors)({ on: ["push"] }, await (0, codeql_1.getCodeQLForTesting)()); t.deepEqual(...errorCodes(errors, [])); }); -(0, ava_1.default)("getWorkflowErrors() when on.push is an array missing push", (t) => { - const errors = (0, workflow_1.getWorkflowErrors)({ on: ["pull_request"] }); +(0, ava_1.default)("getWorkflowErrors() when on.push is an array missing push", async (t) => { + const errors = await (0, workflow_1.getWorkflowErrors)({ on: ["pull_request"] }, await (0, codeql_1.getCodeQLForTesting)()); t.deepEqual(...errorCodes(errors, [workflow_1.WorkflowErrors.MissingPushHook])); }); -(0, ava_1.default)("getWorkflowErrors() when on.push is valid", (t) => { - const errors = (0, workflow_1.getWorkflowErrors)({ +(0, ava_1.default)("getWorkflowErrors() when on.push is valid", async (t) => { + const errors = await (0, workflow_1.getWorkflowErrors)({ on: ["push", "pull_request"], - }); + }, await (0, codeql_1.getCodeQLForTesting)()); t.deepEqual(...errorCodes(errors, [])); }); -(0, ava_1.default)("getWorkflowErrors() when on.push is a valid superset", (t) => { - const errors = (0, workflow_1.getWorkflowErrors)({ +(0, ava_1.default)("getWorkflowErrors() when on.push is a valid superset", async (t) => { + const errors = await (0, workflow_1.getWorkflowErrors)({ on: ["push", "pull_request", "schedule"], - }); + }, await (0, codeql_1.getCodeQLForTesting)()); t.deepEqual(...errorCodes(errors, [])); }); -(0, ava_1.default)("getWorkflowErrors() when on.push is a correct object", (t) => { - const errors = (0, workflow_1.getWorkflowErrors)({ - on: { push: { branches: ["main"] }, pull_request: { branches: ["main"] } }, - }); +(0, ava_1.default)("getWorkflowErrors() when on.push is a correct object", async (t) => { + const errors = await (0, workflow_1.getWorkflowErrors)({ + on: { + push: { branches: ["main"] }, + pull_request: { branches: ["main"] }, + }, + }, await (0, codeql_1.getCodeQLForTesting)()); t.deepEqual(...errorCodes(errors, [])); }); -(0, ava_1.default)("getWorkflowErrors() when on.pull_requests is a string and correct", (t) => { - const errors = (0, workflow_1.getWorkflowErrors)({ +(0, ava_1.default)("getWorkflowErrors() when on.pull_requests is a string and correct", async (t) => { + const errors = await (0, workflow_1.getWorkflowErrors)({ on: { push: { branches: "*" }, pull_request: { branches: "*" } }, - }); + }, await (0, codeql_1.getCodeQLForTesting)()); t.deepEqual(...errorCodes(errors, [])); }); -(0, ava_1.default)("getWorkflowErrors() when on.push is correct with empty objects", (t) => { - const errors = (0, workflow_1.getWorkflowErrors)(yaml.load(` +(0, ava_1.default)("getWorkflowErrors() when on.push is correct with empty objects", async (t) => { + const errors = await (0, workflow_1.getWorkflowErrors)(yaml.load(` on: push: pull_request: - `)); + `), await (0, codeql_1.getCodeQLForTesting)()); t.deepEqual(...errorCodes(errors, [])); }); -(0, ava_1.default)("getWorkflowErrors() when on.push is not mismatched", (t) => { - const errors = (0, workflow_1.getWorkflowErrors)({ +(0, ava_1.default)("getWorkflowErrors() when on.push is not mismatched", async (t) => { + const errors = await (0, workflow_1.getWorkflowErrors)({ on: { push: { branches: ["main", "feature"] }, pull_request: { branches: ["main"] }, }, - }); + }, await (0, codeql_1.getCodeQLForTesting)()); t.deepEqual(...errorCodes(errors, [])); }); -(0, ava_1.default)("getWorkflowErrors() for a range of malformed workflows", (t) => { - t.deepEqual(...errorCodes((0, workflow_1.getWorkflowErrors)({ +(0, ava_1.default)("getWorkflowErrors() for a range of malformed workflows", async (t) => { + t.deepEqual(...errorCodes(await (0, workflow_1.getWorkflowErrors)({ on: { push: 1, pull_request: 1, }, - }), [])); - t.deepEqual(...errorCodes((0, workflow_1.getWorkflowErrors)({ + }, await (0, codeql_1.getCodeQLForTesting)()), [])); + t.deepEqual(...errorCodes(await (0, workflow_1.getWorkflowErrors)({ on: 1, - }), [])); - t.deepEqual(...errorCodes( - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument - (0, workflow_1.getWorkflowErrors)({ + }, await (0, codeql_1.getCodeQLForTesting)()), [])); + t.deepEqual(...errorCodes(await (0, workflow_1.getWorkflowErrors)({ on: 1, jobs: 1, - }), [])); - t.deepEqual(...errorCodes( - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument - (0, workflow_1.getWorkflowErrors)({ + }, await (0, codeql_1.getCodeQLForTesting)()), [])); + t.deepEqual(...errorCodes(await (0, workflow_1.getWorkflowErrors)({ on: 1, jobs: [1], - }), [])); - t.deepEqual(...errorCodes((0, workflow_1.getWorkflowErrors)({ + }, await (0, codeql_1.getCodeQLForTesting)()), [])); + t.deepEqual(...errorCodes(await (0, workflow_1.getWorkflowErrors)({ on: 1, jobs: { 1: 1 }, - }), [])); - t.deepEqual(...errorCodes((0, workflow_1.getWorkflowErrors)({ + }, await (0, codeql_1.getCodeQLForTesting)()), [])); + t.deepEqual(...errorCodes(await (0, workflow_1.getWorkflowErrors)({ on: 1, jobs: { test: 1 }, - }), [])); - t.deepEqual(...errorCodes((0, workflow_1.getWorkflowErrors)({ + }, await (0, codeql_1.getCodeQLForTesting)()), [])); + t.deepEqual(...errorCodes(await (0, workflow_1.getWorkflowErrors)({ on: 1, jobs: { test: [1] }, - }), [])); - t.deepEqual(...errorCodes( - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument - (0, workflow_1.getWorkflowErrors)({ + }, await (0, codeql_1.getCodeQLForTesting)()), [])); + t.deepEqual(...errorCodes(await (0, workflow_1.getWorkflowErrors)({ on: 1, jobs: { test: { steps: 1 } }, - }), [])); - t.deepEqual(...errorCodes( - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument - (0, workflow_1.getWorkflowErrors)({ + }, await (0, codeql_1.getCodeQLForTesting)()), [])); + t.deepEqual(...errorCodes(await (0, workflow_1.getWorkflowErrors)({ on: 1, jobs: { test: { steps: [{ notrun: "git checkout HEAD^2" }] } }, - }), [])); - t.deepEqual(...errorCodes((0, workflow_1.getWorkflowErrors)({ + }, await (0, codeql_1.getCodeQLForTesting)()), [])); + t.deepEqual(...errorCodes(await (0, workflow_1.getWorkflowErrors)({ on: 1, jobs: { test: [undefined] }, - }), [])); - t.deepEqual(...errorCodes((0, workflow_1.getWorkflowErrors)(1), [])); - t.deepEqual(...errorCodes( - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument - (0, workflow_1.getWorkflowErrors)({ + }, await (0, codeql_1.getCodeQLForTesting)()), [])); + t.deepEqual(...errorCodes(await (0, workflow_1.getWorkflowErrors)(1, await (0, codeql_1.getCodeQLForTesting)()), [])); + t.deepEqual(...errorCodes(await (0, workflow_1.getWorkflowErrors)({ on: { push: { branches: 1, @@ -149,25 +144,86 @@ function errorCodes(actual, expected) { branches: 1, }, }, - }), [])); + }, await (0, codeql_1.getCodeQLForTesting)()), [])); }); -(0, ava_1.default)("getWorkflowErrors() when on.pull_request for wildcard branches", (t) => { - const errors = (0, workflow_1.getWorkflowErrors)({ +(0, ava_1.default)("getWorkflowErrors() when on.pull_request for wildcard branches", async (t) => { + const errors = await (0, workflow_1.getWorkflowErrors)({ on: { push: { branches: ["feature/*"] }, pull_request: { branches: "feature/moose" }, }, - }); + }, await (0, codeql_1.getCodeQLForTesting)()); t.deepEqual(...errorCodes(errors, [])); }); -(0, ava_1.default)("getWorkflowErrors() when HEAD^2 is checked out", (t) => { +(0, ava_1.default)("getWorkflowErrors() when HEAD^2 is checked out", async (t) => { process.env.GITHUB_JOB = "test"; - const errors = (0, workflow_1.getWorkflowErrors)({ + const errors = await (0, workflow_1.getWorkflowErrors)({ on: ["push", "pull_request"], jobs: { test: { steps: [{ run: "git checkout HEAD^2" }] } }, - }); + }, await (0, codeql_1.getCodeQLForTesting)()); t.deepEqual(...errorCodes(errors, [workflow_1.WorkflowErrors.CheckoutWrongHead])); }); +(0, ava_1.default)("getWorkflowErrors() produces an error for workflow with language name and its alias", async (t) => { + await testLanguageAliases(t, ["java", "kotlin"], { java: ["java-kotlin", "kotlin"] }, [ + "CodeQL language 'java' is referenced by more than one entry in the 'language' matrix " + + "parameter for job 'test'. This may result in duplicate alerts. Please edit the 'language' " + + "matrix parameter to keep only one of the following: 'java', 'kotlin'.", + ]); +}); +(0, ava_1.default)("getWorkflowErrors() produces an error for workflow with two aliases same language", async (t) => { + await testLanguageAliases(t, ["java-kotlin", "kotlin"], { java: ["java-kotlin", "kotlin"] }, [ + "CodeQL language 'java' is referenced by more than one entry in the 'language' matrix " + + "parameter for job 'test'. This may result in duplicate alerts. Please edit the 'language' " + + "matrix parameter to keep only one of the following: 'java-kotlin', 'kotlin'.", + ]); +}); +(0, ava_1.default)("getWorkflowErrors() does not produce an error for workflow with two distinct languages", async (t) => { + await testLanguageAliases(t, ["java", "typescript"], { + java: ["java-kotlin", "kotlin"], + javascript: ["javascript-typescript", "typescript"], + }, []); +}); +(0, ava_1.default)("getWorkflowErrors() does not produce an error if codeql doesn't support language aliases", async (t) => { + await testLanguageAliases(t, ["java-kotlin", "kotlin"], undefined, []); +}); +async function testLanguageAliases(t, matrixLanguages, aliases, expectedErrorMessages) { + process.env.GITHUB_JOB = "test"; + const codeql = await (0, codeql_1.getCodeQLForTesting)(); + sinon.stub(codeql, "betterResolveLanguages").resolves({ + aliases: aliases !== undefined + ? // Remap from languageName -> aliases to alias -> languageName + Object.assign({}, ...Object.entries(aliases).flatMap(([language, languageAliases]) => languageAliases.map((alias) => ({ + [alias]: language, + })))) + : undefined, + extractors: { + java: [ + { + extractor_root: "", + }, + ], + }, + }); + const errors = await (0, workflow_1.getWorkflowErrors)({ + on: ["push", "pull_request"], + jobs: { + test: { + strategy: { + matrix: { + language: matrixLanguages, + }, + }, + steps: [ + { uses: "actions/checkout@v2" }, + { uses: "github/codeql-action/init@v2" }, + { uses: "github/codeql-action/analyze@v2" }, + ], + }, + }, + }, codeql); + t.is(errors.length, expectedErrorMessages.length); + t.deepEqual(errors.map((e) => e.message), expectedErrorMessages); +} (0, ava_1.default)("formatWorkflowErrors() when there is one error", (t) => { const message = (0, workflow_1.formatWorkflowErrors)([workflow_1.WorkflowErrors.CheckoutWrongHead]); t.true(message.startsWith("1 issue was detected with this workflow:")); @@ -213,19 +269,19 @@ function errorCodes(actual, expected) { t.true((0, workflow_1.patternIsSuperset)("/robin/*/release/*", "/robin/moose/release/goose")); t.false((0, workflow_1.patternIsSuperset)("/robin/moose/release/goose", "/robin/*/release/*")); }); -(0, ava_1.default)("getWorkflowErrors() when branches contain dots", (t) => { - const errors = (0, workflow_1.getWorkflowErrors)(yaml.load(` +(0, ava_1.default)("getWorkflowErrors() when branches contain dots", async (t) => { + const errors = await (0, workflow_1.getWorkflowErrors)(yaml.load(` on: push: branches: [4.1, master] pull_request: # The branches below must be a subset of the branches above branches: [4.1, master] - `)); + `), await (0, codeql_1.getCodeQLForTesting)()); t.deepEqual(...errorCodes(errors, [])); }); -(0, ava_1.default)("getWorkflowErrors() when on.push has a trailing comma", (t) => { - const errors = (0, workflow_1.getWorkflowErrors)(yaml.load(` +(0, ava_1.default)("getWorkflowErrors() when on.push has a trailing comma", async (t) => { + const errors = await (0, workflow_1.getWorkflowErrors)(yaml.load(` name: "CodeQL" on: push: @@ -233,12 +289,12 @@ function errorCodes(actual, expected) { pull_request: # The branches below must be a subset of the branches above branches: [master] - `)); + `), await (0, codeql_1.getCodeQLForTesting)()); t.deepEqual(...errorCodes(errors, [])); }); -(0, ava_1.default)("getWorkflowErrors() should only report the current job's CheckoutWrongHead", (t) => { +(0, ava_1.default)("getWorkflowErrors() should only report the current job's CheckoutWrongHead", async (t) => { process.env.GITHUB_JOB = "test"; - const errors = (0, workflow_1.getWorkflowErrors)(yaml.load(` + const errors = await (0, workflow_1.getWorkflowErrors)(yaml.load(` name: "CodeQL" on: push: @@ -257,12 +313,12 @@ function errorCodes(actual, expected) { test3: steps: [] - `)); + `), await (0, codeql_1.getCodeQLForTesting)()); t.deepEqual(...errorCodes(errors, [workflow_1.WorkflowErrors.CheckoutWrongHead])); }); -(0, ava_1.default)("getWorkflowErrors() should not report a different job's CheckoutWrongHead", (t) => { +(0, ava_1.default)("getWorkflowErrors() should not report a different job's CheckoutWrongHead", async (t) => { process.env.GITHUB_JOB = "test3"; - const errors = (0, workflow_1.getWorkflowErrors)(yaml.load(` + const errors = await (0, workflow_1.getWorkflowErrors)(yaml.load(` name: "CodeQL" on: push: @@ -281,41 +337,41 @@ function errorCodes(actual, expected) { test3: steps: [] - `)); + `), await (0, codeql_1.getCodeQLForTesting)()); t.deepEqual(...errorCodes(errors, [])); }); -(0, ava_1.default)("getWorkflowErrors() when on is missing", (t) => { - const errors = (0, workflow_1.getWorkflowErrors)(yaml.load(` +(0, ava_1.default)("getWorkflowErrors() when on is missing", async (t) => { + const errors = await (0, workflow_1.getWorkflowErrors)(yaml.load(` name: "CodeQL" - `)); + `), await (0, codeql_1.getCodeQLForTesting)()); t.deepEqual(...errorCodes(errors, [])); }); -(0, ava_1.default)("getWorkflowErrors() with a different on setup", (t) => { - t.deepEqual(...errorCodes((0, workflow_1.getWorkflowErrors)(yaml.load(` +(0, ava_1.default)("getWorkflowErrors() with a different on setup", async (t) => { + t.deepEqual(...errorCodes(await (0, workflow_1.getWorkflowErrors)(yaml.load(` name: "CodeQL" on: "workflow_dispatch" - `)), [])); - t.deepEqual(...errorCodes((0, workflow_1.getWorkflowErrors)(yaml.load(` + `), await (0, codeql_1.getCodeQLForTesting)()), [])); + t.deepEqual(...errorCodes(await (0, workflow_1.getWorkflowErrors)(yaml.load(` name: "CodeQL" on: [workflow_dispatch] - `)), [])); - t.deepEqual(...errorCodes((0, workflow_1.getWorkflowErrors)(yaml.load(` + `), await (0, codeql_1.getCodeQLForTesting)()), [])); + t.deepEqual(...errorCodes(await (0, workflow_1.getWorkflowErrors)(yaml.load(` name: "CodeQL" on: workflow_dispatch: {} - `)), [])); + `), await (0, codeql_1.getCodeQLForTesting)()), [])); }); -(0, ava_1.default)("getWorkflowErrors() should not report an error if PRs are totally unconfigured", (t) => { - t.deepEqual(...errorCodes((0, workflow_1.getWorkflowErrors)(yaml.load(` +(0, ava_1.default)("getWorkflowErrors() should not report an error if PRs are totally unconfigured", async (t) => { + t.deepEqual(...errorCodes(await (0, workflow_1.getWorkflowErrors)(yaml.load(` name: "CodeQL" on: push: branches: [master] - `)), [])); - t.deepEqual(...errorCodes((0, workflow_1.getWorkflowErrors)(yaml.load(` + `), await (0, codeql_1.getCodeQLForTesting)()), [])); + t.deepEqual(...errorCodes(await (0, workflow_1.getWorkflowErrors)(yaml.load(` name: "CodeQL" on: ["push"] - `)), [])); + `), await (0, codeql_1.getCodeQLForTesting)()), [])); }); (0, ava_1.default)("getCategoryInputOrThrow returns category for simple workflow with category", (t) => { process.env["GITHUB_REPOSITORY"] = "github/codeql-action-fake-repository"; diff --git a/lib/workflow.test.js.map b/lib/workflow.test.js.map index a4378055ad..f28eacb659 100644 --- a/lib/workflow.test.js.map +++ b/lib/workflow.test.js.map @@ -1 +1 @@ -{"version":3,"file":"workflow.test.js","sourceRoot":"","sources":["../src/workflow.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"workflow.test.js","sourceRoot":"","sources":["../src/workflow.test.ts"],"names":[],"mappings":"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"} \ No newline at end of file diff --git a/src/init-action.ts b/src/init-action.ts index ed775fc47e..a08e5446b7 100644 --- a/src/init-action.ts +++ b/src/init-action.ts @@ -217,8 +217,6 @@ async function run() { core.exportVariable(EnvVar.JOB_RUN_UUID, uuidV4()); try { - const workflowErrors = await validateWorkflow(logger); - if ( !(await sendStatusReport( await createStatusReportBase( @@ -226,7 +224,6 @@ async function run() { "starting", startedAt, await checkDiskUsage(logger), - workflowErrors, ), )) ) { @@ -250,6 +247,8 @@ async function run() { toolsVersion = initCodeQLResult.toolsVersion; toolsSource = initCodeQLResult.toolsSource; + await validateWorkflow(codeql, logger); + config = await initConfig( getOptionalInput("languages"), getOptionalInput("queries"), diff --git a/src/workflow.test.ts b/src/workflow.test.ts index c2309b18cb..dbba412ab3 100644 --- a/src/workflow.test.ts +++ b/src/workflow.test.ts @@ -1,6 +1,8 @@ -import test from "ava"; +import test, { ExecutionContext } from "ava"; import * as yaml from "js-yaml"; +import * as sinon from "sinon"; +import { getCodeQLForTesting } from "./codeql"; import { setupTests } from "./testing-utils"; import { CodedError, @@ -22,227 +24,395 @@ function errorCodes( setupTests(test); -test("getWorkflowErrors() when on is empty", (t) => { - const errors = getWorkflowErrors({ on: {} }); +test("getWorkflowErrors() when on is empty", async (t) => { + const errors = await getWorkflowErrors( + { on: {} }, + await getCodeQLForTesting(), + ); t.deepEqual(...errorCodes(errors, [])); }); -test("getWorkflowErrors() when on.push is an array missing pull_request", (t) => { - const errors = getWorkflowErrors({ on: ["push"] }); +test("getWorkflowErrors() when on.push is an array missing pull_request", async (t) => { + const errors = await getWorkflowErrors( + { on: ["push"] }, + await getCodeQLForTesting(), + ); t.deepEqual(...errorCodes(errors, [])); }); -test("getWorkflowErrors() when on.push is an array missing push", (t) => { - const errors = getWorkflowErrors({ on: ["pull_request"] }); +test("getWorkflowErrors() when on.push is an array missing push", async (t) => { + const errors = await getWorkflowErrors( + { on: ["pull_request"] }, + await getCodeQLForTesting(), + ); t.deepEqual(...errorCodes(errors, [WorkflowErrors.MissingPushHook])); }); -test("getWorkflowErrors() when on.push is valid", (t) => { - const errors = getWorkflowErrors({ - on: ["push", "pull_request"], - }); +test("getWorkflowErrors() when on.push is valid", async (t) => { + const errors = await getWorkflowErrors( + { + on: ["push", "pull_request"], + }, + await getCodeQLForTesting(), + ); t.deepEqual(...errorCodes(errors, [])); }); -test("getWorkflowErrors() when on.push is a valid superset", (t) => { - const errors = getWorkflowErrors({ - on: ["push", "pull_request", "schedule"], - }); +test("getWorkflowErrors() when on.push is a valid superset", async (t) => { + const errors = await getWorkflowErrors( + { + on: ["push", "pull_request", "schedule"], + }, + await getCodeQLForTesting(), + ); t.deepEqual(...errorCodes(errors, [])); }); -test("getWorkflowErrors() when on.push is a correct object", (t) => { - const errors = getWorkflowErrors({ - on: { push: { branches: ["main"] }, pull_request: { branches: ["main"] } }, - }); +test("getWorkflowErrors() when on.push is a correct object", async (t) => { + const errors = await getWorkflowErrors( + { + on: { + push: { branches: ["main"] }, + pull_request: { branches: ["main"] }, + }, + }, + await getCodeQLForTesting(), + ); t.deepEqual(...errorCodes(errors, [])); }); -test("getWorkflowErrors() when on.pull_requests is a string and correct", (t) => { - const errors = getWorkflowErrors({ - on: { push: { branches: "*" }, pull_request: { branches: "*" } }, - }); +test("getWorkflowErrors() when on.pull_requests is a string and correct", async (t) => { + const errors = await getWorkflowErrors( + { + on: { push: { branches: "*" }, pull_request: { branches: "*" } }, + }, + await getCodeQLForTesting(), + ); t.deepEqual(...errorCodes(errors, [])); }); -test("getWorkflowErrors() when on.push is correct with empty objects", (t) => { - const errors = getWorkflowErrors( +test("getWorkflowErrors() when on.push is correct with empty objects", async (t) => { + const errors = await getWorkflowErrors( yaml.load(` on: push: pull_request: `) as Workflow, + await getCodeQLForTesting(), ); t.deepEqual(...errorCodes(errors, [])); }); -test("getWorkflowErrors() when on.push is not mismatched", (t) => { - const errors = getWorkflowErrors({ - on: { - push: { branches: ["main", "feature"] }, - pull_request: { branches: ["main"] }, +test("getWorkflowErrors() when on.push is not mismatched", async (t) => { + const errors = await getWorkflowErrors( + { + on: { + push: { branches: ["main", "feature"] }, + pull_request: { branches: ["main"] }, + }, }, - }); + await getCodeQLForTesting(), + ); t.deepEqual(...errorCodes(errors, [])); }); -test("getWorkflowErrors() for a range of malformed workflows", (t) => { +test("getWorkflowErrors() for a range of malformed workflows", async (t) => { t.deepEqual( ...errorCodes( - getWorkflowErrors({ - on: { - push: 1, - pull_request: 1, - }, - } as Workflow), + await getWorkflowErrors( + { + on: { + push: 1, + pull_request: 1, + }, + } as Workflow, + await getCodeQLForTesting(), + ), [], ), ); t.deepEqual( ...errorCodes( - getWorkflowErrors({ - on: 1, - } as Workflow), + await getWorkflowErrors( + { + on: 1, + } as Workflow, + await getCodeQLForTesting(), + ), [], ), ); t.deepEqual( ...errorCodes( - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument - getWorkflowErrors({ - on: 1, - jobs: 1, - } as any), + await getWorkflowErrors( + { + on: 1, + jobs: 1, + } as unknown as Workflow, + await getCodeQLForTesting(), + ), [], ), ); t.deepEqual( ...errorCodes( - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument - getWorkflowErrors({ - on: 1, - jobs: [1], - } as any), + await getWorkflowErrors( + { + on: 1, + jobs: [1], + } as unknown as Workflow, + await getCodeQLForTesting(), + ), [], ), ); t.deepEqual( ...errorCodes( - getWorkflowErrors({ - on: 1, - jobs: { 1: 1 }, - } as Workflow), + await getWorkflowErrors( + { + on: 1, + jobs: { 1: 1 }, + } as Workflow, + await getCodeQLForTesting(), + ), [], ), ); t.deepEqual( ...errorCodes( - getWorkflowErrors({ - on: 1, - jobs: { test: 1 }, - } as Workflow), + await getWorkflowErrors( + { + on: 1, + jobs: { test: 1 }, + } as Workflow, + await getCodeQLForTesting(), + ), [], ), ); t.deepEqual( ...errorCodes( - getWorkflowErrors({ - on: 1, - jobs: { test: [1] }, - } as Workflow), + await getWorkflowErrors( + { + on: 1, + jobs: { test: [1] }, + } as Workflow, + await getCodeQLForTesting(), + ), [], ), ); t.deepEqual( ...errorCodes( - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument - getWorkflowErrors({ - on: 1, - jobs: { test: { steps: 1 } }, - } as any), + await getWorkflowErrors( + { + on: 1, + jobs: { test: { steps: 1 } }, + } as unknown as Workflow, + await getCodeQLForTesting(), + ), [], ), ); t.deepEqual( ...errorCodes( - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument - getWorkflowErrors({ - on: 1, - jobs: { test: { steps: [{ notrun: "git checkout HEAD^2" }] } }, - } as any), + await getWorkflowErrors( + { + on: 1, + jobs: { test: { steps: [{ notrun: "git checkout HEAD^2" }] } }, + } as unknown as Workflow, + await getCodeQLForTesting(), + ), [], ), ); t.deepEqual( ...errorCodes( - getWorkflowErrors({ - on: 1, - jobs: { test: [undefined] }, - } as Workflow), + await getWorkflowErrors( + { + on: 1, + jobs: { test: [undefined] }, + } as Workflow, + await getCodeQLForTesting(), + ), [], ), ); - t.deepEqual(...errorCodes(getWorkflowErrors(1 as Workflow), [])); + t.deepEqual( + ...errorCodes( + await getWorkflowErrors(1 as Workflow, await getCodeQLForTesting()), + [], + ), + ); t.deepEqual( ...errorCodes( - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument - getWorkflowErrors({ - on: { - push: { - branches: 1, + await getWorkflowErrors( + { + on: { + push: { + branches: 1, + }, + pull_request: { + branches: 1, + }, }, - pull_request: { - branches: 1, - }, - }, - } as any), + } as unknown as Workflow, + await getCodeQLForTesting(), + ), [], ), ); }); -test("getWorkflowErrors() when on.pull_request for wildcard branches", (t) => { - const errors = getWorkflowErrors({ - on: { - push: { branches: ["feature/*"] }, - pull_request: { branches: "feature/moose" }, +test("getWorkflowErrors() when on.pull_request for wildcard branches", async (t) => { + const errors = await getWorkflowErrors( + { + on: { + push: { branches: ["feature/*"] }, + pull_request: { branches: "feature/moose" }, + }, }, - }); + await getCodeQLForTesting(), + ); t.deepEqual(...errorCodes(errors, [])); }); -test("getWorkflowErrors() when HEAD^2 is checked out", (t) => { +test("getWorkflowErrors() when HEAD^2 is checked out", async (t) => { process.env.GITHUB_JOB = "test"; - const errors = getWorkflowErrors({ - on: ["push", "pull_request"], - jobs: { test: { steps: [{ run: "git checkout HEAD^2" }] } }, - }); + const errors = await getWorkflowErrors( + { + on: ["push", "pull_request"], + jobs: { test: { steps: [{ run: "git checkout HEAD^2" }] } }, + }, + await getCodeQLForTesting(), + ); t.deepEqual(...errorCodes(errors, [WorkflowErrors.CheckoutWrongHead])); }); +test("getWorkflowErrors() produces an error for workflow with language name and its alias", async (t) => { + await testLanguageAliases( + t, + ["java", "kotlin"], + { java: ["java-kotlin", "kotlin"] }, + [ + "CodeQL language 'java' is referenced by more than one entry in the 'language' matrix " + + "parameter for job 'test'. This may result in duplicate alerts. Please edit the 'language' " + + "matrix parameter to keep only one of the following: 'java', 'kotlin'.", + ], + ); +}); + +test("getWorkflowErrors() produces an error for workflow with two aliases same language", async (t) => { + await testLanguageAliases( + t, + ["java-kotlin", "kotlin"], + { java: ["java-kotlin", "kotlin"] }, + [ + "CodeQL language 'java' is referenced by more than one entry in the 'language' matrix " + + "parameter for job 'test'. This may result in duplicate alerts. Please edit the 'language' " + + "matrix parameter to keep only one of the following: 'java-kotlin', 'kotlin'.", + ], + ); +}); + +test("getWorkflowErrors() does not produce an error for workflow with two distinct languages", async (t) => { + await testLanguageAliases( + t, + ["java", "typescript"], + { + java: ["java-kotlin", "kotlin"], + javascript: ["javascript-typescript", "typescript"], + }, + [], + ); +}); + +test("getWorkflowErrors() does not produce an error if codeql doesn't support language aliases", async (t) => { + await testLanguageAliases(t, ["java-kotlin", "kotlin"], undefined, []); +}); + +async function testLanguageAliases( + t: ExecutionContext, + matrixLanguages: string[], + aliases: { [languageName: string]: string[] } | undefined, + expectedErrorMessages: string[], +) { + process.env.GITHUB_JOB = "test"; + + const codeql = await getCodeQLForTesting(); + sinon.stub(codeql, "betterResolveLanguages").resolves({ + aliases: + aliases !== undefined + ? // Remap from languageName -> aliases to alias -> languageName + Object.assign( + {}, + ...Object.entries(aliases).flatMap(([language, languageAliases]) => + languageAliases.map((alias) => ({ + [alias]: language, + })), + ), + ) + : undefined, + extractors: { + java: [ + { + extractor_root: "", + }, + ], + }, + }); + + const errors = await getWorkflowErrors( + { + on: ["push", "pull_request"], + jobs: { + test: { + strategy: { + matrix: { + language: matrixLanguages, + }, + }, + steps: [ + { uses: "actions/checkout@v2" }, + { uses: "github/codeql-action/init@v2" }, + { uses: "github/codeql-action/analyze@v2" }, + ], + }, + }, + } as Workflow, + codeql, + ); + + t.is(errors.length, expectedErrorMessages.length); + t.deepEqual( + errors.map((e) => e.message), + expectedErrorMessages, + ); +} + test("formatWorkflowErrors() when there is one error", (t) => { const message = formatWorkflowErrors([WorkflowErrors.CheckoutWrongHead]); t.true(message.startsWith("1 issue was detected with this workflow:")); @@ -297,8 +467,8 @@ test("patternIsSuperset()", (t) => { ); }); -test("getWorkflowErrors() when branches contain dots", (t) => { - const errors = getWorkflowErrors( +test("getWorkflowErrors() when branches contain dots", async (t) => { + const errors = await getWorkflowErrors( yaml.load(` on: push: @@ -307,13 +477,14 @@ test("getWorkflowErrors() when branches contain dots", (t) => { # The branches below must be a subset of the branches above branches: [4.1, master] `) as Workflow, + await getCodeQLForTesting(), ); t.deepEqual(...errorCodes(errors, [])); }); -test("getWorkflowErrors() when on.push has a trailing comma", (t) => { - const errors = getWorkflowErrors( +test("getWorkflowErrors() when on.push has a trailing comma", async (t) => { + const errors = await getWorkflowErrors( yaml.load(` name: "CodeQL" on: @@ -323,15 +494,16 @@ test("getWorkflowErrors() when on.push has a trailing comma", (t) => { # The branches below must be a subset of the branches above branches: [master] `) as Workflow, + await getCodeQLForTesting(), ); t.deepEqual(...errorCodes(errors, [])); }); -test("getWorkflowErrors() should only report the current job's CheckoutWrongHead", (t) => { +test("getWorkflowErrors() should only report the current job's CheckoutWrongHead", async (t) => { process.env.GITHUB_JOB = "test"; - const errors = getWorkflowErrors( + const errors = await getWorkflowErrors( yaml.load(` name: "CodeQL" on: @@ -352,15 +524,16 @@ test("getWorkflowErrors() should only report the current job's CheckoutWrongHead test3: steps: [] `) as Workflow, + await getCodeQLForTesting(), ); t.deepEqual(...errorCodes(errors, [WorkflowErrors.CheckoutWrongHead])); }); -test("getWorkflowErrors() should not report a different job's CheckoutWrongHead", (t) => { +test("getWorkflowErrors() should not report a different job's CheckoutWrongHead", async (t) => { process.env.GITHUB_JOB = "test3"; - const errors = getWorkflowErrors( + const errors = await getWorkflowErrors( yaml.load(` name: "CodeQL" on: @@ -381,29 +554,32 @@ test("getWorkflowErrors() should not report a different job's CheckoutWrongHead" test3: steps: [] `) as Workflow, + await getCodeQLForTesting(), ); t.deepEqual(...errorCodes(errors, [])); }); -test("getWorkflowErrors() when on is missing", (t) => { - const errors = getWorkflowErrors( +test("getWorkflowErrors() when on is missing", async (t) => { + const errors = await getWorkflowErrors( yaml.load(` name: "CodeQL" `) as Workflow, + await getCodeQLForTesting(), ); t.deepEqual(...errorCodes(errors, [])); }); -test("getWorkflowErrors() with a different on setup", (t) => { +test("getWorkflowErrors() with a different on setup", async (t) => { t.deepEqual( ...errorCodes( - getWorkflowErrors( + await getWorkflowErrors( yaml.load(` name: "CodeQL" on: "workflow_dispatch" `) as Workflow, + await getCodeQLForTesting(), ), [], ), @@ -411,11 +587,12 @@ test("getWorkflowErrors() with a different on setup", (t) => { t.deepEqual( ...errorCodes( - getWorkflowErrors( + await getWorkflowErrors( yaml.load(` name: "CodeQL" on: [workflow_dispatch] `) as Workflow, + await getCodeQLForTesting(), ), [], ), @@ -423,28 +600,30 @@ test("getWorkflowErrors() with a different on setup", (t) => { t.deepEqual( ...errorCodes( - getWorkflowErrors( + await getWorkflowErrors( yaml.load(` name: "CodeQL" on: workflow_dispatch: {} `) as Workflow, + await getCodeQLForTesting(), ), [], ), ); }); -test("getWorkflowErrors() should not report an error if PRs are totally unconfigured", (t) => { +test("getWorkflowErrors() should not report an error if PRs are totally unconfigured", async (t) => { t.deepEqual( ...errorCodes( - getWorkflowErrors( + await getWorkflowErrors( yaml.load(` name: "CodeQL" on: push: branches: [master] `) as Workflow, + await getCodeQLForTesting(), ), [], ), @@ -452,11 +631,12 @@ test("getWorkflowErrors() should not report an error if PRs are totally unconfig t.deepEqual( ...errorCodes( - getWorkflowErrors( + await getWorkflowErrors( yaml.load(` name: "CodeQL" on: ["push"] `) as Workflow, + await getCodeQLForTesting(), ), [], ), diff --git a/src/workflow.ts b/src/workflow.ts index c1406fbfb0..decd03f64a 100644 --- a/src/workflow.ts +++ b/src/workflow.ts @@ -6,6 +6,7 @@ import * as core from "@actions/core"; import * as yaml from "js-yaml"; import * as api from "./api-client"; +import { CodeQL } from "./codeql"; import { EnvVar } from "./environment"; import { Logger } from "./logging"; import { getRequiredEnvParam, isInTestMode } from "./util"; @@ -21,6 +22,7 @@ interface WorkflowJob { name?: string; "runs-on"?: string; steps?: WorkflowJobStep[]; + strategy?: { matrix: { [key: string]: string[] } }; uses?: string; } @@ -104,7 +106,37 @@ export const WorkflowErrors = toCodedErrors({ CheckoutWrongHead: `git checkout HEAD^2 is no longer necessary. Please remove this step as Code Scanning recommends analyzing the merge commit for best results.`, }); -export function getWorkflowErrors(doc: Workflow): CodedError[] { +/** + * Groups the given list of CodeQL languages by their extractor name. + * + * Resolves to `undefined` if the CodeQL version does not support language aliasing. + */ +async function groupLanguagesByExtractor( + languages: string[], + codeql: CodeQL, +): Promise<{ [extractorName: string]: string[] } | undefined> { + const resolveResult = await codeql.betterResolveLanguages(); + if (!resolveResult.aliases) { + return undefined; + } + const aliases = resolveResult.aliases; + const languagesByExtractor: { + [extractorName: string]: string[]; + } = {}; + for (const language of languages) { + const extractorName = aliases[language] || language; + if (!languagesByExtractor[extractorName]) { + languagesByExtractor[extractorName] = []; + } + languagesByExtractor[extractorName].push(language); + } + return languagesByExtractor; +} + +export async function getWorkflowErrors( + doc: Workflow, + codeql: CodeQL, +): Promise { const errors: CodedError[] = []; const jobName = process.env.GITHUB_JOB; @@ -112,6 +144,38 @@ export function getWorkflowErrors(doc: Workflow): CodedError[] { if (jobName) { const job = doc?.jobs?.[jobName]; + if (job?.strategy?.matrix?.language) { + const matrixLanguages = job.strategy.matrix.language; + if (Array.isArray(matrixLanguages)) { + // Map extractors to entries in the `language` matrix parameter. This will allow us to + // detect languages which are analyzed in more than one job. + const matrixLanguagesByExtractor = await groupLanguagesByExtractor( + matrixLanguages, + codeql, + ); + // If the CodeQL version does not support language aliasing, then `matrixLanguagesByExtractor` + // will be `undefined`. In this case, we cannot detect duplicate languages in the matrix. + if (matrixLanguagesByExtractor !== undefined) { + // Check for duplicate languages in the matrix + for (const [extractor, languages] of Object.entries( + matrixLanguagesByExtractor, + )) { + if (languages.length > 1) { + errors.push({ + message: + `CodeQL language '${extractor}' is referenced by more than one entry in the ` + + `'language' matrix parameter for job '${jobName}'. This may result in duplicate alerts. ` + + `Please edit the 'language' matrix parameter to keep only one of the following: ${languages + .map((language) => `'${language}'`) + .join(", ")}.`, + code: "DuplicateLanguageInMatrix", + }); + } + } + } + } + } + const steps = job?.steps; if (Array.isArray(steps)) { @@ -163,6 +227,7 @@ export function getWorkflowErrors(doc: Workflow): CodedError[] { } export async function validateWorkflow( + codeql: CodeQL, logger: Logger, ): Promise { let workflow: Workflow; @@ -173,7 +238,7 @@ export async function validateWorkflow( } let workflowErrors: CodedError[]; try { - workflowErrors = getWorkflowErrors(workflow); + workflowErrors = await getWorkflowErrors(workflow, codeql); } catch (e) { return `error: getWorkflowErrors() failed: ${String(e)}`; }