Skip to content

Commit 49e75cc

Browse files
committed
[server, dashboard] Remove enableDedicatedOnboardingFlow feature flag and replace is with getInstallationConfiguration.IsDedicatedInstallation
1 parent 471730d commit 49e75cc

File tree

19 files changed

+2006
-123
lines changed

19 files changed

+2006
-123
lines changed

components/dashboard/src/data/featureflag-query.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ const featureFlags = {
1515
// Default to true to enable on gitpod dedicated until ff support is added for dedicated
1616
orgGitAuthProviders: true,
1717
userGitAuthProviders: false,
18-
enableDedicatedOnboardingFlow: false,
1918
// Local SSH feature of VS Code Desktop Extension
2019
gitpod_desktop_use_local_ssh_proxy: false,
2120
enabledOrbitalDiscoveries: "",

components/dashboard/src/data/installation/default-workspace-image-query.ts

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,14 @@ export const useInstallationDefaultWorkspaceImageQuery = () => {
1717
},
1818
});
1919
};
20+
21+
export const useInstallationConfiguration = () => {
22+
return useQuery({
23+
queryKey: ["installation-configuration"],
24+
staleTime: 1000 * 60 * 10, // 10 minute
25+
queryFn: async () => {
26+
const response = await installationClient.getInstallationConfiguration({});
27+
return response.configuration;
28+
},
29+
});
30+
};

components/dashboard/src/dedicated-setup/use-needs-setup.ts

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -5,17 +5,18 @@
55
*/
66

77
import { useQuery } from "@tanstack/react-query";
8-
import { useFeatureFlag } from "../data/featureflag-query";
98
import { noPersistence } from "../data/setup";
109
import { installationClient } from "../service/public-api";
1110
import { GetOnboardingStateRequest } from "@gitpod/public-api/lib/gitpod/v1/installation_pb";
11+
import { useInstallationConfiguration } from "../data/installation/default-workspace-image-query";
1212

1313
/**
1414
* @description Returns a flage stating if the current installation still needs setup before it can be used. Also returns an isLoading indicator as the check is async
1515
*/
1616
export const useNeedsSetup = () => {
1717
const { data: onboardingState, isLoading } = useOnboardingState();
18-
const enableDedicatedOnboardingFlow = useFeatureFlag("enableDedicatedOnboardingFlow");
18+
const { data: installationConfig } = useInstallationConfiguration();
19+
const isDedicatedInstallation = !!installationConfig?.isDedicatedInstallation;
1920

2021
// This needs to only be true if we've loaded the onboarding state
2122
let needsSetup = !isLoading && onboardingState && onboardingState.completed !== true;
@@ -25,14 +26,14 @@ export const useNeedsSetup = () => {
2526
}
2627

2728
return {
28-
needsSetup: enableDedicatedOnboardingFlow && needsSetup,
29+
needsSetup: isDedicatedInstallation && needsSetup,
2930
// disabled queries stay in `isLoading` state, so checking feature flag here too
30-
isLoading: enableDedicatedOnboardingFlow && isLoading,
31+
isLoading: isDedicatedInstallation && isLoading,
3132
};
3233
};
3334

3435
const useOnboardingState = () => {
35-
const enableDedicatedOnboardingFlow = useFeatureFlag("enableDedicatedOnboardingFlow");
36+
const { data: installationConfig } = useInstallationConfiguration();
3637

3738
return useQuery(
3839
noPersistence(["onboarding-state"]),
@@ -42,7 +43,7 @@ const useOnboardingState = () => {
4243
},
4344
{
4445
// Only query if feature flag is enabled
45-
enabled: enableDedicatedOnboardingFlow,
46+
enabled: !!installationConfig?.isDedicatedInstallation,
4647
},
4748
);
4849
};

components/dashboard/src/dedicated-setup/use-show-dedicated-setup.ts

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@
55
*/
66

77
import { useQueryParams } from "../hooks/use-query-params";
8-
import { useFeatureFlag } from "../data/featureflag-query";
98
import { useCallback, useState } from "react";
109
import { isCurrentHostExcludedFromSetup, useNeedsSetup } from "./use-needs-setup";
10+
import { useInstallationConfiguration } from "../data/installation/default-workspace-image-query";
1111

