Skip to content

Commit 5bf6dad

Browse files
authored
Merge pull request #2329 from github/henrymercer/csharp-buildless-rollback-mechanism
Add rollback mechanism for C# buildless
2 parents 789b5f8 + feec81c commit 5bf6dad

9 files changed

+117
-65
lines changed

Diff for: lib/config-utils.js

+5
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: lib/config-utils.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: lib/config-utils.test.js

+36-23
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: lib/config-utils.test.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: lib/feature-flags.js

+6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: lib/feature-flags.js.map

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Diff for: src/config-utils.test.ts

+51-39
Original file line numberDiff line numberDiff line change
@@ -1086,44 +1086,56 @@ const mockRepositoryNwo = parseRepositoryNwo("owner/repo");
10861086
});
10871087
});
10881088

1089-
test("Build mode not overridden when disable Java buildless feature flag disabled", async (t) => {
1090-
const messages: LoggedMessage[] = [];
1091-
const buildMode = await configUtils.parseBuildModeInput(
1092-
"none",
1093-
[Language.java],
1094-
createFeatures([]),
1095-
getRecordingLogger(messages),
1096-
);
1097-
t.is(buildMode, BuildMode.None);
1098-
t.deepEqual(messages, []);
1099-
});
1089+
for (const { displayName, language, feature } of [
1090+
{
1091+
displayName: "Java",
1092+
language: Language.java,
1093+
feature: Feature.DisableJavaBuildlessEnabled,
1094+
},
1095+
{
1096+
displayName: "C#",
1097+
language: Language.csharp,
1098+
feature: Feature.DisableCsharpBuildless,
1099+
},
1100+
]) {
1101+
test(`Build mode not overridden when disable ${displayName} buildless feature flag disabled`, async (t) => {
1102+
const messages: LoggedMessage[] = [];
1103+
const buildMode = await configUtils.parseBuildModeInput(
1104+
"none",
1105+
[language],
1106+
createFeatures([]),
1107+
getRecordingLogger(messages),
1108+
);
1109+
t.is(buildMode, BuildMode.None);
1110+
t.deepEqual(messages, []);
1111+
});
11001112

1101-
test("Build mode not overridden for other languages", async (t) => {
1102-
const messages: LoggedMessage[] = [];
1103-
const buildMode = await configUtils.parseBuildModeInput(
1104-
"none",
1105-
[Language.python],
1106-
createFeatures([Feature.DisableJavaBuildlessEnabled]),
1107-
getRecordingLogger(messages),
1108-
);
1109-
t.is(buildMode, BuildMode.None);
1110-
t.deepEqual(messages, []);
1111-
});
1113+
test(`Build mode not overridden for other languages when disable ${displayName} buildless feature flag enabled`, async (t) => {
1114+
const messages: LoggedMessage[] = [];
1115+
const buildMode = await configUtils.parseBuildModeInput(
1116+
"none",
1117+
[Language.python],
1118+
createFeatures([feature]),
1119+
getRecordingLogger(messages),
1120+
);
1121+
t.is(buildMode, BuildMode.None);
1122+
t.deepEqual(messages, []);
1123+
});
11121124

1113-
test("Build mode overridden when analyzing Java and disable Java buildless feature flag enabled", async (t) => {
1114-
const messages: LoggedMessage[] = [];
1115-
const buildMode = await configUtils.parseBuildModeInput(
1116-
"none",
1117-
[Language.java],
1118-
createFeatures([Feature.DisableJavaBuildlessEnabled]),
1119-
getRecordingLogger(messages),
1120-
);
1121-
t.is(buildMode, BuildMode.Autobuild);
1122-
t.deepEqual(messages, [
1123-
{
1124-
message:
1125-
"Scanning Java code without a build is temporarily unavailable. Falling back to 'autobuild' build mode.",
1126-
type: "warning",
1127-
},
1128-
]);
1129-
});
1125+
test(`Build mode overridden when analyzing ${displayName} and disable ${displayName} buildless feature flag enabled`, async (t) => {
1126+
const messages: LoggedMessage[] = [];
1127+
const buildMode = await configUtils.parseBuildModeInput(
1128+
"none",
1129+
[language],
1130+
createFeatures([feature]),
1131+
getRecordingLogger(messages),
1132+
);
1133+
t.is(buildMode, BuildMode.Autobuild);
1134+
t.deepEqual(messages, [
1135+
{
1136+
message: `Scanning ${displayName} code without a build is temporarily unavailable. Falling back to 'autobuild' build mode.`,
1137+
type: "warning",
1138+
},
1139+
]);
1140+
});
1141+
}

Diff for: src/config-utils.ts

+10
Original file line numberDiff line numberDiff line change
@@ -1108,6 +1108,16 @@ export async function parseBuildModeInput(
11081108
);
11091109
}
11101110

1111+
if (
1112+
languages.includes(Language.csharp) &&
1113+
(await features.getValue(Feature.DisableCsharpBuildless))
1114+
) {
1115+
logger.warning(
1116+
"Scanning C# code without a build is temporarily unavailable. Falling back to 'autobuild' build mode.",
1117+
);
1118+
return BuildMode.Autobuild;
1119+
}
1120+
11111121
if (
11121122
languages.includes(Language.java) &&
11131123
(await features.getValue(Feature.DisableJavaBuildlessEnabled))

Diff for: src/feature-flags.ts

+6
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ export enum Feature {
4949
CleanupTrapCaches = "cleanup_trap_caches",
5050
CppDependencyInstallation = "cpp_dependency_installation_enabled",
5151
CppTrapCachingEnabled = "cpp_trap_caching_enabled",
52+
DisableCsharpBuildless = "disable_csharp_buildless",
5253
DisableJavaBuildlessEnabled = "disable_java_buildless_enabled",
5354
DisableKotlinAnalysisEnabled = "disable_kotlin_analysis_enabled",
5455
ExportDiagnosticsEnabled = "export_diagnostics_enabled",
@@ -109,6 +110,11 @@ export const featureConfig: Record<
109110
legacyApi: true,
110111
minimumVersion: "2.16.1",
111112
},
113+
[Feature.DisableCsharpBuildless]: {
114+
defaultValue: false,
115+
envVar: "CODEQL_ACTION_DISABLE_CSHARP_BUILDLESS",
116+
minimumVersion: undefined,
117+
},
112118
[Feature.DisableJavaBuildlessEnabled]: {
113119
defaultValue: false,
114120
envVar: "CODEQL_ACTION_DISABLE_JAVA_BUILDLESS",

0 commit comments

Comments
 (0)