From 431174f62063abb35081859de7214678dcda7f51 Mon Sep 17 00:00:00 2001 From: Henry Mercer Date: Fri, 22 Sep 2023 18:55:52 +0100 Subject: [PATCH] Factor out `groupLanguagesByExtractor` --- lib/workflow.js | 40 ++++++++++++++++++++++------------ lib/workflow.js.map | 2 +- src/workflow.ts | 52 +++++++++++++++++++++++++++++++-------------- 3 files changed, 64 insertions(+), 30 deletions(-) diff --git a/lib/workflow.js b/lib/workflow.js index bb49d7ce6..9292a4c37 100644 --- a/lib/workflow.js +++ b/lib/workflow.js @@ -78,6 +78,27 @@ 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.`, }); +/** + * 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; @@ -86,19 +107,12 @@ async function getWorkflowErrors(doc, codeql) { if (job?.strategy?.matrix?.language) { const matrixLanguages = job.strategy.matrix.language; if (Array.isArray(matrixLanguages)) { - const resolveResult = await codeql.betterResolveLanguages(); - if (resolveResult.aliases) { - const aliases = resolveResult.aliases; - // 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 = {}; - for (const language of matrixLanguages) { - const extractorName = aliases[language] || language; - if (!matrixLanguagesByExtractor[extractorName]) { - matrixLanguagesByExtractor[extractorName] = []; - } - matrixLanguagesByExtractor[extractorName].push(language); - } + // 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) { diff --git a/lib/workflow.js.map b/lib/workflow.js.map index 439c8dace..9b8f6d2e0 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/src/workflow.ts b/src/workflow.ts index 2ecbb05a7..decd03f64 100644 --- a/src/workflow.ts +++ b/src/workflow.ts @@ -106,6 +106,33 @@ 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.`, }); +/** + * 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, @@ -120,22 +147,15 @@ export async function getWorkflowErrors( if (job?.strategy?.matrix?.language) { const matrixLanguages = job.strategy.matrix.language; if (Array.isArray(matrixLanguages)) { - const resolveResult = await codeql.betterResolveLanguages(); - if (resolveResult.aliases) { - const aliases = resolveResult.aliases; - // 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: { - [extractorName: string]: string[]; - } = {}; - for (const language of matrixLanguages) { - const extractorName = aliases[language] || language; - if (!matrixLanguagesByExtractor[extractorName]) { - matrixLanguagesByExtractor[extractorName] = []; - } - matrixLanguagesByExtractor[extractorName].push(language); - } - + // 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,