From d08e9a2e041f33e595e36c918f135cfb43c94acf Mon Sep 17 00:00:00 2001 From: "Michael B. Gale" Date: Thu, 4 Sep 2025 12:14:12 +0100 Subject: [PATCH] Make conditions for `interpret-results` more robust --- lib/analyze-action.js | 37 +++++++++++++--------------- src/analyze.ts | 56 ++++++++++++++++++------------------------- 2 files changed, 39 insertions(+), 54 deletions(-) diff --git a/lib/analyze-action.js b/lib/analyze-action.js index 65a522dfe..4d54f824d 100644 --- a/lib/analyze-action.js +++ b/lib/analyze-action.js @@ -93629,26 +93629,23 @@ async function runQueries(sarifFolder, memoryFlag, addSnippetsFlag, threadsFlag, await codeql.databaseRunQueries(databasePath, queryFlags, queries); logger.debug(`Finished running queries for ${language}.`); statusReport[`analyze_builtin_queries_${language}_duration_ms`] = (/* @__PURE__ */ new Date()).getTime() - startTimeRunQueries; - const startTimeInterpretResults = /* @__PURE__ */ new Date(); - let analysisSummary; - if (isCodeScanningEnabled(config) || isCodeQualityEnabled(config)) { - logger.startGroup( - `Interpreting ${dbAnalysisConfig.name} results for ${language}` - ); - let category = automationDetailsId; - if (isCodeQualityEnabled(config)) { - category = fixCodeQualityCategory(logger, automationDetailsId); - } - analysisSummary = await runInterpretResults( - language, - void 0, - sarifFile, - config.debugMode, - category - ); + logger.startGroup( + `Interpreting ${dbAnalysisConfig.name} results for ${language}` + ); + let category = automationDetailsId; + if (dbAnalysisConfig.kind === "code-quality" /* CodeQuality */) { + category = fixCodeQualityCategory(logger, automationDetailsId); } + const startTimeInterpretResults = /* @__PURE__ */ new Date(); + const analysisSummary = await runInterpretResults( + language, + void 0, + sarifFile, + config.debugMode, + category + ); let qualityAnalysisSummary; - if (isCodeQualityEnabled(config) && isCodeScanningEnabled(config)) { + if (config.analysisKinds.length > 1 && isCodeQualityEnabled(config)) { logger.info( `Interpreting ${CodeQuality.name} results for ${language}` ); @@ -93673,9 +93670,7 @@ async function runQueries(sarifFolder, memoryFlag, addSnippetsFlag, threadsFlag, const endTimeInterpretResults = /* @__PURE__ */ new Date(); statusReport[`interpret_results_${language}_duration_ms`] = endTimeInterpretResults.getTime() - startTimeInterpretResults.getTime(); logger.endGroup(); - if (analysisSummary) { - logger.info(analysisSummary); - } + logger.info(analysisSummary); if (qualityAnalysisSummary) { logger.info(qualityAnalysisSummary); } diff --git a/src/analyze.ts b/src/analyze.ts index 31c809e72..e7a7cab8a 100644 --- a/src/analyze.ts +++ b/src/analyze.ts @@ -703,44 +703,36 @@ export async function runQueries( statusReport[`analyze_builtin_queries_${language}_duration_ms`] = new Date().getTime() - startTimeRunQueries; - const startTimeInterpretResults = new Date(); + // There is always at least one analysis kind enabled. Running `interpret-results` + // produces the SARIF file for the analysis kind that the database was initialised with. + logger.startGroup( + `Interpreting ${dbAnalysisConfig.name} results for ${language}`, + ); - // If only one analysis kind is enabled, then the database is initialised for the - // respective set of queries. Therefore, running `interpret-results` produces the - // SARIF file we want for the one enabled analysis kind. - let analysisSummary: string | undefined; - if ( - configUtils.isCodeScanningEnabled(config) || - configUtils.isCodeQualityEnabled(config) - ) { - 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. - let category = automationDetailsId; - if (configUtils.isCodeQualityEnabled(config)) { - category = fixCodeQualityCategory(logger, automationDetailsId); - } - - analysisSummary = await runInterpretResults( - language, - undefined, - sarifFile, - config.debugMode, - category, - ); + // If this is a Code Quality analysis, correct the category to one + // accepted by the Code Quality backend. + let category = automationDetailsId; + if (dbAnalysisConfig.kind === analyses.AnalysisKind.CodeQuality) { + category = fixCodeQualityCategory(logger, automationDetailsId); } - // This case is only needed if Code Quality is enabled in addition to Code Scanning. + const startTimeInterpretResults = new Date(); + const analysisSummary = await runInterpretResults( + language, + undefined, + sarifFile, + config.debugMode, + category, + ); + + // This case is only needed if Code Quality is not the sole analysis kind. // In this case, we will have run queries for both analysis kinds. The previous call to // `interpret-results` will have produced a SARIF file for Code Scanning and we now // need to produce an additional SARIF file for Code Quality. let qualityAnalysisSummary: string | undefined; if ( - configUtils.isCodeQualityEnabled(config) && - configUtils.isCodeScanningEnabled(config) + config.analysisKinds.length > 1 && + configUtils.isCodeQualityEnabled(config) ) { logger.info( `Interpreting ${analyses.CodeQuality.name} results for ${language}`, @@ -768,9 +760,7 @@ export async function runQueries( endTimeInterpretResults.getTime() - startTimeInterpretResults.getTime(); logger.endGroup(); - if (analysisSummary) { - logger.info(analysisSummary); - } + logger.info(analysisSummary); if (qualityAnalysisSummary) { logger.info(qualityAnalysisSummary); }