1212
const FORCE_SETUP_PARAM = "dedicated-setup";
1313
const FORCE_SETUP_PARAM_VALUE = "force";
@@ -21,7 +21,8 @@ export const useShowDedicatedSetup = () => {
2121
// again in case onboarding state isn't updated right away
2222
const [inProgress, setInProgress] = useState(false);
2323

24-
const enableDedicatedOnboardingFlow = useFeatureFlag("enableDedicatedOnboardingFlow");
24+
const { data: installationConfig } = useInstallationConfiguration();
25+
const enableDedicatedOnboardingFlow = !!installationConfig?.isDedicatedInstallation;
2526
const params = useQueryParams();
2627

2728
const { needsSetup } = useNeedsSetup();

components/dashboard/src/menu/OrganizationSelector.tsx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@ import { useCurrentUser } from "../user-context";
1111
import { useCurrentOrg, useOrganizations } from "../data/organizations/orgs-query";
1212
import { useLocation } from "react-router";
1313
import { useOrgBillingMode } from "../data/billing-mode/org-billing-mode-query";
14-
import { useFeatureFlag } from "../data/featureflag-query";
1514
import { useIsOwner, useListOrganizationMembers, useHasRolePermission } from "../data/organizations/members-query";
1615
import { isOrganizationOwned } from "@gitpod/public-api-common/lib/user-utils";
1716
import { OrganizationRole } from "@gitpod/public-api/lib/gitpod/v1/organization_pb";
17+
import { useInstallationConfiguration } from "../data/installation/default-workspace-image-query";
1818

1919
export default function OrganizationSelector() {
2020
const user = useCurrentUser();
@@ -25,7 +25,8 @@ export default function OrganizationSelector() {
2525
const hasMemberPermission = useHasRolePermission(OrganizationRole.MEMBER);
2626
const { data: billingMode } = useOrgBillingMode();
2727
const getOrgURL = useGetOrgURL();
28-
const isDedicated = useFeatureFlag("enableDedicatedOnboardingFlow");
28+
const { data: installationConfig } = useInstallationConfiguration();
29+
const isDedicated = !!installationConfig?.isDedicatedInstallation;
2930

3031
// we should have an API to ask for permissions, until then we duplicate the logic here
3132
const canCreateOrgs = user && !isOrganizationOwned(user) && !isDedicated;

components/dashboard/src/service/json-rpc-installation-client.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ import {
2222
GetInstallationWorkspaceDefaultImageResponse,
2323
GetOnboardingStateRequest,
2424
GetOnboardingStateResponse,
25+
GetInstallationConfigurationRequest,
26+
GetInstallationConfigurationResponse,
2527
} from "@gitpod/public-api/lib/gitpod/v1/installation_pb";
2628
import { ApplicationError, ErrorCodes } from "@gitpod/gitpod-protocol/lib/messaging/error";
2729
import { getGitpodService } from "./service";
@@ -130,4 +132,14 @@ export class JsonRpcInstallationClient implements PromiseClient<typeof Installat
130132
onboardingState: converter.toOnboardingState(info),
131133
});
132134
}
135+
136+
async getInstallationConfiguration(
137+
request: Partial<GetInstallationConfigurationRequest>,
138+
_options?: CallOptions | undefined,
139+
): Promise<GetInstallationConfigurationResponse> {
140+
const config = await getGitpodService().server.getConfiguration();
141+
return new GetInstallationConfigurationResponse({
142+
configuration: converter.toInstallationConfiguration(config),
143+
});
144+
}
133145
}

components/public-api/gitpod/v1/installation.proto

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,9 @@ service InstallationService {
3131

3232
// GetOnboardingState returns the onboarding state of the installation.
3333
rpc GetOnboardingState(GetOnboardingStateRequest) returns (GetOnboardingStateResponse) {}
34+
35+
// GetInstallationConfiguration returns configuration of the installation.
36+
rpc GetInstallationConfiguration(GetInstallationConfigurationRequest) returns (GetInstallationConfigurationResponse) {}
3437
}
3538

3639
message GetOnboardingStateRequest {}
@@ -144,3 +147,11 @@ message BlockedEmailDomain {
144147

145148
bool negative = 3;
146149
}
150+
151+
message GetInstallationConfigurationRequest {}
152+
message GetInstallationConfigurationResponse {
153+
InstallationConfiguration configuration = 1;
154+
}
155+
message InstallationConfiguration {
156+
bool is_dedicated_installation = 1;
157+
}

0 commit comments

Comments
 (0)