diff --git a/lib/analyze-action-post.js b/lib/analyze-action-post.js index 3ce175850a..db43461e51 100644 --- a/lib/analyze-action-post.js +++ b/lib/analyze-action-post.js @@ -161687,6 +161687,11 @@ var featureConfig = { envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_PYTHON", minimumVersion: void 0 }, + ["overlay_analysis_resource_checks_v2" /* OverlayAnalysisResourceChecksV2 */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_RESOURCE_CHECKS_V2", + minimumVersion: void 0 + }, ["overlay_analysis_ruby" /* OverlayAnalysisRuby */]: { defaultValue: false, envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_RUBY", @@ -161760,6 +161765,8 @@ var actionsCache3 = __toESM(require_cache5()); // src/config-utils.ts var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_MB = 2e4; var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_BYTES = OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_MB * 1e6; +var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_MB = 14e3; +var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_BYTES = OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_MB * 1e6; var OVERLAY_MINIMUM_MEMORY_MB = 5 * 1024; var OVERLAY_ANALYSIS_FEATURES = { actions: "overlay_analysis_actions" /* OverlayAnalysisActions */, diff --git a/lib/analyze-action.js b/lib/analyze-action.js index 3006d65f33..19f5ff7094 100644 --- a/lib/analyze-action.js +++ b/lib/analyze-action.js @@ -107803,6 +107803,11 @@ var featureConfig = { envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_PYTHON", minimumVersion: void 0 }, + ["overlay_analysis_resource_checks_v2" /* OverlayAnalysisResourceChecksV2 */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_RESOURCE_CHECKS_V2", + minimumVersion: void 0 + }, ["overlay_analysis_ruby" /* OverlayAnalysisRuby */]: { defaultValue: false, envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_RUBY", @@ -108432,6 +108437,8 @@ async function cachePrefix(codeql, language) { // src/config-utils.ts var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_MB = 2e4; var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_BYTES = OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_MB * 1e6; +var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_MB = 14e3; +var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_BYTES = OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_MB * 1e6; var OVERLAY_MINIMUM_MEMORY_MB = 5 * 1024; var OVERLAY_ANALYSIS_FEATURES = { actions: "overlay_analysis_actions" /* OverlayAnalysisActions */, diff --git a/lib/autobuild-action.js b/lib/autobuild-action.js index 393400ab29..560cfef562 100644 --- a/lib/autobuild-action.js +++ b/lib/autobuild-action.js @@ -104092,6 +104092,11 @@ var featureConfig = { envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_PYTHON", minimumVersion: void 0 }, + ["overlay_analysis_resource_checks_v2" /* OverlayAnalysisResourceChecksV2 */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_RESOURCE_CHECKS_V2", + minimumVersion: void 0 + }, ["overlay_analysis_ruby" /* OverlayAnalysisRuby */]: { defaultValue: false, envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_RUBY", @@ -104448,6 +104453,8 @@ var actionsCache3 = __toESM(require_cache5()); // src/config-utils.ts var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_MB = 2e4; var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_BYTES = OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_MB * 1e6; +var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_MB = 14e3; +var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_BYTES = OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_MB * 1e6; var OVERLAY_MINIMUM_MEMORY_MB = 5 * 1024; var OVERLAY_ANALYSIS_FEATURES = { actions: "overlay_analysis_actions" /* OverlayAnalysisActions */, diff --git a/lib/init-action-post.js b/lib/init-action-post.js index 93b490af25..46e58c619a 100644 --- a/lib/init-action-post.js +++ b/lib/init-action-post.js @@ -165188,6 +165188,11 @@ var featureConfig = { envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_PYTHON", minimumVersion: void 0 }, + ["overlay_analysis_resource_checks_v2" /* OverlayAnalysisResourceChecksV2 */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_RESOURCE_CHECKS_V2", + minimumVersion: void 0 + }, ["overlay_analysis_ruby" /* OverlayAnalysisRuby */]: { defaultValue: false, envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_RUBY", @@ -165603,6 +165608,8 @@ var actionsCache3 = __toESM(require_cache5()); // src/config-utils.ts var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_MB = 2e4; var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_BYTES = OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_MB * 1e6; +var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_MB = 14e3; +var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_BYTES = OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_MB * 1e6; var OVERLAY_MINIMUM_MEMORY_MB = 5 * 1024; var OVERLAY_ANALYSIS_FEATURES = { actions: "overlay_analysis_actions" /* OverlayAnalysisActions */, diff --git a/lib/init-action.js b/lib/init-action.js index 2515584428..27daa414ab 100644 --- a/lib/init-action.js +++ b/lib/init-action.js @@ -105319,6 +105319,11 @@ var featureConfig = { envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_PYTHON", minimumVersion: void 0 }, + ["overlay_analysis_resource_checks_v2" /* OverlayAnalysisResourceChecksV2 */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_RESOURCE_CHECKS_V2", + minimumVersion: void 0 + }, ["overlay_analysis_ruby" /* OverlayAnalysisRuby */]: { defaultValue: false, envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_RUBY", @@ -105887,6 +105892,8 @@ async function cachePrefix(codeql, language) { // src/config-utils.ts var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_MB = 2e4; var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_BYTES = OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_MB * 1e6; +var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_MB = 14e3; +var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_BYTES = OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_MB * 1e6; var OVERLAY_MINIMUM_MEMORY_MB = 5 * 1024; async function getSupportedLanguageMap(codeql, logger) { const resolveSupportedLanguagesUsingCli = await codeql.supportsFeature( @@ -106147,18 +106154,20 @@ async function isOverlayAnalysisFeatureEnabled(features, codeql, languages, code } return true; } -async function runnerSupportsOverlayAnalysis(diskUsage, ramInput, logger) { - if (diskUsage === void 0 || diskUsage.numAvailableBytes < OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_BYTES) { +async function runnerSupportsOverlayAnalysis(diskUsage, ramInput, logger, useV2ResourceChecks) { + const minimumDiskSpaceBytes = useV2ResourceChecks ? OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_BYTES : OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_BYTES; + if (diskUsage === void 0 || diskUsage.numAvailableBytes < minimumDiskSpaceBytes) { const diskSpaceMb = diskUsage === void 0 ? 0 : Math.round(diskUsage.numAvailableBytes / 1e6); + const minimumDiskSpaceMb = Math.round(minimumDiskSpaceBytes / 1e6); logger.info( - `Setting overlay database mode to ${"none" /* None */} due to insufficient disk space (${diskSpaceMb} MB).` + `Setting overlay database mode to ${"none" /* None */} due to insufficient disk space (${diskSpaceMb} MB, needed ${minimumDiskSpaceMb} MB).` ); return false; } const memoryFlagValue = getCodeQLMemoryLimit(ramInput, logger); if (memoryFlagValue < OVERLAY_MINIMUM_MEMORY_MB) { logger.info( - `Setting overlay database mode to ${"none" /* None */} due to insufficient memory for CodeQL analysis (${memoryFlagValue} MB).` + `Setting overlay database mode to ${"none" /* None */} due to insufficient memory for CodeQL analysis (${memoryFlagValue} MB, needed ${OVERLAY_MINIMUM_MEMORY_MB} MB).` ); return false; } @@ -106184,11 +106193,19 @@ async function getOverlayDatabaseMode(codeql, features, languages, sourceRoot, b "overlay_analysis_skip_resource_checks" /* OverlayAnalysisSkipResourceChecks */, codeql ); + const useV2ResourceChecks = await features.getValue( + "overlay_analysis_resource_checks_v2" /* OverlayAnalysisResourceChecksV2 */ + ); const checkOverlayStatus = await features.getValue( "overlay_analysis_status_check" /* OverlayAnalysisStatusCheck */ ); const diskUsage = performResourceChecks || checkOverlayStatus ? await checkDiskUsage(logger) : void 0; - if (performResourceChecks && !await runnerSupportsOverlayAnalysis(diskUsage, ramInput, logger)) { + if (performResourceChecks && !await runnerSupportsOverlayAnalysis( + diskUsage, + ramInput, + logger, + useV2ResourceChecks + )) { overlayDatabaseMode = "none" /* None */; } else if (checkOverlayStatus && diskUsage === void 0) { logger.warning( diff --git a/lib/resolve-environment-action.js b/lib/resolve-environment-action.js index cd3b07adb6..bc86b65ca1 100644 --- a/lib/resolve-environment-action.js +++ b/lib/resolve-environment-action.js @@ -104079,6 +104079,11 @@ var featureConfig = { envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_PYTHON", minimumVersion: void 0 }, + ["overlay_analysis_resource_checks_v2" /* OverlayAnalysisResourceChecksV2 */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_RESOURCE_CHECKS_V2", + minimumVersion: void 0 + }, ["overlay_analysis_ruby" /* OverlayAnalysisRuby */]: { defaultValue: false, envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_RUBY", @@ -104152,6 +104157,8 @@ var actionsCache3 = __toESM(require_cache5()); // src/config-utils.ts var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_MB = 2e4; var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_BYTES = OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_MB * 1e6; +var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_MB = 14e3; +var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_BYTES = OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_MB * 1e6; var OVERLAY_MINIMUM_MEMORY_MB = 5 * 1024; var OVERLAY_ANALYSIS_FEATURES = { actions: "overlay_analysis_actions" /* OverlayAnalysisActions */, diff --git a/lib/setup-codeql-action.js b/lib/setup-codeql-action.js index 1473aa333b..a0a5c605bd 100644 --- a/lib/setup-codeql-action.js +++ b/lib/setup-codeql-action.js @@ -103992,6 +103992,11 @@ var featureConfig = { envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_PYTHON", minimumVersion: void 0 }, + ["overlay_analysis_resource_checks_v2" /* OverlayAnalysisResourceChecksV2 */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_RESOURCE_CHECKS_V2", + minimumVersion: void 0 + }, ["overlay_analysis_ruby" /* OverlayAnalysisRuby */]: { defaultValue: false, envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_RUBY", @@ -104678,6 +104683,8 @@ var actionsCache3 = __toESM(require_cache5()); // src/config-utils.ts var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_MB = 2e4; var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_BYTES = OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_MB * 1e6; +var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_MB = 14e3; +var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_BYTES = OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_MB * 1e6; var OVERLAY_MINIMUM_MEMORY_MB = 5 * 1024; var OVERLAY_ANALYSIS_FEATURES = { actions: "overlay_analysis_actions" /* OverlayAnalysisActions */, diff --git a/lib/start-proxy-action-post.js b/lib/start-proxy-action-post.js index d65ac77e8e..2021ae5902 100644 --- a/lib/start-proxy-action-post.js +++ b/lib/start-proxy-action-post.js @@ -161093,6 +161093,11 @@ var featureConfig = { envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_PYTHON", minimumVersion: void 0 }, + ["overlay_analysis_resource_checks_v2" /* OverlayAnalysisResourceChecksV2 */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_RESOURCE_CHECKS_V2", + minimumVersion: void 0 + }, ["overlay_analysis_ruby" /* OverlayAnalysisRuby */]: { defaultValue: false, envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_RUBY", @@ -161166,6 +161171,8 @@ var actionsCache3 = __toESM(require_cache5()); // src/config-utils.ts var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_MB = 2e4; var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_BYTES = OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_MB * 1e6; +var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_MB = 14e3; +var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_BYTES = OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_MB * 1e6; var OVERLAY_MINIMUM_MEMORY_MB = 5 * 1024; var OVERLAY_ANALYSIS_FEATURES = { actions: "overlay_analysis_actions" /* OverlayAnalysisActions */, diff --git a/lib/start-proxy-action.js b/lib/start-proxy-action.js index 14efc1387e..db3fb00f2d 100644 --- a/lib/start-proxy-action.js +++ b/lib/start-proxy-action.js @@ -120784,6 +120784,11 @@ var featureConfig = { envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_PYTHON", minimumVersion: void 0 }, + ["overlay_analysis_resource_checks_v2" /* OverlayAnalysisResourceChecksV2 */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_RESOURCE_CHECKS_V2", + minimumVersion: void 0 + }, ["overlay_analysis_ruby" /* OverlayAnalysisRuby */]: { defaultValue: false, envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_RUBY", @@ -121226,6 +121231,8 @@ var actionsCache3 = __toESM(require_cache5()); // src/config-utils.ts var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_MB = 2e4; var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_BYTES = OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_MB * 1e6; +var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_MB = 14e3; +var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_BYTES = OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_MB * 1e6; var OVERLAY_MINIMUM_MEMORY_MB = 5 * 1024; var OVERLAY_ANALYSIS_FEATURES = { actions: "overlay_analysis_actions" /* OverlayAnalysisActions */, diff --git a/lib/upload-lib.js b/lib/upload-lib.js index fd0cb5ea19..c87b7ff6f9 100644 --- a/lib/upload-lib.js +++ b/lib/upload-lib.js @@ -107251,6 +107251,11 @@ var featureConfig = { envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_PYTHON", minimumVersion: void 0 }, + ["overlay_analysis_resource_checks_v2" /* OverlayAnalysisResourceChecksV2 */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_RESOURCE_CHECKS_V2", + minimumVersion: void 0 + }, ["overlay_analysis_ruby" /* OverlayAnalysisRuby */]: { defaultValue: false, envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_RUBY", @@ -107342,6 +107347,8 @@ var actionsCache3 = __toESM(require_cache5()); // src/config-utils.ts var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_MB = 2e4; var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_BYTES = OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_MB * 1e6; +var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_MB = 14e3; +var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_BYTES = OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_MB * 1e6; var OVERLAY_MINIMUM_MEMORY_MB = 5 * 1024; var OVERLAY_ANALYSIS_FEATURES = { actions: "overlay_analysis_actions" /* OverlayAnalysisActions */, diff --git a/lib/upload-sarif-action-post.js b/lib/upload-sarif-action-post.js index ac0483c021..6276268b42 100644 --- a/lib/upload-sarif-action-post.js +++ b/lib/upload-sarif-action-post.js @@ -161255,6 +161255,11 @@ var featureConfig = { envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_PYTHON", minimumVersion: void 0 }, + ["overlay_analysis_resource_checks_v2" /* OverlayAnalysisResourceChecksV2 */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_RESOURCE_CHECKS_V2", + minimumVersion: void 0 + }, ["overlay_analysis_ruby" /* OverlayAnalysisRuby */]: { defaultValue: false, envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_RUBY", @@ -161328,6 +161333,8 @@ var actionsCache3 = __toESM(require_cache6()); // src/config-utils.ts var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_MB = 2e4; var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_BYTES = OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_MB * 1e6; +var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_MB = 14e3; +var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_BYTES = OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_MB * 1e6; var OVERLAY_MINIMUM_MEMORY_MB = 5 * 1024; var OVERLAY_ANALYSIS_FEATURES = { actions: "overlay_analysis_actions" /* OverlayAnalysisActions */, diff --git a/lib/upload-sarif-action.js b/lib/upload-sarif-action.js index 6d2749c5cb..0f868d31b4 100644 --- a/lib/upload-sarif-action.js +++ b/lib/upload-sarif-action.js @@ -106976,6 +106976,11 @@ var featureConfig = { envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_PYTHON", minimumVersion: void 0 }, + ["overlay_analysis_resource_checks_v2" /* OverlayAnalysisResourceChecksV2 */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_RESOURCE_CHECKS_V2", + minimumVersion: void 0 + }, ["overlay_analysis_ruby" /* OverlayAnalysisRuby */]: { defaultValue: false, envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_RUBY", @@ -107429,6 +107434,8 @@ var actionsCache3 = __toESM(require_cache5()); // src/config-utils.ts var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_MB = 2e4; var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_BYTES = OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_MB * 1e6; +var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_MB = 14e3; +var OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_BYTES = OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_MB * 1e6; var OVERLAY_MINIMUM_MEMORY_MB = 5 * 1024; var OVERLAY_ANALYSIS_FEATURES = { actions: "overlay_analysis_actions" /* OverlayAnalysisActions */, diff --git a/src/config-utils.test.ts b/src/config-utils.test.ts index 6679ca4127..f8c96b1cdd 100644 --- a/src/config-utils.test.ts +++ b/src/config-utils.test.ts @@ -1269,6 +1269,71 @@ test( }, ); +test( + getOverlayDatabaseModeMacro, + "No overlay-base database on default branch if runner disk space is below v2 limit and v2 resource checks enabled", + { + languages: [KnownLanguage.javascript], + features: [ + Feature.OverlayAnalysis, + Feature.OverlayAnalysisCodeScanningJavascript, + Feature.OverlayAnalysisResourceChecksV2, + ], + isDefaultBranch: true, + diskUsage: { + numAvailableBytes: 5_000_000_000, + numTotalBytes: 100_000_000_000, + }, + }, + { + overlayDatabaseMode: OverlayDatabaseMode.None, + useOverlayDatabaseCaching: false, + }, +); + +test( + getOverlayDatabaseModeMacro, + "Overlay-base database on default branch if runner disk space is between v2 and v1 limits and v2 resource checks enabled", + { + languages: [KnownLanguage.javascript], + features: [ + Feature.OverlayAnalysis, + Feature.OverlayAnalysisCodeScanningJavascript, + Feature.OverlayAnalysisResourceChecksV2, + ], + isDefaultBranch: true, + diskUsage: { + numAvailableBytes: 15_000_000_000, + numTotalBytes: 100_000_000_000, + }, + }, + { + overlayDatabaseMode: OverlayDatabaseMode.OverlayBase, + useOverlayDatabaseCaching: true, + }, +); + +test( + getOverlayDatabaseModeMacro, + "No overlay-base database on default branch if runner disk space is between v2 and v1 limits and v2 resource checks not enabled", + { + languages: [KnownLanguage.javascript], + features: [ + Feature.OverlayAnalysis, + Feature.OverlayAnalysisCodeScanningJavascript, + ], + isDefaultBranch: true, + diskUsage: { + numAvailableBytes: 15_000_000_000, + numTotalBytes: 100_000_000_000, + }, + }, + { + overlayDatabaseMode: OverlayDatabaseMode.None, + useOverlayDatabaseCaching: false, + }, +); + test( getOverlayDatabaseModeMacro, "No overlay-base database on default branch if memory flag is too low", diff --git a/src/config-utils.ts b/src/config-utils.ts index 09e2749cc9..d05221248b 100644 --- a/src/config-utils.ts +++ b/src/config-utils.ts @@ -79,6 +79,15 @@ const OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_MB = 20000; const OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_BYTES = OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_MB * 1_000_000; +/** + * The v2 minimum available disk space (in MB) required to perform overlay + * analysis. This is a lower threshold than the v1 limit, allowing overlay + * analysis to run on runners with less available disk space. + */ +const OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_MB = 14000; +const OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_BYTES = + OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_MB * 1_000_000; + /** * The minimum memory (in MB) that must be available for CodeQL to perform overlay * analysis. If CodeQL will be given less memory than this threshold, then the @@ -679,18 +688,23 @@ async function runnerSupportsOverlayAnalysis( diskUsage: DiskUsage | undefined, ramInput: string | undefined, logger: Logger, + useV2ResourceChecks: boolean, ): Promise { + const minimumDiskSpaceBytes = useV2ResourceChecks + ? OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_V2_BYTES + : OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_BYTES; if ( diskUsage === undefined || - diskUsage.numAvailableBytes < OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_BYTES + diskUsage.numAvailableBytes < minimumDiskSpaceBytes ) { const diskSpaceMb = diskUsage === undefined ? 0 : Math.round(diskUsage.numAvailableBytes / 1_000_000); + const minimumDiskSpaceMb = Math.round(minimumDiskSpaceBytes / 1_000_000); logger.info( `Setting overlay database mode to ${OverlayDatabaseMode.None} ` + - `due to insufficient disk space (${diskSpaceMb} MB).`, + `due to insufficient disk space (${diskSpaceMb} MB, needed ${minimumDiskSpaceMb} MB).`, ); return false; } @@ -699,7 +713,7 @@ async function runnerSupportsOverlayAnalysis( if (memoryFlagValue < OVERLAY_MINIMUM_MEMORY_MB) { logger.info( `Setting overlay database mode to ${OverlayDatabaseMode.None} ` + - `due to insufficient memory for CodeQL analysis (${memoryFlagValue} MB).`, + `due to insufficient memory for CodeQL analysis (${memoryFlagValue} MB, needed ${OVERLAY_MINIMUM_MEMORY_MB} MB).`, ); return false; } @@ -772,6 +786,9 @@ export async function getOverlayDatabaseMode( Feature.OverlayAnalysisSkipResourceChecks, codeql, )); + const useV2ResourceChecks = await features.getValue( + Feature.OverlayAnalysisResourceChecksV2, + ); const checkOverlayStatus = await features.getValue( Feature.OverlayAnalysisStatusCheck, ); @@ -781,7 +798,12 @@ export async function getOverlayDatabaseMode( : undefined; if ( performResourceChecks && - !(await runnerSupportsOverlayAnalysis(diskUsage, ramInput, logger)) + !(await runnerSupportsOverlayAnalysis( + diskUsage, + ramInput, + logger, + useV2ResourceChecks, + )) ) { overlayDatabaseMode = OverlayDatabaseMode.None; } else if (checkOverlayStatus && diskUsage === undefined) { diff --git a/src/feature-flags.ts b/src/feature-flags.ts index 714e6e9b4a..9fd22b8d3a 100644 --- a/src/feature-flags.ts +++ b/src/feature-flags.ts @@ -70,6 +70,7 @@ export enum Feature { OverlayAnalysisJava = "overlay_analysis_java", OverlayAnalysisJavascript = "overlay_analysis_javascript", OverlayAnalysisPython = "overlay_analysis_python", + OverlayAnalysisResourceChecksV2 = "overlay_analysis_resource_checks_v2", OverlayAnalysisRuby = "overlay_analysis_ruby", OverlayAnalysisRust = "overlay_analysis_rust", OverlayAnalysisSkipResourceChecks = "overlay_analysis_skip_resource_checks", @@ -288,6 +289,11 @@ export const featureConfig = { envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_PYTHON", minimumVersion: undefined, }, + [Feature.OverlayAnalysisResourceChecksV2]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_RESOURCE_CHECKS_V2", + minimumVersion: undefined, + }, [Feature.OverlayAnalysisRuby]: { defaultValue: false, envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_RUBY",