Introduce feature flags for saving and checking status

This commit is contained in:
Henry Mercer
2026-02-17 13:38:03 +00:00
parent 96961e0ee3
commit 827bba691f
17 changed files with 189 additions and 9 deletions
+10 -2
View File
@@ -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,
},
+1
View File
@@ -771,6 +771,7 @@ export async function getOverlayDatabaseMode(
));
if (
diskUsage &&
(await features.getValue(Feature.OverlayAnalysisStatusCheck)) &&
(await shouldSkipOverlayAnalysis(codeql, languages, diskUsage, logger))
) {
logger.info(
+12
View File
@@ -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",
+38 -1
View File
@@ -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";
+4 -2
View File
@@ -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,