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 50b1a4a0cc
commit 559940386d
3 changed files with 76 additions and 11 deletions

25
lib/analyze-action.js generated
View File

@@ -94205,6 +94205,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 fs9 = __toESM(require("fs"));
@@ -96161,6 +96167,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];
@@ -96180,9 +96189,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) ? path12.join(sarifFolder, `${language}.sarif`) : path12.join(sarifFolder, `${language}.quality.sarif`);
const sarifFile = path12.join(
sarifFolder,
addSarifExtension(dbAnalysisConfig, language)
);
const queries = [];
if (isCodeQualityEnabled(config) && isCodeScanningEnabled(config)) {
queries.push(getGeneratedSuitePath(config, language));
@@ -96199,7 +96212,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);
@@ -96214,14 +96229,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 = path12.join(
sarifFolder,
`${language}.quality.sarif`
addSarifExtension(CodeQuality, language)
);
qualityAnalysisSummary = await runInterpretResults(
language,

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,
@@ -658,13 +668,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.
@@ -709,7 +722,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.
@@ -736,14 +751,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";
@@ -1488,3 +1494,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;
}