Override query configuration for Code Quality only analyses

This commit is contained in:
Michael B. Gale
2025-09-01 15:59:51 +01:00
parent 811aef84cb
commit 01fe6a1120
12 changed files with 300 additions and 220 deletions

View File

@@ -10,6 +10,7 @@ import {
AnalysisConfig,
AnalysisKind,
CodeQuality,
codeQualityQueries,
CodeScanning,
parseAnalysisKinds,
} from "./analyses";
@@ -34,6 +35,7 @@ import {
BuildMode,
codeQlVersionAtLeast,
cloneObject,
isDefined,
} from "./util";
// Property names from the user-supplied config file.
@@ -1080,6 +1082,19 @@ function userConfigFromActionPath(tempDir: string): string {
return path.resolve(tempDir, "user-config-from-action.yml");
}
/**
* Checks whether the given `UserConfig` contains any query customisations.
*
* @returns Returns `true` if the `UserConfig` customises which queries are run.
*/
function hasQueryCustomisation(userConfig: UserConfig): boolean {
return (
isDefined(userConfig["disable-default-queries"]) ||
isDefined(userConfig.queries) ||
isDefined(userConfig["query-filters"])
);
}
/**
* Load and return the config.
*
@@ -1116,6 +1131,29 @@ export async function initConfig(inputs: InitConfigInputs): Promise<Config> {
const config = await initActionState(inputs, userConfig);
// If Code Scanning analysis is disabled, then we initialise the database for Code Quality.
// That entails disabling the default queries and only running quality queries.
if (!isCodeScanningEnabled(config)) {
// Warn if any query customisations are present in the computed configuration.
if (hasQueryCustomisation(config.computedConfig)) {
logger.warning(
"Query customizations will be ignored, because only `code-quality` analysis is enabled.",
);
}
const queries = codeQualityQueries.map((v) => ({ uses: v }));
// Set the query customisation options for Code Quality only analysis.
config.originalUserInput["disable-default-queries"] = true;
config.originalUserInput.queries = queries;
config.originalUserInput["query-filters"] = [];
// Update the computed configuration for the call to `getOverlayDatabaseMode`.
config.computedConfig["disable-default-queries"] = true;
config.computedConfig.queries = queries;
config.computedConfig["query-filters"] = [];
}
// The choice of overlay database mode depends on the selection of languages
// and queries, which in turn depends on the user config and the augmentation
// properties. So we need to calculate the overlay database mode after the