From ad10347e7cc196edf08c41905e6ddde975f5fcfa Mon Sep 17 00:00:00 2001 From: Kasper Svendsen Date: Thu, 23 Oct 2025 10:53:49 +0200 Subject: [PATCH] Add support for disabling overlay analysis using custom repo property --- src/config-utils.ts | 76 ++++++++++++++++++--------------- src/feature-flags/properties.ts | 1 + 2 files changed, 43 insertions(+), 34 deletions(-) diff --git a/src/config-utils.ts b/src/config-utils.ts index f523213b1..7b63329e8 100644 --- a/src/config-utils.ts +++ b/src/config-utils.ts @@ -25,7 +25,7 @@ import { import { shouldPerformDiffInformedAnalysis } from "./diff-informed-analysis-utils"; import * as errorMessages from "./error-messages"; import { Feature, FeatureEnablement } from "./feature-flags"; -import { RepositoryProperties } from "./feature-flags/properties"; +import { RepositoryProperties, RepositoryPropertyName } from "./feature-flags/properties"; import { getGitRoot, isAnalyzingDefaultBranch } from "./git-utils"; import { KnownLanguage, Language } from "./languages"; import { Logger } from "./logging"; @@ -656,6 +656,7 @@ export async function getOverlayDatabaseMode( sourceRoot: string, buildMode: BuildMode | undefined, codeScanningConfig: UserConfig, + repositoryProperties: RepositoryProperties, logger: Logger, ): Promise<{ overlayDatabaseMode: OverlayDatabaseMode; @@ -664,42 +665,48 @@ export async function getOverlayDatabaseMode( let overlayDatabaseMode = OverlayDatabaseMode.None; let useOverlayDatabaseCaching = false; - const modeEnv = process.env.CODEQL_OVERLAY_DATABASE_MODE; - // Any unrecognized CODEQL_OVERLAY_DATABASE_MODE value will be ignored and - // treated as if the environment variable was not set. - if ( - modeEnv === OverlayDatabaseMode.Overlay || - modeEnv === OverlayDatabaseMode.OverlayBase || - modeEnv === OverlayDatabaseMode.None - ) { - overlayDatabaseMode = modeEnv; - logger.info( - `Setting overlay database mode to ${overlayDatabaseMode} ` + - "from the CODEQL_OVERLAY_DATABASE_MODE environment variable.", - ); - } else if ( - await isOverlayAnalysisFeatureEnabled( - repository, - features, - codeql, - languages, - codeScanningConfig, - ) - ) { - if (isAnalyzingPullRequest()) { - overlayDatabaseMode = OverlayDatabaseMode.Overlay; - useOverlayDatabaseCaching = true; + const overlayAnalysisDisabled = repositoryProperties[RepositoryPropertyName.DISABLE_OVERLAY_ANALYSIS]; + if (overlayAnalysisDisabled) { + logger.info(`Setting overlay database mode to ${overlayDatabaseMode} ` + + `because overlay analysis is disabled by a custom repository property.`); + } else { + const modeEnv = process.env.CODEQL_OVERLAY_DATABASE_MODE; + // Any unrecognized CODEQL_OVERLAY_DATABASE_MODE value will be ignored and + // treated as if the environment variable was not set. + if ( + modeEnv === OverlayDatabaseMode.Overlay || + modeEnv === OverlayDatabaseMode.OverlayBase || + modeEnv === OverlayDatabaseMode.None + ) { + overlayDatabaseMode = modeEnv; logger.info( `Setting overlay database mode to ${overlayDatabaseMode} ` + - "with caching because we are analyzing a pull request.", - ); - } else if (await isAnalyzingDefaultBranch()) { - overlayDatabaseMode = OverlayDatabaseMode.OverlayBase; - useOverlayDatabaseCaching = true; - logger.info( - `Setting overlay database mode to ${overlayDatabaseMode} ` + - "with caching because we are analyzing the default branch.", + "from the CODEQL_OVERLAY_DATABASE_MODE environment variable.", ); + } else if ( + await isOverlayAnalysisFeatureEnabled( + repository, + features, + codeql, + languages, + codeScanningConfig, + ) + ) { + if (isAnalyzingPullRequest()) { + overlayDatabaseMode = OverlayDatabaseMode.Overlay; + useOverlayDatabaseCaching = true; + logger.info( + `Setting overlay database mode to ${overlayDatabaseMode} ` + + "with caching because we are analyzing a pull request.", + ); + } else if (await isAnalyzingDefaultBranch()) { + overlayDatabaseMode = OverlayDatabaseMode.OverlayBase; + useOverlayDatabaseCaching = true; + logger.info( + `Setting overlay database mode to ${overlayDatabaseMode} ` + + "with caching because we are analyzing the default branch.", + ); + } } } @@ -855,6 +862,7 @@ export async function initConfig( inputs.sourceRoot, config.buildMode, config.computedConfig, + inputs.repositoryProperties, logger, ); logger.info( diff --git a/src/feature-flags/properties.ts b/src/feature-flags/properties.ts index 0104cddd9..bdd4d0675 100644 --- a/src/feature-flags/properties.ts +++ b/src/feature-flags/properties.ts @@ -8,6 +8,7 @@ import { GitHubVariant, GitHubVersion } from "../util"; */ export enum RepositoryPropertyName { EXTRA_QUERIES = "github-codeql-extra-queries", + DISABLE_OVERLAY_ANALYSIS = "github-codeql-disable-overlay-analysis", } /**