Fall back to the default.json CLI version if feature flags misconfigured
This commit is contained in:
parent
14c4412c63
commit
5d931ea2a2
6 changed files with 33 additions and 15 deletions
17
lib/feature-flags.js
generated
17
lib/feature-flags.js
generated
|
|
@ -32,7 +32,6 @@ const defaults = __importStar(require("./defaults.json"));
|
|||
const util = __importStar(require("./util"));
|
||||
const DEFAULT_VERSION_FEATURE_FLAG_PREFIX = "default_codeql_version_";
|
||||
const DEFAULT_VERSION_FEATURE_FLAG_SUFFIX = "_enabled";
|
||||
const MINIMUM_ENABLED_CODEQL_VERSION = "2.11.6";
|
||||
var Feature;
|
||||
(function (Feature) {
|
||||
Feature["BypassToolcacheEnabled"] = "bypass_toolcache_enabled";
|
||||
|
|
@ -173,9 +172,19 @@ class GitHubFeatureFlags {
|
|||
.filter((f) => f !== undefined)
|
||||
.map((f) => f);
|
||||
if (enabledFeatureFlagCliVersions.length === 0) {
|
||||
this.logger.debug("Feature flags do not specify a default CLI version. Falling back to CLI version " +
|
||||
`${MINIMUM_ENABLED_CODEQL_VERSION}.`);
|
||||
return MINIMUM_ENABLED_CODEQL_VERSION;
|
||||
// We expect at least one default CLI version to be enabled on Dotcom at any time. However if
|
||||
// the feature flags are misconfigured, rather than crashing, we fall back to the CLI version
|
||||
// shipped with the Action in defaults.json. This has the effect of immediately rolling out
|
||||
// new CLI versions to all users running the latest Action.
|
||||
//
|
||||
// A drawback of this approach relates to the small number of users that run old versions of
|
||||
// the Action on Dotcom. As a result of this approach, if we misconfigure the feature flags
|
||||
// then these users will experience some alert churn. This is because the CLI version in the
|
||||
// defaults.json shipped with an old version of the Action is likely older than the CLI
|
||||
// version that would have been specified by the feature flags before they were misconfigured.
|
||||
this.logger.warning("Feature flags do not specify a default CLI version. Falling back to the CLI version " +
|
||||
`shipped with the Action. This is ${defaults.cliVersion}.`);
|
||||
return defaults.cliVersion;
|
||||
}
|
||||
const maxCliVersion = enabledFeatureFlagCliVersions.reduce((maxVersion, currentVersion) => currentVersion > maxVersion ? currentVersion : maxVersion, enabledFeatureFlagCliVersions[0]);
|
||||
this.logger.debug(`Derived default CLI version of ${maxCliVersion} from feature flags.`);
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
4
lib/feature-flags.test.js
generated
4
lib/feature-flags.test.js
generated
|
|
@ -242,13 +242,13 @@ for (const variant of [util_1.GitHubVariant.GHAE, util_1.GitHubVariant.GHES]) {
|
|||
});
|
||||
});
|
||||
});
|
||||
(0, ava_1.default)(`selects CLI v2.11.6 on Dotcom when no default version feature flags are enabled`, async (t) => {
|
||||
(0, ava_1.default)(`selects CLI from defaults.json on Dotcom when no default version feature flags are enabled`, async (t) => {
|
||||
await (0, util_1.withTmpDir)(async (tmpDir) => {
|
||||
const featureEnablement = setUpFeatureFlagTests(tmpDir);
|
||||
const expectedFeatureEnablement = initializeFeatures(true);
|
||||
(0, testing_utils_1.mockFeatureFlagApiEndpoint)(200, expectedFeatureEnablement);
|
||||
t.deepEqual(await featureEnablement.getDefaultCliVersion(util_1.GitHubVariant.DOTCOM), {
|
||||
cliVersion: "2.11.6",
|
||||
cliVersion: defaults.cliVersion,
|
||||
variant: util_1.GitHubVariant.DOTCOM,
|
||||
});
|
||||
});
|
||||
|
|
|
|||
File diff suppressed because one or more lines are too long
|
|
@ -407,7 +407,7 @@ test("selects CLI v2.12.1 on Dotcom when feature flags enable v2.12.0 and v2.12.
|
|||
});
|
||||
});
|
||||
|
||||
test(`selects CLI v2.11.6 on Dotcom when no default version feature flags are enabled`, async (t) => {
|
||||
test(`selects CLI from defaults.json on Dotcom when no default version feature flags are enabled`, async (t) => {
|
||||
await withTmpDir(async (tmpDir) => {
|
||||
const featureEnablement = setUpFeatureFlagTests(tmpDir);
|
||||
const expectedFeatureEnablement = initializeFeatures(true);
|
||||
|
|
@ -416,7 +416,7 @@ test(`selects CLI v2.11.6 on Dotcom when no default version feature flags are en
|
|||
t.deepEqual(
|
||||
await featureEnablement.getDefaultCliVersion(GitHubVariant.DOTCOM),
|
||||
{
|
||||
cliVersion: "2.11.6",
|
||||
cliVersion: defaults.cliVersion,
|
||||
variant: GitHubVariant.DOTCOM,
|
||||
}
|
||||
);
|
||||
|
|
|
|||
|
|
@ -12,7 +12,6 @@ import * as util from "./util";
|
|||
|
||||
const DEFAULT_VERSION_FEATURE_FLAG_PREFIX = "default_codeql_version_";
|
||||
const DEFAULT_VERSION_FEATURE_FLAG_SUFFIX = "_enabled";
|
||||
const MINIMUM_ENABLED_CODEQL_VERSION = "2.11.6";
|
||||
|
||||
export type CodeQLDefaultVersionInfo =
|
||||
| {
|
||||
|
|
@ -231,11 +230,21 @@ class GitHubFeatureFlags implements FeatureEnablement {
|
|||
.map((f) => f as string);
|
||||
|
||||
if (enabledFeatureFlagCliVersions.length === 0) {
|
||||
this.logger.debug(
|
||||
"Feature flags do not specify a default CLI version. Falling back to CLI version " +
|
||||
`${MINIMUM_ENABLED_CODEQL_VERSION}.`
|
||||
// We expect at least one default CLI version to be enabled on Dotcom at any time. However if
|
||||
// the feature flags are misconfigured, rather than crashing, we fall back to the CLI version
|
||||
// shipped with the Action in defaults.json. This has the effect of immediately rolling out
|
||||
// new CLI versions to all users running the latest Action.
|
||||
//
|
||||
// A drawback of this approach relates to the small number of users that run old versions of
|
||||
// the Action on Dotcom. As a result of this approach, if we misconfigure the feature flags
|
||||
// then these users will experience some alert churn. This is because the CLI version in the
|
||||
// defaults.json shipped with an old version of the Action is likely older than the CLI
|
||||
// version that would have been specified by the feature flags before they were misconfigured.
|
||||
this.logger.warning(
|
||||
"Feature flags do not specify a default CLI version. Falling back to the CLI version " +
|
||||
`shipped with the Action. This is ${defaults.cliVersion}.`
|
||||
);
|
||||
return MINIMUM_ENABLED_CODEQL_VERSION;
|
||||
return defaults.cliVersion;
|
||||
}
|
||||
|
||||
const maxCliVersion = enabledFeatureFlagCliVersions.reduce(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue