Skip to content

Commit ca7d55f

Browse files
committed
chore: remove dynamic-parameters experiment
1 parent 3378b27 commit ca7d55f

File tree

16 files changed

+70
-136
lines changed

16 files changed

+70
-136
lines changed

coderd/coderd.go

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1153,9 +1153,6 @@ func New(options *Options) *API {
11531153
})
11541154

11551155
r.Group(func(r chi.Router) {
1156-
r.Use(
1157-
httpmw.RequireExperiment(api.Experiments, codersdk.ExperimentDynamicParameters),
1158-
)
11591156
r.Route("/dynamic-parameters", func(r chi.Router) {
11601157
r.Post("/evaluate", api.templateVersionDynamicParametersEvaluate)
11611158
r.Get("/", api.templateVersionDynamicParametersWebsocket)

coderd/parameters_test.go

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,7 @@ import (
2929
func TestDynamicParametersOwnerSSHPublicKey(t *testing.T) {
3030
t.Parallel()
3131

32-
cfg := coderdtest.DeploymentValues(t)
33-
cfg.Experiments = []string{string(codersdk.ExperimentDynamicParameters)}
34-
ownerClient := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true, DeploymentValues: cfg})
32+
ownerClient := coderdtest.New(t, &coderdtest.Options{IncludeProvisionerDaemon: true})
3533
owner := coderdtest.CreateFirstUser(t, ownerClient)
3634
templateAdmin, _ := coderdtest.CreateAnotherUser(t, ownerClient, owner.OrganizationID, rbac.RoleTemplateAdmin())
3735

@@ -354,14 +352,11 @@ type dynamicParamsTest struct {
354352
}
355353

356354
func setupDynamicParamsTest(t *testing.T, args setupDynamicParamsTestParams) dynamicParamsTest {
357-
cfg := coderdtest.DeploymentValues(t)
358-
cfg.Experiments = []string{string(codersdk.ExperimentDynamicParameters)}
359355
ownerClient, _, api := coderdtest.NewWithAPI(t, &coderdtest.Options{
360356
Database: args.db,
361357
Pubsub: args.ps,
362358
IncludeProvisionerDaemon: true,
363359
ProvisionerDaemonVersion: args.provisionerDaemonVersion,
364-
DeploymentValues: cfg,
365360
})
366361

367362
owner := coderdtest.CreateFirstUser(t, ownerClient)

coderd/workspacebuilds.go

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -384,20 +384,8 @@ func (api *API) postWorkspaceBuilds(rw http.ResponseWriter, r *http.Request) {
384384
builder = builder.State(createBuild.ProvisionerState)
385385
}
386386

387-
// Only defer to dynamic parameters if the experiment is enabled.
388-
if api.Experiments.Enabled(codersdk.ExperimentDynamicParameters) {
389-
if createBuild.EnableDynamicParameters != nil {
390-
// Explicit opt-in
391-
builder = builder.DynamicParameters(*createBuild.EnableDynamicParameters)
392-
}
393-
} else {
394-
if createBuild.EnableDynamicParameters != nil {
395-
api.Logger.Warn(ctx, "ignoring dynamic parameter field sent by request, the experiment is not enabled",
396-
slog.F("field", *createBuild.EnableDynamicParameters),
397-
slog.F("user", apiKey.UserID.String()),
398-
slog.F("transition", string(createBuild.Transition)),
399-
)
400-
}
387+
if createBuild.EnableDynamicParameters != nil {
388+
builder = builder.DynamicParameters(*createBuild.EnableDynamicParameters)
401389
}
402390

403391
workspaceBuild, provisionerJob, provisionerDaemons, err = builder.Build(

coderd/workspaces.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -717,7 +717,7 @@ func createWorkspace(
717717
builder = builder.MarkPrebuiltWorkspaceClaim()
718718
}
719719

720-
if req.EnableDynamicParameters && api.Experiments.Enabled(codersdk.ExperimentDynamicParameters) {
720+
if req.EnableDynamicParameters {
721721
builder = builder.DynamicParameters(req.EnableDynamicParameters)
722722
}
723723

coderd/wsbuilder/wsbuilder.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1042,11 +1042,6 @@ func (b *Builder) checkRunningBuild() error {
10421042
}
10431043

10441044
func (b *Builder) usingDynamicParameters() bool {
1045-
if !b.experiments.Enabled(codersdk.ExperimentDynamicParameters) {
1046-
// Experiment required
1047-
return false
1048-
}
1049-
10501045
vals, err := b.getTemplateTerraformValues()
10511046
if err != nil {
10521047
return false

codersdk/deployment.go

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3356,7 +3356,6 @@ const (
33563356
ExperimentNotifications Experiment = "notifications" // Sends notifications via SMTP and webhooks following certain events.
33573357
ExperimentWorkspaceUsage Experiment = "workspace-usage" // Enables the new workspace usage tracking.
33583358
ExperimentWebPush Experiment = "web-push" // Enables web push notifications through the browser.
3359-
ExperimentDynamicParameters Experiment = "dynamic-parameters" // Enables dynamic parameters when creating a workspace.
33603359
ExperimentWorkspacePrebuilds Experiment = "workspace-prebuilds" // Enables the new workspace prebuilds feature.
33613360
ExperimentAgenticChat Experiment = "agentic-chat" // Enables the new agentic AI chat feature.
33623361
ExperimentAITasks Experiment = "ai-tasks" // Enables the new AI tasks feature.

enterprise/coderd/parameters_test.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,16 +21,14 @@ import (
2121
func TestDynamicParametersOwnerGroups(t *testing.T) {
2222
t.Parallel()
2323

24-
cfg := coderdtest.DeploymentValues(t)
25-
cfg.Experiments = []string{string(codersdk.ExperimentDynamicParameters)}
2624
ownerClient, owner := coderdenttest.New(t,
2725
&coderdenttest.Options{
2826
LicenseOptions: &coderdenttest.LicenseOptions{
2927
Features: license.Features{
3028
codersdk.FeatureTemplateRBAC: 1,
3129
},
3230
},
33-
Options: &coderdtest.Options{IncludeProvisionerDaemon: true, DeploymentValues: cfg},
31+
Options: &coderdtest.Options{IncludeProvisionerDaemon: true},
3432
},
3533
)
3634
templateAdmin, templateAdminUser := coderdtest.CreateAnotherUser(t, ownerClient, owner.OrganizationID, rbac.RoleTemplateAdmin())

enterprise/coderd/workspaces_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1698,7 +1698,7 @@ func TestWorkspaceTemplateParamsChange(t *testing.T) {
16981698

16991699
logger := slogtest.Make(t, &slogtest.Options{IgnoreErrors: false})
17001700
dv := coderdtest.DeploymentValues(t)
1701-
dv.Experiments = []string{string(codersdk.ExperimentDynamicParameters)}
1701+
17021702
client, owner := coderdenttest.New(t, &coderdenttest.Options{
17031703
Options: &coderdtest.Options{
17041704
Logger: &logger,

site/src/modules/workspaces/WorkspaceMoreActions/WorkspaceMoreActions.tsx

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -43,14 +43,12 @@ export const WorkspaceMoreActions: FC<WorkspaceMoreActionsProps> = ({
4343
disabled,
4444
}) => {
4545
const queryClient = useQueryClient();
46-
const { experiments } = useDashboard();
47-
const isDynamicParametersEnabled = experiments.includes("dynamic-parameters");
4846

4947
const optOutQuery = useDynamicParametersOptOut({
5048
templateId: workspace.template_id,
5149
templateUsesClassicParameters:
5250
workspace.template_use_classic_parameter_flow,
53-
enabled: isDynamicParametersEnabled,
51+
enabled: true,
5452
});
5553

5654
// Permissions
@@ -154,7 +152,7 @@ export const WorkspaceMoreActions: FC<WorkspaceMoreActionsProps> = ({
154152
onClose={() => setIsDownloadDialogOpen(false)}
155153
/>
156154

157-
{!isDynamicParametersEnabled || optOutQuery.data?.optedOut ? (
155+
{optOutQuery.data?.optedOut ? (
158156
<UpdateBuildParametersDialog
159157
missedParameters={
160158
changeVersionMutation.error instanceof MissingBuildParameters

site/src/modules/workspaces/WorkspaceUpdateDialogs.tsx

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -56,14 +56,11 @@ export const useWorkspaceUpdate = ({
5656
setIsConfirmingUpdate(true);
5757
};
5858

59-
const { experiments } = useDashboard();
60-
const isDynamicParametersEnabled = experiments.includes("dynamic-parameters");
61-
6259
const optOutQuery = useDynamicParametersOptOut({
6360
templateId: workspace.template_id,
6461
templateUsesClassicParameters:
6562
workspace.template_use_classic_parameter_flow,
66-
enabled: isDynamicParametersEnabled,
63+
enabled: true,
6764
});
6865

6966
const confirmUpdate = (buildParameters: WorkspaceBuildParameter[] = []) => {
@@ -164,13 +161,11 @@ const MissingBuildParametersDialog: FC<MissingBuildParametersDialogProps> = ({
164161
error,
165162
...dialogProps
166163
}) => {
167-
const { experiments } = useDashboard();
168-
const isDynamicParametersEnabled = experiments.includes("dynamic-parameters");
169164
const optOutQuery = useDynamicParametersOptOut({
170165
templateId: workspace.template_id,
171166
templateUsesClassicParameters:
172167
workspace.template_use_classic_parameter_flow,
173-
enabled: isDynamicParametersEnabled,
168+
enabled: true,
174169
});
175170

176171
const missedParameters =
@@ -182,13 +177,11 @@ const MissingBuildParametersDialog: FC<MissingBuildParametersDialogProps> = ({
182177
if (optOutQuery.isError) {
183178
return <ErrorAlert error={optOutQuery.error} />;
184179
}
185-
if (isDynamicParametersEnabled && !optOutQuery.data) {
180+
if (!optOutQuery.data) {
186181
return <Loader />;
187182
}
188183

189-
// If dynamic parameters experiment is not enabled, or if opted out, use classic dialog
190-
const shouldUseClassicDialog =
191-
!isDynamicParametersEnabled || optOutQuery.data?.optedOut;
184+
const shouldUseClassicDialog = optOutQuery.data?.optedOut;
192185

193186
return shouldUseClassicDialog ? (
194187
<UpdateBuildParametersDialog
Lines changed: 30 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import { templateByName } from "api/queries/templates";
22
import { ErrorAlert } from "components/Alert/ErrorAlert";
33
import { Loader } from "components/Loader/Loader";
4-
import { useDashboard } from "modules/dashboard/useDashboard";
54
import {
65
optOutKey,
76
useDynamicParametersOptOut,
@@ -14,15 +13,9 @@ import CreateWorkspacePageExperimental from "./CreateWorkspacePageExperimental";
1413
import { ExperimentalFormContext } from "./ExperimentalFormContext";
1514

1615
const CreateWorkspaceExperimentRouter: FC = () => {
17-
const { experiments } = useDashboard();
18-
const isDynamicParametersEnabled = experiments.includes("dynamic-parameters");
19-
2016
const { organization: organizationName = "default", template: templateName } =
2117
useParams() as { organization?: string; template: string };
22-
const templateQuery = useQuery({
23-
...templateByName(organizationName, templateName),
24-
enabled: isDynamicParametersEnabled,
25-
});
18+
const templateQuery = useQuery(templateByName(organizationName, templateName));
2619

2720
const optOutQuery = useDynamicParametersOptOut({
2821
templateId: templateQuery.data?.id,
@@ -31,40 +24,37 @@ const CreateWorkspaceExperimentRouter: FC = () => {
3124
enabled: !!templateQuery.data,
3225
});
3326

34-
if (isDynamicParametersEnabled) {
35-
if (templateQuery.isError) {
36-
return <ErrorAlert error={templateQuery.error} />;
37-
}
38-
if (optOutQuery.isError) {
39-
return <ErrorAlert error={optOutQuery.error} />;
40-
}
41-
if (!optOutQuery.data) {
42-
return <Loader />;
43-
}
44-
45-
const toggleOptedOut = () => {
46-
const key = optOutKey(optOutQuery.data?.templateId ?? "");
47-
const storedValue = localStorage.getItem(key);
48-
49-
const current = storedValue
50-
? storedValue === "true"
51-
: Boolean(templateQuery.data?.use_classic_parameter_flow);
52-
53-
localStorage.setItem(key, (!current).toString());
54-
optOutQuery.refetch();
55-
};
56-
return (
57-
<ExperimentalFormContext.Provider value={{ toggleOptedOut }}>
58-
{optOutQuery.data.optedOut ? (
59-
<CreateWorkspacePage />
60-
) : (
61-
<CreateWorkspacePageExperimental />
62-
)}
63-
</ExperimentalFormContext.Provider>
64-
);
27+
if (templateQuery.isError) {
28+
return <ErrorAlert error={templateQuery.error} />;
29+
}
30+
if (optOutQuery.isError) {
31+
return <ErrorAlert error={optOutQuery.error} />;
32+
}
33+
if (!optOutQuery.data) {
34+
return <Loader />;
6535
}
6636

67-
return <CreateWorkspacePage />;
37+
const toggleOptedOut = () => {
38+
const key = optOutKey(optOutQuery.data?.templateId ?? "");
39+
const storedValue = localStorage.getItem(key);
40+
41+
const current = storedValue
42+
? storedValue === "true"
43+
: Boolean(templateQuery.data?.use_classic_parameter_flow);
44+
45+
localStorage.setItem(key, (!current).toString());
46+
optOutQuery.refetch();
47+
};
48+
49+
return (
50+
<ExperimentalFormContext.Provider value={{ toggleOptedOut }}>
51+
{optOutQuery.data.optedOut ? (
52+
<CreateWorkspacePage />
53+
) : (
54+
<CreateWorkspacePageExperimental />
55+
)}
56+
</ExperimentalFormContext.Provider>
57+
);
6858
};
6959

7060
export default CreateWorkspaceExperimentRouter;

site/src/pages/TemplateSettingsPage/TemplateGeneralSettingsPage/TemplateSettingsForm.tsx

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@ export interface TemplateSettingsForm {
6363
accessControlEnabled: boolean;
6464
advancedSchedulingEnabled: boolean;
6565
portSharingControlsEnabled: boolean;
66-
isDynamicParametersEnabled: boolean;
6766
}
6867

6968
export const TemplateSettingsForm: FC<TemplateSettingsForm> = ({
@@ -76,7 +75,6 @@ export const TemplateSettingsForm: FC<TemplateSettingsForm> = ({
7675
accessControlEnabled,
7776
advancedSchedulingEnabled,
7877
portSharingControlsEnabled,
79-
isDynamicParametersEnabled,
8078
}) => {
8179
const form = useFormik<UpdateTemplateMeta>({
8280
initialValues: {
@@ -226,7 +224,6 @@ export const TemplateSettingsForm: FC<TemplateSettingsForm> = ({
226224
</StackLabel>
227225
}
228226
/>
229-
{isDynamicParametersEnabled && (
230227
<FormControlLabel
231228
control={
232229
<Checkbox
@@ -256,7 +253,6 @@ export const TemplateSettingsForm: FC<TemplateSettingsForm> = ({
256253
</StackLabel>
257254
}
258255
/>
259-
)}
260256
</FormFields>
261257
</FormSection>
262258

site/src/pages/TemplateSettingsPage/TemplateGeneralSettingsPage/TemplateSettingsPage.tsx

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@ import { useTemplateSettings } from "../TemplateSettingsLayout";
1414
import { TemplateSettingsPageView } from "./TemplateSettingsPageView";
1515

1616
const TemplateSettingsPage: FC = () => {
17-
const { experiments } = useDashboard();
18-
const isDynamicParametersEnabled = experiments.includes("dynamic-parameters");
1917
const { template: templateName } = useParams() as { template: string };
2018
const navigate = useNavigate();
2119
const getLink = useLinks();
@@ -81,7 +79,6 @@ const TemplateSettingsPage: FC = () => {
8179
accessControlEnabled={accessControlEnabled}
8280
advancedSchedulingEnabled={advancedSchedulingEnabled}
8381
sharedPortControlsEnabled={sharedPortControlsEnabled}
84-
isDynamicParametersEnabled={isDynamicParametersEnabled}
8582
/>
8683
</>
8784
);

site/src/pages/TemplateSettingsPage/TemplateGeneralSettingsPage/TemplateSettingsPageView.tsx

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ interface TemplateSettingsPageViewProps {
1515
accessControlEnabled: boolean;
1616
advancedSchedulingEnabled: boolean;
1717
sharedPortControlsEnabled: boolean;
18-
isDynamicParametersEnabled: boolean;
1918
}
2019

2120
export const TemplateSettingsPageView: FC<TemplateSettingsPageViewProps> = ({
@@ -28,7 +27,6 @@ export const TemplateSettingsPageView: FC<TemplateSettingsPageViewProps> = ({
2827
accessControlEnabled,
2928
advancedSchedulingEnabled,
3029
sharedPortControlsEnabled,
31-
isDynamicParametersEnabled,
3230
}) => {
3331
return (
3432
<>
@@ -46,7 +44,6 @@ export const TemplateSettingsPageView: FC<TemplateSettingsPageViewProps> = ({
4644
accessControlEnabled={accessControlEnabled}
4745
advancedSchedulingEnabled={advancedSchedulingEnabled}
4846
portSharingControlsEnabled={sharedPortControlsEnabled}
49-
isDynamicParametersEnabled={isDynamicParametersEnabled}
5047
/>
5148
</>
5249
);

0 commit comments

Comments
 (0)