Skip to content

Commit f126931

Browse files
jaaydenhblink-so[bot]Emyrk
authored
chore: remove dynamic-parameters experiment (#18290)
Co-authored-by: blink-so[bot] <211532188+blink-so[bot]@users.noreply.github.com> Co-authored-by: jaaydenh <1858163+jaaydenh@users.noreply.github.com> Co-authored-by: Steven Masley <stevenmasley@gmail.com>
1 parent 70723d3 commit f126931

30 files changed

+144
-198
lines changed

cli/testdata/coder_list_--output_json.golden

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
"template_allow_user_cancel_workspace_jobs": false,
1616
"template_active_version_id": "============[version ID]============",
1717
"template_require_active_version": false,
18-
"template_use_classic_parameter_flow": false,
18+
"template_use_classic_parameter_flow": true,
1919
"latest_build": {
2020
"id": "========[workspace build ID]========",
2121
"created_at": "====[timestamp]=====",

coderd/apidoc/docs.go

Lines changed: 0 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/apidoc/swagger.json

Lines changed: 0 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

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/database/dbmem/dbmem.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9345,6 +9345,7 @@ func (q *FakeQuerier) InsertTemplate(_ context.Context, arg database.InsertTempl
93459345
AllowUserAutostart: true,
93469346
AllowUserAutostop: true,
93479347
MaxPortSharingLevel: arg.MaxPortSharingLevel,
9348+
UseClassicParameterFlow: true,
93489349
}
93499350
q.templates = append(q.templates, template)
93509351
return nil

coderd/database/dump.sql

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
ALTER TABLE templates ALTER COLUMN use_classic_parameter_flow SET DEFAULT false;
2+
3+
UPDATE templates SET use_classic_parameter_flow = false
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
-- All templates should opt out of dynamic parameters by default.
2+
ALTER TABLE templates ALTER COLUMN use_classic_parameter_flow SET DEFAULT true;
3+
4+
UPDATE templates SET use_classic_parameter_flow = true

coderd/parameters_test.go

Lines changed: 7 additions & 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)
@@ -384,6 +379,12 @@ func setupDynamicParamsTest(t *testing.T, args setupDynamicParamsTestParams) dyn
384379
coderdtest.AwaitTemplateVersionJobCompleted(t, templateAdmin, version.ID)
385380
tpl := coderdtest.CreateTemplate(t, templateAdmin, owner.OrganizationID, version.ID)
386381

382+
var err error
383+
tpl, err = templateAdmin.UpdateTemplateMeta(t.Context(), tpl.ID, codersdk.UpdateTemplateMeta{
384+
UseClassicParameterFlow: ptr.Ref(false),
385+
})
386+
require.NoError(t, err)
387+
387388
ctx := testutil.Context(t, testutil.WaitShort)
388389
stream, err := templateAdmin.TemplateVersionDynamicParameters(ctx, version.ID)
389390
if args.expectWebsocketError {

coderd/templates_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1548,7 +1548,7 @@ func TestPatchTemplateMeta(t *testing.T) {
15481548
user := coderdtest.CreateFirstUser(t, client)
15491549
version := coderdtest.CreateTemplateVersion(t, client, user.OrganizationID, nil)
15501550
template := coderdtest.CreateTemplate(t, client, user.OrganizationID, version.ID)
1551-
require.False(t, template.UseClassicParameterFlow, "default is false")
1551+
require.True(t, template.UseClassicParameterFlow, "default is true")
15521552

15531553
bTrue := true
15541554
bFalse := false

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: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1042,8 +1042,15 @@ func (b *Builder) checkRunningBuild() error {
10421042
}
10431043

10441044
func (b *Builder) usingDynamicParameters() bool {
1045-
if !b.experiments.Enabled(codersdk.ExperimentDynamicParameters) {
1046-
// Experiment required
1045+
if b.dynamicParametersEnabled != nil {
1046+
return *b.dynamicParametersEnabled
1047+
}
1048+
1049+
tpl, err := b.getTemplate()
1050+
if err != nil {
1051+
return false // Let another part of the code get this error
1052+
}
1053+
if tpl.UseClassicParameterFlow {
10471054
return false
10481055
}
10491056

@@ -1056,15 +1063,7 @@ func (b *Builder) usingDynamicParameters() bool {
10561063
return false
10571064
}
10581065

1059-
if b.dynamicParametersEnabled != nil {
1060-
return *b.dynamicParametersEnabled
1061-
}
1062-
1063-
tpl, err := b.getTemplate()
1064-
if err != nil {
1065-
return false // Let another part of the code get this error
1066-
}
1067-
return !tpl.UseClassicParameterFlow
1066+
return true
10681067
}
10691068

10701069
func ProvisionerVersionSupportsDynamicParameters(version string) bool {

coderd/wsbuilder/wsbuilder_test.go

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -894,10 +894,11 @@ func withTemplate(mTx *dbmock.MockStore) {
894894
mTx.EXPECT().GetTemplateByID(gomock.Any(), templateID).
895895
Times(1).
896896
Return(database.Template{
897-
ID: templateID,
898-
OrganizationID: orgID,
899-
Provisioner: database.ProvisionerTypeTerraform,
900-
ActiveVersionID: activeVersionID,
897+
ID: templateID,
898+
OrganizationID: orgID,
899+
Provisioner: database.ProvisionerTypeTerraform,
900+
ActiveVersionID: activeVersionID,
901+
UseClassicParameterFlow: true,
901902
}, nil)
902903
}
903904

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.

docs/reference/api/schemas.md

Lines changed: 0 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

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: 7 additions & 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,
@@ -1736,6 +1736,12 @@ func TestWorkspaceTemplateParamsChange(t *testing.T) {
17361736
require.NoError(t, err, "failed to create template version")
17371737
coderdtest.AwaitTemplateVersionJobCompleted(t, templateAdmin, tv.ID)
17381738
tpl := coderdtest.CreateTemplate(t, templateAdmin, owner.OrganizationID, tv.ID)
1739+
1740+
// Set to dynamic params
1741+
tpl, err = client.UpdateTemplateMeta(ctx, tpl.ID, codersdk.UpdateTemplateMeta{
1742+
UseClassicParameterFlow: ptr.Ref(false),
1743+
})
1744+
require.NoError(t, err, "failed to update template meta")
17391745
require.False(t, tpl.UseClassicParameterFlow, "template to use dynamic parameters")
17401746

17411747
// When: we create a workspace build using the above template but with

site/src/api/typesGenerated.ts

Lines changed: 0 additions & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

site/src/modules/workspaces/DynamicParameter/useDynamicParametersOptOut.ts

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,13 +25,8 @@ export const useDynamicParametersOptOut = ({
2525
const localStorageKey = optOutKey(templateId);
2626
const storedOptOutString = localStorage.getItem(localStorageKey);
2727

28-
let optedOut: boolean;
29-
30-
if (storedOptOutString !== null) {
31-
optedOut = storedOptOutString === "true";
32-
} else {
33-
optedOut = Boolean(templateUsesClassicParameters);
34-
}
28+
// Since the dynamic-parameters experiment was removed, always use classic parameters
29+
const optedOut = true;
3530

3631
return {
3732
templateId,

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

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import {
2121
SettingsIcon,
2222
TrashIcon,
2323
} from "lucide-react";
24-
import { useDashboard } from "modules/dashboard/useDashboard";
2524
import { useDynamicParametersOptOut } from "modules/workspaces/DynamicParameter/useDynamicParametersOptOut";
2625
import { type FC, useEffect, useState } from "react";
2726
import { useMutation, useQuery, useQueryClient } from "react-query";
@@ -43,14 +42,12 @@ export const WorkspaceMoreActions: FC<WorkspaceMoreActionsProps> = ({
4342
disabled,
4443
}) => {
4544
const queryClient = useQueryClient();
46-
const { experiments } = useDashboard();
47-
const isDynamicParametersEnabled = experiments.includes("dynamic-parameters");
4845

4946
const optOutQuery = useDynamicParametersOptOut({
5047
templateId: workspace.template_id,
5148
templateUsesClassicParameters:
5249
workspace.template_use_classic_parameter_flow,
53-
enabled: isDynamicParametersEnabled,
50+
enabled: true,
5451
});
5552

5653
// Permissions
@@ -154,7 +151,7 @@ export const WorkspaceMoreActions: FC<WorkspaceMoreActionsProps> = ({
154151
onClose={() => setIsDownloadDialogOpen(false)}
155152
/>
156153

157-
{!isDynamicParametersEnabled || optOutQuery.data?.optedOut ? (
154+
{optOutQuery.data?.optedOut ? (
158155
<UpdateBuildParametersDialog
159156
missedParameters={
160157
changeVersionMutation.error instanceof MissingBuildParameters

site/src/modules/workspaces/WorkspaceUpdateDialogs.tsx

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import { ErrorAlert } from "components/Alert/ErrorAlert";
1010
import { ConfirmDialog } from "components/Dialogs/ConfirmDialog/ConfirmDialog";
1111
import { Loader } from "components/Loader/Loader";
1212
import { MemoizedInlineMarkdown } from "components/Markdown/Markdown";
13-
import { useDashboard } from "modules/dashboard/useDashboard";
1413
import { useDynamicParametersOptOut } from "modules/workspaces/DynamicParameter/useDynamicParametersOptOut";
1514
import { UpdateBuildParametersDialog } from "modules/workspaces/WorkspaceMoreActions/UpdateBuildParametersDialog";
1615
import { UpdateBuildParametersDialogExperimental } from "modules/workspaces/WorkspaceMoreActions/UpdateBuildParametersDialogExperimental";
@@ -56,14 +55,11 @@ export const useWorkspaceUpdate = ({
5655
setIsConfirmingUpdate(true);
5756
};
5857

59-
const { experiments } = useDashboard();
60-
const isDynamicParametersEnabled = experiments.includes("dynamic-parameters");
61-
6258
const optOutQuery = useDynamicParametersOptOut({
6359
templateId: workspace.template_id,
6460
templateUsesClassicParameters:
6561
workspace.template_use_classic_parameter_flow,
66-
enabled: isDynamicParametersEnabled,
62+
enabled: true,
6763
});
6864

6965
const confirmUpdate = (buildParameters: WorkspaceBuildParameter[] = []) => {
@@ -164,13 +160,11 @@ const MissingBuildParametersDialog: FC<MissingBuildParametersDialogProps> = ({
164160
error,
165161
...dialogProps
166162
}) => {
167-
const { experiments } = useDashboard();
168-
const isDynamicParametersEnabled = experiments.includes("dynamic-parameters");
169163
const optOutQuery = useDynamicParametersOptOut({
170164
templateId: workspace.template_id,
171165
templateUsesClassicParameters:
172166
workspace.template_use_classic_parameter_flow,
173-
enabled: isDynamicParametersEnabled,
167+
enabled: true,
174168
});
175169

176170
const missedParameters =
@@ -182,13 +176,11 @@ const MissingBuildParametersDialog: FC<MissingBuildParametersDialogProps> = ({
182176
if (optOutQuery.isError) {
183177
return <ErrorAlert error={optOutQuery.error} />;
184178
}
185-
if (isDynamicParametersEnabled && !optOutQuery.data) {
179+
if (!optOutQuery.data) {
186180
return <Loader />;
187181
}
188182

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

193185
return shouldUseClassicDialog ? (
194186
<UpdateBuildParametersDialog

0 commit comments

Comments
 (0)