Skip to content

Commit ad5b693

Browse files
committed
[server] Fix propragation of "workspace-permanent feature flags"
1 parent 0fb5171 commit ad5b693

File tree

3 files changed

+17
-7
lines changed

3 files changed

+17
-7
lines changed

components/gitpod-protocol/src/protocol.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,15 @@ export const WorkspaceFeatureFlags = {
298298
workspace_connection_limiting: undefined,
299299
};
300300
export type NamedWorkspaceFeatureFlag = keyof typeof WorkspaceFeatureFlags;
301+
export namespace NamedWorkspaceFeatureFlag {
302+
export const WORKSPACE_PERSISTED_FEATTURE_FLAGS: NamedWorkspaceFeatureFlag[] = [
303+
"full_workspace_backup",
304+
"persistent_volume_claim",
305+
];
306+
export function isWorkspacePersisted(ff: NamedWorkspaceFeatureFlag): boolean {
307+
return WORKSPACE_PERSISTED_FEATTURE_FLAGS.includes(ff);
308+
}
309+
}
301310

302311
export interface EnvVarWithValue {
303312
name: string;

components/server/src/workspace/config-provider.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -125,12 +125,8 @@ export class ConfigProvider {
125125
*/
126126
delete config._featureFlags;
127127
if (!!user.featureFlags) {
128-
const workspacePersistedFlags: NamedWorkspaceFeatureFlag[] = [
129-
"full_workspace_backup",
130-
"persistent_volume_claim",
131-
];
132-
config._featureFlags = workspacePersistedFlags.filter((f) =>
133-
(user.featureFlags!.permanentWSFeatureFlags || []).includes(f),
128+
config._featureFlags = (user.featureFlags!.permanentWSFeatureFlags || []).filter(
129+
NamedWorkspaceFeatureFlag.isWorkspacePersisted,
134130
);
135131
}
136132

components/server/src/workspace/workspace-starter.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -829,7 +829,12 @@ export class WorkspaceStarter {
829829
let featureFlags: NamedWorkspaceFeatureFlag[] = workspace.config._featureFlags || [];
830830
featureFlags = featureFlags.concat(this.config.workspaceDefaults.defaultFeatureFlags);
831831
if (user.featureFlags && user.featureFlags.permanentWSFeatureFlags) {
832-
featureFlags = featureFlags.concat(featureFlags, user.featureFlags.permanentWSFeatureFlags);
832+
// Workspace-persisted feature flags are inherited from and controlled by workspace.config._featureFlags
833+
// Make sure we do not overide them, here.
834+
const nonWorkspacePersistentFeatureFlags = user.featureFlags.permanentWSFeatureFlags.filter(
835+
(ff) => !NamedWorkspaceFeatureFlag.isWorkspacePersisted(ff),
836+
);
837+
featureFlags = featureFlags.concat(featureFlags, nonWorkspacePersistentFeatureFlags);
833838
}
834839

835840
// if the user has feature preview enabled, we need to add the respective feature flags.

0 commit comments

Comments
 (0)