Add and use helpers for determining analysis config the DB is initialised with

This commit is contained in:
Michael B. Gale
2025-09-01 14:10:25 +01:00
parent 04bb07498c
commit 8ea50b8f82
3 changed files with 76 additions and 11 deletions

View File

@@ -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,

View File

@@ -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;
}