diff --git a/lib/analyze-action-post.js b/lib/analyze-action-post.js index 66c01e2a4f..b2805a67e4 100644 --- a/lib/analyze-action-post.js +++ b/lib/analyze-action-post.js @@ -120186,6 +120186,11 @@ var featureConfig = { envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_SWIFT", minimumVersion: void 0 }, + ["overlay_analysis_skip_resource_checks" /* OverlayAnalysisSkipResourceChecks */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_SKIP_RESOURCE_CHECKS", + minimumVersion: void 0 + }, ["python_default_is_to_not_extract_stdlib" /* PythonDefaultIsToNotExtractStdlib */]: { defaultValue: false, envVar: "CODEQL_ACTION_DISABLE_PYTHON_STANDARD_LIBRARY_EXTRACTION", diff --git a/lib/analyze-action.js b/lib/analyze-action.js index 431c37513d..754af3b143 100644 --- a/lib/analyze-action.js +++ b/lib/analyze-action.js @@ -88807,6 +88807,11 @@ var featureConfig = { envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_SWIFT", minimumVersion: void 0 }, + ["overlay_analysis_skip_resource_checks" /* OverlayAnalysisSkipResourceChecks */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_SKIP_RESOURCE_CHECKS", + minimumVersion: void 0 + }, ["python_default_is_to_not_extract_stdlib" /* PythonDefaultIsToNotExtractStdlib */]: { defaultValue: false, envVar: "CODEQL_ACTION_DISABLE_PYTHON_STANDARD_LIBRARY_EXTRACTION", diff --git a/lib/autobuild-action.js b/lib/autobuild-action.js index ede7a9a6d4..2bfd694d00 100644 --- a/lib/autobuild-action.js +++ b/lib/autobuild-action.js @@ -84126,6 +84126,11 @@ var featureConfig = { envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_SWIFT", minimumVersion: void 0 }, + ["overlay_analysis_skip_resource_checks" /* OverlayAnalysisSkipResourceChecks */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_SKIP_RESOURCE_CHECKS", + minimumVersion: void 0 + }, ["python_default_is_to_not_extract_stdlib" /* PythonDefaultIsToNotExtractStdlib */]: { defaultValue: false, envVar: "CODEQL_ACTION_DISABLE_PYTHON_STANDARD_LIBRARY_EXTRACTION", diff --git a/lib/init-action-post.js b/lib/init-action-post.js index 5852bbba4c..c1df2926ad 100644 --- a/lib/init-action-post.js +++ b/lib/init-action-post.js @@ -123567,6 +123567,11 @@ var featureConfig = { envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_SWIFT", minimumVersion: void 0 }, + ["overlay_analysis_skip_resource_checks" /* OverlayAnalysisSkipResourceChecks */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_SKIP_RESOURCE_CHECKS", + minimumVersion: void 0 + }, ["python_default_is_to_not_extract_stdlib" /* PythonDefaultIsToNotExtractStdlib */]: { defaultValue: false, envVar: "CODEQL_ACTION_DISABLE_PYTHON_STANDARD_LIBRARY_EXTRACTION", diff --git a/lib/init-action.js b/lib/init-action.js index 7f3496e1f9..3502f6d2f3 100644 --- a/lib/init-action.js +++ b/lib/init-action.js @@ -86221,6 +86221,11 @@ var featureConfig = { envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_SWIFT", minimumVersion: void 0 }, + ["overlay_analysis_skip_resource_checks" /* OverlayAnalysisSkipResourceChecks */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_SKIP_RESOURCE_CHECKS", + minimumVersion: void 0 + }, ["python_default_is_to_not_extract_stdlib" /* PythonDefaultIsToNotExtractStdlib */]: { defaultValue: false, envVar: "CODEQL_ACTION_DISABLE_PYTHON_STANDARD_LIBRARY_EXTRACTION", @@ -86920,6 +86925,24 @@ async function isOverlayAnalysisFeatureEnabled(features, codeql, languages, code } return true; } +async function runnerSupportsOverlayAnalysis(ramInput, logger) { + const diskUsage = await checkDiskUsage(logger); + if (diskUsage === void 0 || diskUsage.numAvailableBytes < OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_BYTES) { + const diskSpaceMb = diskUsage === void 0 ? 0 : Math.round(diskUsage.numAvailableBytes / 1e6); + logger.info( + `Setting overlay database mode to ${"none" /* None */} due to insufficient disk space (${diskSpaceMb} MB).` + ); + return false; + } + const memoryFlagValue = getMemoryFlagValue(ramInput, logger); + if (memoryFlagValue < 5 * 1024) { + logger.info( + `Setting overlay database mode to ${"none" /* None */} due to insufficient memory for CodeQL analysis (${memoryFlagValue} MB).` + ); + return false; + } + return true; +} async function getOverlayDatabaseMode(codeql, features, languages, sourceRoot, buildMode, ramInput, codeScanningConfig, logger) { let overlayDatabaseMode = "none" /* None */; let useOverlayDatabaseCaching = false; @@ -86935,21 +86958,12 @@ async function getOverlayDatabaseMode(codeql, features, languages, sourceRoot, b languages, codeScanningConfig )) { - const diskUsage = await checkDiskUsage(logger); - const memoryFlagValue = getMemoryFlagValue(ramInput, logger); - if (diskUsage === void 0 || diskUsage.numAvailableBytes < OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_BYTES) { - const diskSpaceMb = diskUsage === void 0 ? 0 : Math.round(diskUsage.numAvailableBytes / 1e6); - overlayDatabaseMode = "none" /* None */; - useOverlayDatabaseCaching = false; - logger.info( - `Setting overlay database mode to ${overlayDatabaseMode} due to insufficient disk space (${diskSpaceMb} MB).` - ); - } else if (memoryFlagValue < 5 * 1024) { + const performResourceChecks = !await features.getValue( + "overlay_analysis_skip_resource_checks" /* OverlayAnalysisSkipResourceChecks */, + codeql + ); + if (performResourceChecks && !await runnerSupportsOverlayAnalysis(ramInput, logger)) { overlayDatabaseMode = "none" /* None */; - useOverlayDatabaseCaching = false; - logger.info( - `Setting overlay database mode to ${overlayDatabaseMode} due to insufficient memory for CodeQL analysis (${memoryFlagValue} MB).` - ); } else if (isAnalyzingPullRequest()) { overlayDatabaseMode = "overlay" /* Overlay */; useOverlayDatabaseCaching = true; diff --git a/lib/resolve-environment-action.js b/lib/resolve-environment-action.js index e346b6cb35..026a771192 100644 --- a/lib/resolve-environment-action.js +++ b/lib/resolve-environment-action.js @@ -84117,6 +84117,11 @@ var featureConfig = { envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_SWIFT", minimumVersion: void 0 }, + ["overlay_analysis_skip_resource_checks" /* OverlayAnalysisSkipResourceChecks */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_SKIP_RESOURCE_CHECKS", + minimumVersion: void 0 + }, ["python_default_is_to_not_extract_stdlib" /* PythonDefaultIsToNotExtractStdlib */]: { defaultValue: false, envVar: "CODEQL_ACTION_DISABLE_PYTHON_STANDARD_LIBRARY_EXTRACTION", diff --git a/lib/setup-codeql-action.js b/lib/setup-codeql-action.js index dad178be4f..6f8fbea44b 100644 --- a/lib/setup-codeql-action.js +++ b/lib/setup-codeql-action.js @@ -84029,6 +84029,11 @@ var featureConfig = { envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_SWIFT", minimumVersion: void 0 }, + ["overlay_analysis_skip_resource_checks" /* OverlayAnalysisSkipResourceChecks */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_SKIP_RESOURCE_CHECKS", + minimumVersion: void 0 + }, ["python_default_is_to_not_extract_stdlib" /* PythonDefaultIsToNotExtractStdlib */]: { defaultValue: false, envVar: "CODEQL_ACTION_DISABLE_PYTHON_STANDARD_LIBRARY_EXTRACTION", diff --git a/lib/start-proxy-action-post.js b/lib/start-proxy-action-post.js index fba9c177e7..85f560379d 100644 --- a/lib/start-proxy-action-post.js +++ b/lib/start-proxy-action-post.js @@ -119592,6 +119592,11 @@ var featureConfig = { envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_SWIFT", minimumVersion: void 0 }, + ["overlay_analysis_skip_resource_checks" /* OverlayAnalysisSkipResourceChecks */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_SKIP_RESOURCE_CHECKS", + minimumVersion: void 0 + }, ["python_default_is_to_not_extract_stdlib" /* PythonDefaultIsToNotExtractStdlib */]: { defaultValue: false, envVar: "CODEQL_ACTION_DISABLE_PYTHON_STANDARD_LIBRARY_EXTRACTION", diff --git a/lib/start-proxy-action.js b/lib/start-proxy-action.js index b32d70b20b..264b95c3a0 100644 --- a/lib/start-proxy-action.js +++ b/lib/start-proxy-action.js @@ -100181,6 +100181,11 @@ var featureConfig = { envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_SWIFT", minimumVersion: void 0 }, + ["overlay_analysis_skip_resource_checks" /* OverlayAnalysisSkipResourceChecks */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_SKIP_RESOURCE_CHECKS", + minimumVersion: void 0 + }, ["python_default_is_to_not_extract_stdlib" /* PythonDefaultIsToNotExtractStdlib */]: { defaultValue: false, envVar: "CODEQL_ACTION_DISABLE_PYTHON_STANDARD_LIBRARY_EXTRACTION", diff --git a/lib/upload-lib.js b/lib/upload-lib.js index 78848db809..ab67fece58 100644 --- a/lib/upload-lib.js +++ b/lib/upload-lib.js @@ -87182,6 +87182,11 @@ var featureConfig = { envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_SWIFT", minimumVersion: void 0 }, + ["overlay_analysis_skip_resource_checks" /* OverlayAnalysisSkipResourceChecks */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_SKIP_RESOURCE_CHECKS", + minimumVersion: void 0 + }, ["python_default_is_to_not_extract_stdlib" /* PythonDefaultIsToNotExtractStdlib */]: { defaultValue: false, envVar: "CODEQL_ACTION_DISABLE_PYTHON_STANDARD_LIBRARY_EXTRACTION", diff --git a/lib/upload-sarif-action-post.js b/lib/upload-sarif-action-post.js index c389b8b0ec..c1f5f1fb62 100644 --- a/lib/upload-sarif-action-post.js +++ b/lib/upload-sarif-action-post.js @@ -119758,6 +119758,11 @@ var featureConfig = { envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_SWIFT", minimumVersion: void 0 }, + ["overlay_analysis_skip_resource_checks" /* OverlayAnalysisSkipResourceChecks */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_SKIP_RESOURCE_CHECKS", + minimumVersion: void 0 + }, ["python_default_is_to_not_extract_stdlib" /* PythonDefaultIsToNotExtractStdlib */]: { defaultValue: false, envVar: "CODEQL_ACTION_DISABLE_PYTHON_STANDARD_LIBRARY_EXTRACTION", diff --git a/lib/upload-sarif-action.js b/lib/upload-sarif-action.js index c3ea61b53c..5d8f8c92dd 100644 --- a/lib/upload-sarif-action.js +++ b/lib/upload-sarif-action.js @@ -86979,6 +86979,11 @@ var featureConfig = { envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_SWIFT", minimumVersion: void 0 }, + ["overlay_analysis_skip_resource_checks" /* OverlayAnalysisSkipResourceChecks */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_SKIP_RESOURCE_CHECKS", + minimumVersion: void 0 + }, ["python_default_is_to_not_extract_stdlib" /* PythonDefaultIsToNotExtractStdlib */]: { defaultValue: false, envVar: "CODEQL_ACTION_DISABLE_PYTHON_STANDARD_LIBRARY_EXTRACTION", diff --git a/src/config-utils.test.ts b/src/config-utils.test.ts index 623eccea72..d07aacde2e 100644 --- a/src/config-utils.test.ts +++ b/src/config-utils.test.ts @@ -1231,6 +1231,28 @@ test( }, ); +test( + getOverlayDatabaseModeMacro, + "Overlay-base database on default branch if runner disk space is too low and skip resource checks flag is enabled", + { + languages: [KnownLanguage.javascript], + features: [ + Feature.OverlayAnalysis, + Feature.OverlayAnalysisCodeScanningJavascript, + Feature.OverlayAnalysisSkipResourceChecks, + ], + isDefaultBranch: true, + diskUsage: { + numAvailableBytes: 1_000_000_000, + numTotalBytes: 100_000_000_000, + }, + }, + { + overlayDatabaseMode: OverlayDatabaseMode.OverlayBase, + useOverlayDatabaseCaching: true, + }, +); + test( getOverlayDatabaseModeMacro, "No overlay-base database on default branch if memory flag is too low", @@ -1249,6 +1271,25 @@ test( }, ); +test( + getOverlayDatabaseModeMacro, + "Overlay-base database on default branch if memory flag is too low and skip resource checks flag is enabled", + { + languages: [KnownLanguage.javascript], + features: [ + Feature.OverlayAnalysis, + Feature.OverlayAnalysisCodeScanningJavascript, + Feature.OverlayAnalysisSkipResourceChecks, + ], + isDefaultBranch: true, + memoryFlagValue: 3072, + }, + { + overlayDatabaseMode: OverlayDatabaseMode.OverlayBase, + useOverlayDatabaseCaching: true, + }, +); + test( getOverlayDatabaseModeMacro, "No overlay-base database on default branch when code-scanning feature enabled with disable-default-queries", @@ -1440,6 +1481,28 @@ test( }, ); +test( + getOverlayDatabaseModeMacro, + "Overlay analysis on PR if runner disk space is too low and skip resource checks flag is enabled", + { + languages: [KnownLanguage.javascript], + features: [ + Feature.OverlayAnalysis, + Feature.OverlayAnalysisCodeScanningJavascript, + Feature.OverlayAnalysisSkipResourceChecks, + ], + isPullRequest: true, + diskUsage: { + numAvailableBytes: 1_000_000_000, + numTotalBytes: 100_000_000_000, + }, + }, + { + overlayDatabaseMode: OverlayDatabaseMode.Overlay, + useOverlayDatabaseCaching: true, + }, +); + test( getOverlayDatabaseModeMacro, "No overlay analysis on PR if we can't determine runner disk space", @@ -1476,6 +1539,25 @@ test( }, ); +test( + getOverlayDatabaseModeMacro, + "Overlay analysis on PR if memory flag is too low and skip resource checks flag is enabled", + { + languages: [KnownLanguage.javascript], + features: [ + Feature.OverlayAnalysis, + Feature.OverlayAnalysisCodeScanningJavascript, + Feature.OverlayAnalysisSkipResourceChecks, + ], + isPullRequest: true, + memoryFlagValue: 3072, + }, + { + overlayDatabaseMode: OverlayDatabaseMode.Overlay, + useOverlayDatabaseCaching: true, + }, +); + test( getOverlayDatabaseModeMacro, "No overlay analysis on PR when code-scanning feature enabled with disable-default-queries", diff --git a/src/config-utils.ts b/src/config-utils.ts index fa3bbeb183..4f3fadf662 100644 --- a/src/config-utils.ts +++ b/src/config-utils.ts @@ -636,6 +636,38 @@ async function isOverlayAnalysisFeatureEnabled( return true; } +async function runnerSupportsOverlayAnalysis( + ramInput: string | undefined, + logger: Logger, +): Promise { + const diskUsage = await checkDiskUsage(logger); + if ( + diskUsage === undefined || + diskUsage.numAvailableBytes < OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_BYTES + ) { + const diskSpaceMb = + diskUsage === undefined + ? 0 + : Math.round(diskUsage.numAvailableBytes / 1_000_000); + logger.info( + `Setting overlay database mode to ${OverlayDatabaseMode.None} ` + + `due to insufficient disk space (${diskSpaceMb} MB).`, + ); + return false; + } + + const memoryFlagValue = getMemoryFlagValue(ramInput, logger); + if (memoryFlagValue < 5 * 1024) { + logger.info( + `Setting overlay database mode to ${OverlayDatabaseMode.None} ` + + `due to insufficient memory for CodeQL analysis (${memoryFlagValue} MB).`, + ); + return false; + } + + return true; +} + /** * Calculate and validate the overlay database mode and caching to use. * @@ -694,29 +726,15 @@ export async function getOverlayDatabaseMode( codeScanningConfig, ) ) { - const diskUsage = await checkDiskUsage(logger); - const memoryFlagValue = getMemoryFlagValue(ramInput, logger); + const performResourceChecks = !(await features.getValue( + Feature.OverlayAnalysisSkipResourceChecks, + codeql, + )); if ( - diskUsage === undefined || - diskUsage.numAvailableBytes < OVERLAY_MINIMUM_AVAILABLE_DISK_SPACE_BYTES + performResourceChecks && + !(await runnerSupportsOverlayAnalysis(ramInput, logger)) ) { - const diskSpaceMb = - diskUsage === undefined - ? 0 - : Math.round(diskUsage.numAvailableBytes / 1_000_000); overlayDatabaseMode = OverlayDatabaseMode.None; - useOverlayDatabaseCaching = false; - logger.info( - `Setting overlay database mode to ${overlayDatabaseMode} ` + - `due to insufficient disk space (${diskSpaceMb} MB).`, - ); - } else if (memoryFlagValue < 5 * 1024) { - overlayDatabaseMode = OverlayDatabaseMode.None; - useOverlayDatabaseCaching = false; - logger.info( - `Setting overlay database mode to ${overlayDatabaseMode} ` + - `due to insufficient memory for CodeQL analysis (${memoryFlagValue} MB).`, - ); } else if (isAnalyzingPullRequest()) { overlayDatabaseMode = OverlayDatabaseMode.Overlay; useOverlayDatabaseCaching = true; diff --git a/src/feature-flags.ts b/src/feature-flags.ts index 8ea1d4c1a4..2085dccc40 100644 --- a/src/feature-flags.ts +++ b/src/feature-flags.ts @@ -76,6 +76,7 @@ export enum Feature { OverlayAnalysisRuby = "overlay_analysis_ruby", OverlayAnalysisRust = "overlay_analysis_rust", OverlayAnalysisSwift = "overlay_analysis_swift", + OverlayAnalysisSkipResourceChecks = "overlay_analysis_skip_resource_checks", PythonDefaultIsToNotExtractStdlib = "python_default_is_to_not_extract_stdlib", QaTelemetryEnabled = "qa_telemetry_enabled", UploadOverlayDbToApi = "upload_overlay_db_to_api", @@ -283,6 +284,11 @@ export const featureConfig: Record< envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_SWIFT", minimumVersion: undefined, }, + [Feature.OverlayAnalysisSkipResourceChecks]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_SKIP_RESOURCE_CHECKS", + minimumVersion: undefined, + }, [Feature.PythonDefaultIsToNotExtractStdlib]: { defaultValue: false, envVar: "CODEQL_ACTION_DISABLE_PYTHON_STANDARD_LIBRARY_EXTRACTION",