diff --git a/lib/init-action.js b/lib/init-action.js index 507a76cc0..ad82159e7 100644 --- a/lib/init-action.js +++ b/lib/init-action.js @@ -106228,7 +106228,7 @@ async function runnerSupportsOverlayAnalysis(diskUsage, ramInput, logger, useV2R } return true; } -async function getOverlayDatabaseMode(codeql, features, languages, sourceRoot, buildMode, ramInput, codeScanningConfig, gitVersion, logger) { +async function getOverlayDatabaseMode(codeql, features, languages, sourceRoot, buildMode, ramInput, codeScanningConfig, repositoryProperties, gitVersion, logger) { let overlayDatabaseMode = "none" /* None */; let useOverlayDatabaseCaching = false; let skippedDueToCachedStatus = false; @@ -106238,6 +106238,11 @@ async function getOverlayDatabaseMode(codeql, features, languages, sourceRoot, b logger.info( `Setting overlay database mode to ${overlayDatabaseMode} from the CODEQL_OVERLAY_DATABASE_MODE environment variable.` ); + } else if (repositoryProperties["github-codeql-disable-overlay" /* DISABLE_OVERLAY */] === true) { + logger.info( + `Setting overlay database mode to ${"none" /* None */} because the ${"github-codeql-disable-overlay" /* DISABLE_OVERLAY */} repository property is set to true.` + ); + overlayDatabaseMode = "none" /* None */; } else if (await isOverlayAnalysisFeatureEnabled( features, codeql, @@ -106437,6 +106442,7 @@ async function initConfig(features, inputs) { config.buildMode, inputs.ramInput, config.computedConfig, + config.repositoryProperties, gitVersion, logger ); diff --git a/src/config-utils.test.ts b/src/config-utils.test.ts index f8c96b1cd..9e0064fe3 100644 --- a/src/config-utils.test.ts +++ b/src/config-utils.test.ts @@ -14,6 +14,7 @@ import { createStubCodeQL } from "./codeql"; import * as configUtils from "./config-utils"; import * as errorMessages from "./error-messages"; import { Feature } from "./feature-flags"; +import { RepositoryProperties } from "./feature-flags/properties"; import * as gitUtils from "./git-utils"; import { GitVersionInfo } from "./git-utils"; import { KnownLanguage, Language } from "./languages"; @@ -983,6 +984,7 @@ interface OverlayDatabaseModeTestSetup { diskUsage: DiskUsage | undefined; memoryFlagValue: number; shouldSkipOverlayAnalysisDueToCachedStatus: boolean; + repositoryProperties: RepositoryProperties; } const defaultOverlayDatabaseModeTestSetup: OverlayDatabaseModeTestSetup = { @@ -1005,6 +1007,7 @@ const defaultOverlayDatabaseModeTestSetup: OverlayDatabaseModeTestSetup = { }, memoryFlagValue: 6920, shouldSkipOverlayAnalysisDueToCachedStatus: false, + repositoryProperties: {}, }; const getOverlayDatabaseModeMacro = test.macro({ @@ -1082,6 +1085,7 @@ const getOverlayDatabaseModeMacro = test.macro({ setup.buildMode, undefined, setup.codeScanningConfig, + setup.repositoryProperties, setup.gitVersion, logger, ); @@ -1920,6 +1924,55 @@ test( }, ); +test( + getOverlayDatabaseModeMacro, + "No overlay when disabled via repository property", + { + languages: [KnownLanguage.javascript], + features: [Feature.OverlayAnalysis, Feature.OverlayAnalysisJavascript], + isPullRequest: true, + repositoryProperties: { + "github-codeql-disable-overlay": true, + }, + }, + { + overlayDatabaseMode: OverlayDatabaseMode.None, + useOverlayDatabaseCaching: false, + }, +); + +test( + getOverlayDatabaseModeMacro, + "Overlay not disabled when repository property is false", + { + languages: [KnownLanguage.javascript], + features: [Feature.OverlayAnalysis, Feature.OverlayAnalysisJavascript], + isPullRequest: true, + repositoryProperties: { + "github-codeql-disable-overlay": false, + }, + }, + { + overlayDatabaseMode: OverlayDatabaseMode.Overlay, + useOverlayDatabaseCaching: true, + }, +); + +test( + getOverlayDatabaseModeMacro, + "Environment variable override takes precedence over repository property", + { + overlayDatabaseEnvVar: "overlay", + repositoryProperties: { + "github-codeql-disable-overlay": true, + }, + }, + { + overlayDatabaseMode: OverlayDatabaseMode.Overlay, + useOverlayDatabaseCaching: false, + }, +); + // Exercise language-specific overlay analysis features code paths for (const language in KnownLanguage) { test( diff --git a/src/config-utils.ts b/src/config-utils.ts index 8c54d4e04..7f2b86a15 100644 --- a/src/config-utils.ts +++ b/src/config-utils.ts @@ -35,7 +35,10 @@ import { DocUrl } from "./doc-url"; import { EnvVar } from "./environment"; 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 { getGeneratedFiles, getGitRoot, @@ -750,6 +753,7 @@ export async function getOverlayDatabaseMode( buildMode: BuildMode | undefined, ramInput: string | undefined, codeScanningConfig: UserConfig, + repositoryProperties: RepositoryProperties, gitVersion: GitVersionInfo | undefined, logger: Logger, ): Promise<{ @@ -774,6 +778,14 @@ export async function getOverlayDatabaseMode( `Setting overlay database mode to ${overlayDatabaseMode} ` + "from the CODEQL_OVERLAY_DATABASE_MODE environment variable.", ); + } else if ( + repositoryProperties[RepositoryPropertyName.DISABLE_OVERLAY] === true + ) { + logger.info( + `Setting overlay database mode to ${OverlayDatabaseMode.None} ` + + `because the ${RepositoryPropertyName.DISABLE_OVERLAY} repository property is set to true.`, + ); + overlayDatabaseMode = OverlayDatabaseMode.None; } else if ( await isOverlayAnalysisFeatureEnabled( features, @@ -1067,6 +1079,7 @@ export async function initConfig( config.buildMode, inputs.ramInput, config.computedConfig, + config.repositoryProperties, gitVersion, logger, );