diff --git a/lib/analyze-action.js b/lib/analyze-action.js index a781dbc41..9f00316aa 100644 --- a/lib/analyze-action.js +++ b/lib/analyze-action.js @@ -91623,6 +91623,12 @@ function isCodeScanningEnabled(config) { function isCodeQualityEnabled(config) { return config.analysisKinds.includes("code-quality" /* CodeQuality */); } +function getDbAnalysisKind(config) { + return isCodeScanningEnabled(config) ? "code-scanning" /* CodeScanning */ : "code-quality" /* CodeQuality */; +} +function getDbAnalysisConfig(config) { + return getDbAnalysisKind(config) === "code-scanning" /* CodeScanning */ ? CodeScanning : CodeQuality; +} // src/setup-codeql.ts var fs12 = __toESM(require("fs")); @@ -93579,6 +93585,9 @@ function resolveQuerySuiteAlias(language, maybeSuite) { } return maybeSuite; } +function addSarifExtension(analysis, base) { + return `${base}.${analysis.sarifExtension}`; +} async function runQueries(sarifFolder, memoryFlag, addSnippetsFlag, threadsFlag, diffRangePackDir, automationDetailsId, codeql, config, logger, features) { const statusReport = {}; const queryFlags = [memoryFlag, threadsFlag]; @@ -93598,9 +93607,13 @@ async function runQueries(sarifFolder, memoryFlag, addSnippetsFlag, threadsFlag, incrementalMode.push("overlay"); } const sarifRunPropertyFlag = incrementalMode.length > 0 ? `--sarif-run-property=incrementalMode=${incrementalMode.join(",")}` : void 0; + const dbAnalysisConfig = getDbAnalysisConfig(config); for (const language of config.languages) { try { - const sarifFile = isCodeScanningEnabled(config) ? path16.join(sarifFolder, `${language}.sarif`) : path16.join(sarifFolder, `${language}.quality.sarif`); + const sarifFile = path16.join( + sarifFolder, + addSarifExtension(dbAnalysisConfig, language) + ); const queries = []; if (isCodeQualityEnabled(config) && isCodeScanningEnabled(config)) { queries.push(getGeneratedSuitePath(config, language)); @@ -93617,7 +93630,9 @@ async function runQueries(sarifFolder, memoryFlag, addSnippetsFlag, threadsFlag, const startTimeInterpretResults = /* @__PURE__ */ new Date(); let analysisSummary; if (isCodeScanningEnabled(config) || isCodeQualityEnabled(config)) { - logger.startGroup(`Interpreting results for ${language}`); + logger.startGroup( + `Interpreting ${dbAnalysisConfig.name} results for ${language}` + ); let category = automationDetailsId; if (isCodeQualityEnabled(config)) { category = fixCodeQualityCategory(logger, automationDetailsId); @@ -93632,14 +93647,16 @@ async function runQueries(sarifFolder, memoryFlag, addSnippetsFlag, threadsFlag, } let qualityAnalysisSummary; if (isCodeQualityEnabled(config) && isCodeScanningEnabled(config)) { - logger.info(`Interpreting quality results for ${language}`); + logger.info( + `Interpreting ${CodeQuality.name} results for ${language}` + ); const qualityCategory = fixCodeQualityCategory( logger, automationDetailsId ); const qualitySarifFile = path16.join( sarifFolder, - `${language}.quality.sarif` + addSarifExtension(CodeQuality, language) ); qualityAnalysisSummary = await runInterpretResults( language, diff --git a/src/analyze.ts b/src/analyze.ts index 82f470d01..ef15d0883 100644 --- a/src/analyze.ts +++ b/src/analyze.ts @@ -608,6 +608,16 @@ export function resolveQuerySuiteAlias( return maybeSuite; } +/** + * Adds the appropriate file extension for the given analysis configuration to the given base filename. + */ +export function addSarifExtension( + analysis: analyses.AnalysisConfig, + base: string, +): string { + return `${base}.${analysis.sarifExtension}`; +} + // Runs queries and creates sarif files in the given folder export async function runQueries( sarifFolder: string, @@ -650,13 +660,16 @@ export async function runQueries( ? `--sarif-run-property=incrementalMode=${incrementalMode.join(",")}` : undefined; + const dbAnalysisConfig = configUtils.getDbAnalysisConfig(config); + for (const language of config.languages) { try { // If Code Scanning is enabled, then the main SARIF file is always the Code Scanning one. // Otherwise, only Code Quality is enabled, and the main SARIF file is the Code Quality one. - const sarifFile = configUtils.isCodeScanningEnabled(config) - ? path.join(sarifFolder, `${language}.sarif`) - : path.join(sarifFolder, `${language}.quality.sarif`); + const sarifFile = path.join( + sarifFolder, + addSarifExtension(dbAnalysisConfig, language), + ); // This should be empty to run only the query suite that was generated when // the database was initialised. @@ -701,7 +714,9 @@ export async function runQueries( configUtils.isCodeScanningEnabled(config) || configUtils.isCodeQualityEnabled(config) ) { - logger.startGroup(`Interpreting results for ${language}`); + logger.startGroup( + `Interpreting ${dbAnalysisConfig.name} results for ${language}`, + ); // If this is a Code Quality analysis, correct the category to one // accepted by the Code Quality backend. @@ -728,14 +743,16 @@ export async function runQueries( configUtils.isCodeQualityEnabled(config) && configUtils.isCodeScanningEnabled(config) ) { - logger.info(`Interpreting quality results for ${language}`); + logger.info( + `Interpreting ${analyses.CodeQuality.name} results for ${language}`, + ); const qualityCategory = fixCodeQualityCategory( logger, automationDetailsId, ); const qualitySarifFile = path.join( sarifFolder, - `${language}.quality.sarif`, + addSarifExtension(analyses.CodeQuality, language), ); qualityAnalysisSummary = await runInterpretResults( language, diff --git a/src/config-utils.ts b/src/config-utils.ts index d751149db..0fcc87bd6 100644 --- a/src/config-utils.ts +++ b/src/config-utils.ts @@ -6,7 +6,13 @@ import * as yaml from "js-yaml"; import * as semver from "semver"; import { isAnalyzingPullRequest } from "./actions-util"; -import { AnalysisKind, parseAnalysisKinds } from "./analyses"; +import { + AnalysisConfig, + AnalysisKind, + CodeQuality, + CodeScanning, + parseAnalysisKinds, +} from "./analyses"; import * as api from "./api-client"; import { CachingKind, getCachingKind } from "./caching-utils"; import { type CodeQL } from "./codeql"; @@ -1522,3 +1528,28 @@ export function isCodeScanningEnabled(config: Config): boolean { export function isCodeQualityEnabled(config: Config): boolean { return config.analysisKinds.includes(AnalysisKind.CodeQuality); } + +/** + * Returns the analysis kind for which the database is initialised. This is + * always `AnalysisKind.CodeScanning` unless `AnalysisKind.CodeScanning` is not enabled. + * + * @returns Returns `AnalysisKind.CodeScanning` if `AnalysisKind.CodeScanning` is enabled; + * otherwise `AnalysisKind.CodeQuality`. + */ +export function getDbAnalysisKind(config: Config): AnalysisKind { + return isCodeScanningEnabled(config) + ? AnalysisKind.CodeScanning + : AnalysisKind.CodeQuality; +} + +/** + * Returns the analysis configuration for which the database is initialised. This is + * always `CodeScanning` unless `CodeScanning` is not enabled. + * + * @returns Returns `CodeScanning` if `AnalysisKind.CodeScanning` is enabled; otherwise `CodeQuality`. + */ +export function getDbAnalysisConfig(config: Config): AnalysisConfig { + return getDbAnalysisKind(config) === AnalysisKind.CodeScanning + ? CodeScanning + : CodeQuality; +}