diff --git a/lib/analyze-action-post.js b/lib/analyze-action-post.js index 48dd15f7d..093b3385f 100644 --- a/lib/analyze-action-post.js +++ b/lib/analyze-action-post.js @@ -161657,6 +161657,16 @@ var featureConfig = { envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_CSHARP", minimumVersion: void 0 }, + ["overlay_analysis_status_check" /* OverlayAnalysisStatusCheck */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_STATUS_CHECK", + minimumVersion: void 0 + }, + ["overlay_analysis_status_save" /* OverlayAnalysisStatusSave */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_STATUS_SAVE", + minimumVersion: void 0 + }, ["overlay_analysis_go" /* OverlayAnalysisGo */]: { defaultValue: false, envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_GO", diff --git a/lib/analyze-action.js b/lib/analyze-action.js index a1c81afa1..c4096383e 100644 --- a/lib/analyze-action.js +++ b/lib/analyze-action.js @@ -107772,6 +107772,16 @@ var featureConfig = { envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_CSHARP", minimumVersion: void 0 }, + ["overlay_analysis_status_check" /* OverlayAnalysisStatusCheck */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_STATUS_CHECK", + minimumVersion: void 0 + }, + ["overlay_analysis_status_save" /* OverlayAnalysisStatusSave */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_STATUS_SAVE", + minimumVersion: void 0 + }, ["overlay_analysis_go" /* OverlayAnalysisGo */]: { defaultValue: false, envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_GO", diff --git a/lib/autobuild-action.js b/lib/autobuild-action.js index 77feabe3d..bce77f9f5 100644 --- a/lib/autobuild-action.js +++ b/lib/autobuild-action.js @@ -104062,6 +104062,16 @@ var featureConfig = { envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_CSHARP", minimumVersion: void 0 }, + ["overlay_analysis_status_check" /* OverlayAnalysisStatusCheck */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_STATUS_CHECK", + minimumVersion: void 0 + }, + ["overlay_analysis_status_save" /* OverlayAnalysisStatusSave */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_STATUS_SAVE", + minimumVersion: void 0 + }, ["overlay_analysis_go" /* OverlayAnalysisGo */]: { defaultValue: false, envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_GO", diff --git a/lib/init-action-post.js b/lib/init-action-post.js index d30ef1a0b..966d09753 100644 --- a/lib/init-action-post.js +++ b/lib/init-action-post.js @@ -165157,6 +165157,16 @@ var featureConfig = { envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_CSHARP", minimumVersion: void 0 }, + ["overlay_analysis_status_check" /* OverlayAnalysisStatusCheck */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_STATUS_CHECK", + minimumVersion: void 0 + }, + ["overlay_analysis_status_save" /* OverlayAnalysisStatusSave */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_STATUS_SAVE", + minimumVersion: void 0 + }, ["overlay_analysis_go" /* OverlayAnalysisGo */]: { defaultValue: false, envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_GO", @@ -169728,7 +169738,7 @@ async function tryUploadSarifIfRunFailed(config, repositoryNwo, features, logger } } async function run(uploadAllAvailableDebugArtifacts, printDebugLogs2, codeql, config, repositoryNwo, features, logger) { - await recordOverlayStatus(codeql, config, logger); + await recordOverlayStatus(codeql, config, features, logger); const uploadFailedSarifResult = await tryUploadSarifIfRunFailed( config, repositoryNwo, @@ -169790,8 +169800,8 @@ async function run(uploadAllAvailableDebugArtifacts, printDebugLogs2, codeql, co } return uploadFailedSarifResult; } -async function recordOverlayStatus(codeql, config, logger) { - if (config.overlayDatabaseMode === "overlay-base" /* OverlayBase */ && process.env["CODEQL_ACTION_ANALYZE_DID_COMPLETE_SUCCESSFULLY" /* ANALYZE_DID_COMPLETE_SUCCESSFULLY */] !== "true") { +async function recordOverlayStatus(codeql, config, features, logger) { + if (config.overlayDatabaseMode === "overlay-base" /* OverlayBase */ && process.env["CODEQL_ACTION_ANALYZE_DID_COMPLETE_SUCCESSFULLY" /* ANALYZE_DID_COMPLETE_SUCCESSFULLY */] !== "true" && await features.getValue("overlay_analysis_status_save" /* OverlayAnalysisStatusSave */)) { const overlayStatus = { builtOverlayBaseDatabase: false }; diff --git a/lib/init-action.js b/lib/init-action.js index 9e2702475..3ca107553 100644 --- a/lib/init-action.js +++ b/lib/init-action.js @@ -105289,6 +105289,16 @@ var featureConfig = { envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_CSHARP", minimumVersion: void 0 }, + ["overlay_analysis_status_check" /* OverlayAnalysisStatusCheck */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_STATUS_CHECK", + minimumVersion: void 0 + }, + ["overlay_analysis_status_save" /* OverlayAnalysisStatusSave */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_STATUS_SAVE", + minimumVersion: void 0 + }, ["overlay_analysis_go" /* OverlayAnalysisGo */]: { defaultValue: false, envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_GO", @@ -106165,7 +106175,7 @@ async function getOverlayDatabaseMode(codeql, features, languages, sourceRoot, b "overlay_analysis_skip_resource_checks" /* OverlayAnalysisSkipResourceChecks */, codeql ); - if (diskUsage && await shouldSkipOverlayAnalysis(codeql, languages, diskUsage, logger)) { + if (diskUsage && await features.getValue("overlay_analysis_status_check" /* OverlayAnalysisStatusCheck */) && await shouldSkipOverlayAnalysis(codeql, languages, diskUsage, logger)) { logger.info( `Setting overlay database mode to ${"none" /* None */} because overlay analysis previously failed with this combination of languages, disk space, and CodeQL version. Consider running CodeQL analysis on a larger runner.` ); diff --git a/lib/resolve-environment-action.js b/lib/resolve-environment-action.js index de30ae2cb..423ae3ce1 100644 --- a/lib/resolve-environment-action.js +++ b/lib/resolve-environment-action.js @@ -104049,6 +104049,16 @@ var featureConfig = { envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_CSHARP", minimumVersion: void 0 }, + ["overlay_analysis_status_check" /* OverlayAnalysisStatusCheck */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_STATUS_CHECK", + minimumVersion: void 0 + }, + ["overlay_analysis_status_save" /* OverlayAnalysisStatusSave */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_STATUS_SAVE", + minimumVersion: void 0 + }, ["overlay_analysis_go" /* OverlayAnalysisGo */]: { defaultValue: false, envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_GO", diff --git a/lib/setup-codeql-action.js b/lib/setup-codeql-action.js index 8ad95ec5c..c53c4bd2d 100644 --- a/lib/setup-codeql-action.js +++ b/lib/setup-codeql-action.js @@ -103962,6 +103962,16 @@ var featureConfig = { envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_CSHARP", minimumVersion: void 0 }, + ["overlay_analysis_status_check" /* OverlayAnalysisStatusCheck */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_STATUS_CHECK", + minimumVersion: void 0 + }, + ["overlay_analysis_status_save" /* OverlayAnalysisStatusSave */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_STATUS_SAVE", + minimumVersion: void 0 + }, ["overlay_analysis_go" /* OverlayAnalysisGo */]: { defaultValue: false, envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_GO", diff --git a/lib/start-proxy-action-post.js b/lib/start-proxy-action-post.js index 7243ee3d2..d65ac77e8 100644 --- a/lib/start-proxy-action-post.js +++ b/lib/start-proxy-action-post.js @@ -161063,6 +161063,16 @@ var featureConfig = { envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_CSHARP", minimumVersion: void 0 }, + ["overlay_analysis_status_check" /* OverlayAnalysisStatusCheck */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_STATUS_CHECK", + minimumVersion: void 0 + }, + ["overlay_analysis_status_save" /* OverlayAnalysisStatusSave */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_STATUS_SAVE", + minimumVersion: void 0 + }, ["overlay_analysis_go" /* OverlayAnalysisGo */]: { defaultValue: false, envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_GO", diff --git a/lib/start-proxy-action.js b/lib/start-proxy-action.js index cb7891144..14efc1387 100644 --- a/lib/start-proxy-action.js +++ b/lib/start-proxy-action.js @@ -120754,6 +120754,16 @@ var featureConfig = { envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_CSHARP", minimumVersion: void 0 }, + ["overlay_analysis_status_check" /* OverlayAnalysisStatusCheck */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_STATUS_CHECK", + minimumVersion: void 0 + }, + ["overlay_analysis_status_save" /* OverlayAnalysisStatusSave */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_STATUS_SAVE", + minimumVersion: void 0 + }, ["overlay_analysis_go" /* OverlayAnalysisGo */]: { defaultValue: false, envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_GO", diff --git a/lib/upload-lib.js b/lib/upload-lib.js index 13271dfaa..7b6c3456a 100644 --- a/lib/upload-lib.js +++ b/lib/upload-lib.js @@ -107221,6 +107221,16 @@ var featureConfig = { envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_CSHARP", minimumVersion: void 0 }, + ["overlay_analysis_status_check" /* OverlayAnalysisStatusCheck */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_STATUS_CHECK", + minimumVersion: void 0 + }, + ["overlay_analysis_status_save" /* OverlayAnalysisStatusSave */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_STATUS_SAVE", + minimumVersion: void 0 + }, ["overlay_analysis_go" /* OverlayAnalysisGo */]: { defaultValue: false, envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_GO", diff --git a/lib/upload-sarif-action-post.js b/lib/upload-sarif-action-post.js index 55900e28b..ac0483c02 100644 --- a/lib/upload-sarif-action-post.js +++ b/lib/upload-sarif-action-post.js @@ -161225,6 +161225,16 @@ var featureConfig = { envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_CSHARP", minimumVersion: void 0 }, + ["overlay_analysis_status_check" /* OverlayAnalysisStatusCheck */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_STATUS_CHECK", + minimumVersion: void 0 + }, + ["overlay_analysis_status_save" /* OverlayAnalysisStatusSave */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_STATUS_SAVE", + minimumVersion: void 0 + }, ["overlay_analysis_go" /* OverlayAnalysisGo */]: { defaultValue: false, envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_GO", diff --git a/lib/upload-sarif-action.js b/lib/upload-sarif-action.js index 8144aae7a..3b4fc6d7d 100644 --- a/lib/upload-sarif-action.js +++ b/lib/upload-sarif-action.js @@ -106946,6 +106946,16 @@ var featureConfig = { envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_CSHARP", minimumVersion: void 0 }, + ["overlay_analysis_status_check" /* OverlayAnalysisStatusCheck */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_STATUS_CHECK", + minimumVersion: void 0 + }, + ["overlay_analysis_status_save" /* OverlayAnalysisStatusSave */]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_STATUS_SAVE", + minimumVersion: void 0 + }, ["overlay_analysis_go" /* OverlayAnalysisGo */]: { defaultValue: false, envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_GO", diff --git a/src/config-utils.test.ts b/src/config-utils.test.ts index 2d0c6942e..d2e700bce 100644 --- a/src/config-utils.test.ts +++ b/src/config-utils.test.ts @@ -1307,7 +1307,11 @@ test( "No overlay-base database on default branch when cached status indicates previous failure", { languages: [KnownLanguage.javascript], - features: [Feature.OverlayAnalysis, Feature.OverlayAnalysisJavascript], + features: [ + Feature.OverlayAnalysis, + Feature.OverlayAnalysisJavascript, + Feature.OverlayAnalysisStatusCheck, + ], isDefaultBranch: true, shouldSkipOverlayAnalysisDueToCachedStatus: true, }, @@ -1322,7 +1326,11 @@ test( "No overlay analysis on PR when cached status indicates previous failure", { languages: [KnownLanguage.javascript], - features: [Feature.OverlayAnalysis, Feature.OverlayAnalysisJavascript], + features: [ + Feature.OverlayAnalysis, + Feature.OverlayAnalysisJavascript, + Feature.OverlayAnalysisStatusCheck, + ], isPullRequest: true, shouldSkipOverlayAnalysisDueToCachedStatus: true, }, diff --git a/src/config-utils.ts b/src/config-utils.ts index d909d405c..723490f8f 100644 --- a/src/config-utils.ts +++ b/src/config-utils.ts @@ -771,6 +771,7 @@ export async function getOverlayDatabaseMode( )); if ( diskUsage && + (await features.getValue(Feature.OverlayAnalysisStatusCheck)) && (await shouldSkipOverlayAnalysis(codeql, languages, diskUsage, logger)) ) { logger.info( diff --git a/src/feature-flags.ts b/src/feature-flags.ts index 9fe080837..714e6e9b4 100644 --- a/src/feature-flags.ts +++ b/src/feature-flags.ts @@ -64,6 +64,8 @@ export enum Feature { OverlayAnalysisCodeScanningSwift = "overlay_analysis_code_scanning_swift", OverlayAnalysisCpp = "overlay_analysis_cpp", OverlayAnalysisCsharp = "overlay_analysis_csharp", + OverlayAnalysisStatusCheck = "overlay_analysis_status_check", + OverlayAnalysisStatusSave = "overlay_analysis_status_save", OverlayAnalysisGo = "overlay_analysis_go", OverlayAnalysisJava = "overlay_analysis_java", OverlayAnalysisJavascript = "overlay_analysis_javascript", @@ -256,6 +258,16 @@ export const featureConfig = { envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_CSHARP", minimumVersion: undefined, }, + [Feature.OverlayAnalysisStatusCheck]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_STATUS_CHECK", + minimumVersion: undefined, + }, + [Feature.OverlayAnalysisStatusSave]: { + defaultValue: false, + envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_STATUS_SAVE", + minimumVersion: undefined, + }, [Feature.OverlayAnalysisGo]: { defaultValue: false, envVar: "CODEQL_ACTION_OVERLAY_ANALYSIS_GO", diff --git a/src/init-action-post-helper.test.ts b/src/init-action-post-helper.test.ts index 84c6414f2..79b55e291 100644 --- a/src/init-action-post-helper.test.ts +++ b/src/init-action-post-helper.test.ts @@ -340,7 +340,7 @@ test("saves overlay status when overlay-base analysis did not complete successfu overlayDatabaseMode: OverlayDatabaseMode.OverlayBase, }), parseRepositoryNwo("github/codeql-action"), - createFeatures([]), + createFeatures([Feature.OverlayAnalysisStatusSave]), getRunnerLogger(true), ); @@ -371,6 +371,43 @@ test("saves overlay status when overlay-base analysis did not complete successfu }); }); +test("does not save overlay status when OverlayAnalysisStatusSave feature flag is disabled", async (t) => { + return await util.withTmpDir(async (tmpDir) => { + process.env["GITHUB_REPOSITORY"] = "github/codeql-action-fake-repository"; + process.env["RUNNER_TEMP"] = tmpDir; + // Ensure analyze did not complete successfully. + delete process.env[EnvVar.ANALYZE_DID_COMPLETE_SUCCESSFULLY]; + + sinon.stub(util, "checkDiskUsage").resolves({ + numAvailableBytes: 100 * 1024 * 1024 * 1024, + numTotalBytes: 200 * 1024 * 1024 * 1024, + }); + + const saveOverlayStatusStub = sinon + .stub(overlayStatus, "saveOverlayStatus") + .resolves(true); + + await initActionPostHelper.run( + sinon.spy(), + sinon.spy(), + codeql.createStubCodeQL({}), + createTestConfig({ + debugMode: false, + languages: ["javascript"], + overlayDatabaseMode: OverlayDatabaseMode.OverlayBase, + }), + parseRepositoryNwo("github/codeql-action"), + createFeatures([]), + getRunnerLogger(true), + ); + + t.true( + saveOverlayStatusStub.notCalled, + "saveOverlayStatus should not be called when OverlayAnalysisStatusSave feature flag is disabled", + ); + }); +}); + test("does not save overlay status when analysis completed successfully", async (t) => { return await util.withTmpDir(async (tmpDir) => { process.env["GITHUB_REPOSITORY"] = "github/codeql-action-fake-repository"; diff --git a/src/init-action-post-helper.ts b/src/init-action-post-helper.ts index 87d4377e0..4ef636820 100644 --- a/src/init-action-post-helper.ts +++ b/src/init-action-post-helper.ts @@ -172,7 +172,7 @@ export async function run( features: FeatureEnablement, logger: Logger, ) { - await recordOverlayStatus(codeql, config, logger); + await recordOverlayStatus(codeql, config, features, logger); const uploadFailedSarifResult = await tryUploadSarifIfRunFailed( config, @@ -254,11 +254,13 @@ export async function run( async function recordOverlayStatus( codeql: CodeQL, config: Config, + features: FeatureEnablement, logger: Logger, ) { if ( config.overlayDatabaseMode === OverlayDatabaseMode.OverlayBase && - process.env[EnvVar.ANALYZE_DID_COMPLETE_SUCCESSFULLY] !== "true" + process.env[EnvVar.ANALYZE_DID_COMPLETE_SUCCESSFULLY] !== "true" && + (await features.getValue(Feature.OverlayAnalysisStatusSave)) ) { const overlayStatus = { builtOverlayBaseDatabase: false,