diff --git a/cli/templatecreate.go b/cli/templatecreate.go index 3d52b236fd299..c23f34dca5af5 100644 --- a/cli/templatecreate.go +++ b/cli/templatecreate.go @@ -49,18 +49,6 @@ func (r *RootCmd) templateCreate() *clibase.Cmd { isTemplateSchedulingOptionsSet := failureTTL != 0 || dormancyThreshold != 0 || dormancyAutoDeletion != 0 || maxTTL != 0 if isTemplateSchedulingOptionsSet || requireActiveVersion { - if failureTTL != 0 || dormancyThreshold != 0 || dormancyAutoDeletion != 0 { - // This call can be removed when workspace_actions is no longer experimental - experiments, exErr := client.Experiments(inv.Context()) - if exErr != nil { - return xerrors.Errorf("get experiments: %w", exErr) - } - - if !experiments.Enabled(codersdk.ExperimentWorkspaceActions) { - return xerrors.Errorf("--failure-ttl, --dormancy-threshold, and --dormancy-auto-deletion are experimental features. Use the workspace_actions CODER_EXPERIMENTS flag to set these configuration values.") - } - } - entitlements, err := client.Entitlements(inv.Context()) if cerr, ok := codersdk.AsError(err); ok && cerr.StatusCode() == http.StatusNotFound { return xerrors.Errorf("your deployment appears to be an AGPL deployment, so you cannot set enterprise-only flags") diff --git a/cli/templateedit.go b/cli/templateedit.go index 099f31027ac8a..8c5ace25c5855 100644 --- a/cli/templateedit.go +++ b/cli/templateedit.go @@ -47,18 +47,6 @@ func (r *RootCmd) templateEdit() *clibase.Cmd { ), Short: "Edit the metadata of a template by name.", Handler: func(inv *clibase.Invocation) error { - // This clause can be removed when workspace_actions is no longer experimental - if failureTTL != 0 || dormancyThreshold != 0 || dormancyAutoDeletion != 0 { - experiments, exErr := client.Experiments(inv.Context()) - if exErr != nil { - return xerrors.Errorf("get experiments: %w", exErr) - } - - if !experiments.Enabled(codersdk.ExperimentWorkspaceActions) { - return xerrors.Errorf("--failure-ttl, --dormancy-threshold, and --dormancy-auto-deletion are experimental features. Use the workspace_actions CODER_EXPERIMENTS flag to set these configuration values.") - } - } - unsetAutostopRequirementDaysOfWeek := len(autostopRequirementDaysOfWeek) == 1 && autostopRequirementDaysOfWeek[0] == "none" requiresScheduling := (len(autostopRequirementDaysOfWeek) > 0 && !unsetAutostopRequirementDaysOfWeek) || autostopRequirementWeeks > 0 || diff --git a/coderd/apidoc/docs.go b/coderd/apidoc/docs.go index 100607bf662fb..b3f90cfa06b09 100644 --- a/coderd/apidoc/docs.go +++ b/coderd/apidoc/docs.go @@ -9108,11 +9108,9 @@ const docTemplate = `{ "codersdk.Experiment": { "type": "string", "enum": [ - "workspace_actions", "deployment_health_page" ], "x-enum-varnames": [ - "ExperimentWorkspaceActions", "ExperimentDeploymentHealthPage" ] }, diff --git a/coderd/apidoc/swagger.json b/coderd/apidoc/swagger.json index ad44650928537..d517185ec2218 100644 --- a/coderd/apidoc/swagger.json +++ b/coderd/apidoc/swagger.json @@ -8153,11 +8153,8 @@ }, "codersdk.Experiment": { "type": "string", - "enum": ["workspace_actions", "deployment_health_page"], - "x-enum-varnames": [ - "ExperimentWorkspaceActions", - "ExperimentDeploymentHealthPage" - ] + "enum": ["deployment_health_page"], + "x-enum-varnames": ["ExperimentDeploymentHealthPage"] }, "codersdk.ExternalAuth": { "type": "object", diff --git a/coderd/database/models.go b/coderd/database/models.go index e8c8ae2c31e50..cf9d8caaaea48 100644 --- a/coderd/database/models.go +++ b/coderd/database/models.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.24.0 +// sqlc v1.25.0 package database diff --git a/coderd/database/querier.go b/coderd/database/querier.go index 3d2631c49f65f..e32c106787a13 100644 --- a/coderd/database/querier.go +++ b/coderd/database/querier.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.24.0 +// sqlc v1.25.0 package database diff --git a/coderd/database/queries.sql.go b/coderd/database/queries.sql.go index 81bbe52386cf9..f9287915d5438 100644 --- a/coderd/database/queries.sql.go +++ b/coderd/database/queries.sql.go @@ -1,6 +1,6 @@ // Code generated by sqlc. DO NOT EDIT. // versions: -// sqlc v1.24.0 +// sqlc v1.25.0 package database diff --git a/codersdk/deployment.go b/codersdk/deployment.go index ce80e32622167..2f4da0675c120 100644 --- a/codersdk/deployment.go +++ b/codersdk/deployment.go @@ -2077,9 +2077,6 @@ func (c *Client) BuildInfo(ctx context.Context) (BuildInfoResponse, error) { type Experiment string const ( - // https://github.com/coder/coder/milestone/19 - ExperimentWorkspaceActions Experiment = "workspace_actions" - // Deployment health page ExperimentDeploymentHealthPage Experiment = "deployment_health_page" diff --git a/docs/api/general.md b/docs/api/general.md index f82c4aaeb3a63..2ca0a6c5d9873 100644 --- a/docs/api/general.md +++ b/docs/api/general.md @@ -563,7 +563,7 @@ curl -X GET http://coder-server:8080/api/v2/experiments \ > 200 Response ```json -["workspace_actions"] +["deployment_health_page"] ``` ### Responses @@ -600,7 +600,7 @@ curl -X GET http://coder-server:8080/api/v2/experiments/available \ > 200 Response ```json -["workspace_actions"] +["deployment_health_page"] ``` ### Responses diff --git a/docs/api/schemas.md b/docs/api/schemas.md index e63452bd15134..a93f5cfc1d9ba 100644 --- a/docs/api/schemas.md +++ b/docs/api/schemas.md @@ -2869,7 +2869,7 @@ AuthorizationObject can represent a "set" of objects, such as: all workspaces in ## codersdk.Experiment ```json -"workspace_actions" +"deployment_health_page" ``` ### Properties @@ -2878,7 +2878,6 @@ AuthorizationObject can represent a "set" of objects, such as: all workspaces in | Value | | ------------------------ | -| `workspace_actions` | | `deployment_health_page` | ## codersdk.ExternalAuth diff --git a/enterprise/cli/templatecreate_test.go b/enterprise/cli/templatecreate_test.go index 9499810b7df3a..6803ad394033e 100644 --- a/enterprise/cli/templatecreate_test.go +++ b/enterprise/cli/templatecreate_test.go @@ -62,11 +62,6 @@ func TestTemplateCreate(t *testing.T) { t.Run("WorkspaceCleanup", func(t *testing.T) { t.Parallel() - dv := coderdtest.DeploymentValues(t) - dv.Experiments = []string{ - string(codersdk.ExperimentWorkspaceActions), - } - client, user := coderdenttest.New(t, &coderdenttest.Options{ LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ @@ -74,7 +69,6 @@ func TestTemplateCreate(t *testing.T) { }, }, Options: &coderdtest.Options{ - DeploymentValues: dv, IncludeProvisionerDaemon: true, }, }) diff --git a/enterprise/cli/templateedit_test.go b/enterprise/cli/templateedit_test.go index 36b17e23d2119..75417196a6b8f 100644 --- a/enterprise/cli/templateedit_test.go +++ b/enterprise/cli/templateedit_test.go @@ -89,11 +89,6 @@ func TestTemplateEdit(t *testing.T) { t.Run("WorkspaceCleanup", func(t *testing.T) { t.Parallel() - dv := coderdtest.DeploymentValues(t) - dv.Experiments = []string{ - string(codersdk.ExperimentWorkspaceActions), - } - ownerClient, owner := coderdenttest.New(t, &coderdenttest.Options{ LicenseOptions: &coderdenttest.LicenseOptions{ Features: license.Features{ @@ -101,7 +96,6 @@ func TestTemplateEdit(t *testing.T) { }, }, Options: &coderdtest.Options{ - DeploymentValues: dv, IncludeProvisionerDaemon: true, }, }) diff --git a/site/src/api/typesGenerated.ts b/site/src/api/typesGenerated.ts index da9e0c733ee73..be677e07d58d7 100644 --- a/site/src/api/typesGenerated.ts +++ b/site/src/api/typesGenerated.ts @@ -1813,11 +1813,8 @@ export const Entitlements: Entitlement[] = [ ]; // From codersdk/deployment.go -export type Experiment = "deployment_health_page" | "workspace_actions"; -export const Experiments: Experiment[] = [ - "deployment_health_page", - "workspace_actions", -]; +export type Experiment = "deployment_health_page"; +export const Experiments: Experiment[] = ["deployment_health_page"]; // From codersdk/deployment.go export type FeatureName = diff --git a/site/src/components/Dashboard/DashboardProvider.tsx b/site/src/components/Dashboard/DashboardProvider.tsx index ae05ff0ae7447..7fcefb173eccf 100644 --- a/site/src/components/Dashboard/DashboardProvider.tsx +++ b/site/src/components/Dashboard/DashboardProvider.tsx @@ -113,11 +113,6 @@ export const useDashboard = (): DashboardProviderValue => { }; export const useIsWorkspaceActionsEnabled = (): boolean => { - const { entitlements, experiments } = useDashboard(); - const allowAdvancedScheduling = - entitlements.features["advanced_template_scheduling"].enabled; - // This check can be removed when https://github.com/coder/coder/milestone/19 - // is merged up - const allowWorkspaceActions = experiments.includes("workspace_actions"); - return allowWorkspaceActions && allowAdvancedScheduling; + const { entitlements } = useDashboard(); + return entitlements.features["advanced_template_scheduling"].enabled; }; diff --git a/site/src/components/WorkspaceDeletion/DormantDeletionText.tsx b/site/src/components/WorkspaceDeletion/DormantDeletionText.tsx index f6b1d393bb7f5..924fc59cb47d9 100644 --- a/site/src/components/WorkspaceDeletion/DormantDeletionText.tsx +++ b/site/src/components/WorkspaceDeletion/DormantDeletionText.tsx @@ -10,20 +10,13 @@ interface DormantDeletionTextProps { export const DormantDeletionText: FC = ({ workspace, }) => { - const { entitlements, experiments } = useDashboard(); + const { entitlements } = useDashboard(); const allowAdvancedScheduling = entitlements.features["advanced_template_scheduling"].enabled; // This check can be removed when https://github.com/coder/coder/milestone/19 // is merged up - const allowWorkspaceActions = experiments.includes("workspace_actions"); - if ( - !displayDormantDeletion( - workspace, - allowAdvancedScheduling, - allowWorkspaceActions, - ) - ) { + if (!displayDormantDeletion(workspace, allowAdvancedScheduling)) { return null; } diff --git a/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/TemplateScheduleForm.tsx b/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/TemplateScheduleForm.tsx index 89f26cc5d451e..b2326ad543f41 100644 --- a/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/TemplateScheduleForm.tsx +++ b/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/TemplateScheduleForm.tsx @@ -54,7 +54,6 @@ export interface TemplateScheduleForm { isSubmitting: boolean; error?: unknown; allowAdvancedScheduling: boolean; - allowWorkspaceActions: boolean; // Helpful to show field errors on Storybook initialTouched?: FormikTouched; } @@ -65,7 +64,6 @@ export const TemplateScheduleForm: FC = ({ onCancel, error, allowAdvancedScheduling, - allowWorkspaceActions, isSubmitting, initialTouched, }) => { @@ -562,7 +560,7 @@ export const TemplateScheduleForm: FC = ({ - {allowAdvancedScheduling && allowWorkspaceActions && ( + {allowAdvancedScheduling && ( <> { jest .spyOn(API, "getEntitlements") .mockResolvedValue(MockEntitlementsWithScheduling); - - // remove when https://github.com/coder/coder/milestone/19 is completed. - jest.spyOn(API, "getExperiments").mockResolvedValue(["workspace_actions"]); }); it("Calls the API when user fills in and submits a form", async () => { diff --git a/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/TemplateSchedulePage.tsx b/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/TemplateSchedulePage.tsx index d91600361b205..65a2b885719ee 100644 --- a/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/TemplateSchedulePage.tsx +++ b/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/TemplateSchedulePage.tsx @@ -18,12 +18,9 @@ const TemplateSchedulePage: FC = () => { const queryClient = useQueryClient(); const orgId = useOrganizationId(); const { template } = useTemplateSettings(); - const { entitlements, experiments } = useDashboard(); + const { entitlements } = useDashboard(); const allowAdvancedScheduling = entitlements.features["advanced_template_scheduling"].enabled; - // This check can be removed when https://github.com/coder/coder/milestone/19 - // is merged up - const allowWorkspaceActions = experiments.includes("workspace_actions"); const { clearLocal } = useLocalStorage(); const { @@ -52,7 +49,6 @@ const TemplateSchedulePage: FC = () => { ; const defaultArgs = { allowAdvancedScheduling: true, - allowWorkspaceActions: true, template: MockTemplate, onSubmit: action("onSubmit"), onCancel: action("cancel"), diff --git a/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/TemplateSchedulePageView.tsx b/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/TemplateSchedulePageView.tsx index 5ce8fd3eee5fb..8ad9c4d1391d4 100644 --- a/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/TemplateSchedulePageView.tsx +++ b/site/src/pages/TemplateSettingsPage/TemplateSchedulePage/TemplateSchedulePageView.tsx @@ -13,7 +13,6 @@ export interface TemplateSchedulePageViewProps { typeof TemplateScheduleForm >["initialTouched"]; allowAdvancedScheduling: boolean; - allowWorkspaceActions: boolean; } export const TemplateSchedulePageView: FC = ({ @@ -22,7 +21,6 @@ export const TemplateSchedulePageView: FC = ({ onSubmit, isSubmitting, allowAdvancedScheduling, - allowWorkspaceActions, submitError, initialTouched, }) => { @@ -34,7 +32,6 @@ export const TemplateSchedulePageView: FC = ({ = { parameters: { layout: "fullscreen", features: ["advanced_template_scheduling"], - experiments: ["workspace_actions"], }, }; diff --git a/site/src/pages/WorkspacePage/WorkspaceTopbar.tsx b/site/src/pages/WorkspacePage/WorkspaceTopbar.tsx index 375e47a22b039..b25ef4cae1b99 100644 --- a/site/src/pages/WorkspacePage/WorkspaceTopbar.tsx +++ b/site/src/pages/WorkspacePage/WorkspaceTopbar.tsx @@ -88,16 +88,14 @@ export const WorkspaceTopbar = (props: WorkspaceProps) => { }); // Dormant - const { entitlements, experiments } = useDashboard(); + const { entitlements } = useDashboard(); const allowAdvancedScheduling = entitlements.features["advanced_template_scheduling"].enabled; // This check can be removed when https://github.com/coder/coder/milestone/19 // is merged up - const allowWorkspaceActions = experiments.includes("workspace_actions"); const shouldDisplayDormantData = displayDormantDeletion( workspace, allowAdvancedScheduling, - allowWorkspaceActions, ); return ( diff --git a/site/src/testHelpers/entities.ts b/site/src/testHelpers/entities.ts index 51f2d7f7d87cf..0e4d613b61fd2 100644 --- a/site/src/testHelpers/entities.ts +++ b/site/src/testHelpers/entities.ts @@ -2047,7 +2047,9 @@ export const MockEntitlementsWithUserLimit: TypesGen.Entitlements = { }), }; -export const MockExperiments: TypesGen.Experiment[] = ["workspace_actions"]; +export const MockExperiments: TypesGen.Experiment[] = [ + "deployment_health_page", +]; export const MockAuditLog: TypesGen.AuditLog = { id: "fbd2116a-8961-4954-87ae-e4575bd29ce0", diff --git a/site/src/utils/dormant.test.ts b/site/src/utils/dormant.test.ts index ae02ef017690c..babbb5ef6940b 100644 --- a/site/src/utils/dormant.test.ts +++ b/site/src/utils/dormant.test.ts @@ -4,53 +4,39 @@ import { displayDormantDeletion } from "./dormant"; describe("displayDormantDeletion", () => { const today = new Date(); - it.each<[string, boolean, boolean, boolean]>([ + it.each<[string, boolean, boolean]>([ [ new Date(new Date().setDate(today.getDate() + 15)).toISOString(), true, - true, false, ], // today + 15 days out [ new Date(new Date().setDate(today.getDate() + 14)).toISOString(), true, true, - true, ], // today + 14 [ new Date(new Date().setDate(today.getDate() + 13)).toISOString(), true, true, - true, ], // today + 13 [ new Date(new Date().setDate(today.getDate() + 1)).toISOString(), true, true, - true, ], // today + 1 - [new Date().toISOString(), true, true, true], // today + 0 - [new Date().toISOString(), false, true, false], // Advanced Scheduling off - [new Date().toISOString(), true, false, false], // Workspace Actions off + [new Date().toISOString(), true, true], // today + 0 + [new Date().toISOString(), false, false], // Advanced Scheduling off ])( - `deleting_at=%p, allowAdvancedScheduling=%p, AllowWorkspaceActions=%p, shouldDisplay=%p`, - ( - deleting_at, - allowAdvancedScheduling, - allowWorkspaceActions, - shouldDisplay, - ) => { + `deleting_at=%p, allowAdvancedScheduling=%p, shouldDisplay=%p`, + (deleting_at, allowAdvancedScheduling, shouldDisplay) => { const workspace: TypesGen.Workspace = { ...Mocks.MockWorkspace, deleting_at, }; - expect( - displayDormantDeletion( - workspace, - allowAdvancedScheduling, - allowWorkspaceActions, - ), - ).toBe(shouldDisplay); + expect(displayDormantDeletion(workspace, allowAdvancedScheduling)).toBe( + shouldDisplay, + ); }, ); }); diff --git a/site/src/utils/dormant.ts b/site/src/utils/dormant.ts index 14ac74f4a00bd..1265647878a82 100644 --- a/site/src/utils/dormant.ts +++ b/site/src/utils/dormant.ts @@ -14,14 +14,9 @@ const IMPENDING_DELETION_DISPLAY_THRESHOLD = 14; // 14 days export const displayDormantDeletion = ( workspace: Workspace, allowAdvancedScheduling: boolean, - allowWorkspaceActions: boolean, ) => { const today = new Date(); - if ( - !workspace.deleting_at || - !allowAdvancedScheduling || - !allowWorkspaceActions - ) { + if (!workspace.deleting_at || !allowAdvancedScheduling) { return false; } return (