From 9280eef6ed4ae405ab7846c0ed3c85d2d91ba978 Mon Sep 17 00:00:00 2001 From: Kyle Carberry Date: Wed, 18 Jan 2023 19:54:17 +0000 Subject: [PATCH 1/2] chore: move vscode local out of experiments We've been dogfooding the VS Code extension for a while, and it seems stable enough that it's overall positive to release! --- coderd/apidoc/docs.go | 11 +---------- coderd/apidoc/swagger.json | 7 +------ coderd/experiments_test.go | 1 - codersdk/experiments.go | 10 +--------- docs/api/general.md | 14 ++++---------- docs/api/schemas.md | 14 -------------- scripts/apitypings/main.go | 7 ++++++- site/src/api/typesGenerated.ts | 4 ++-- .../src/pages/WorkspacePage/WorkspaceReadyPage.tsx | 9 +-------- 9 files changed, 16 insertions(+), 61 deletions(-) diff --git a/coderd/apidoc/docs.go b/coderd/apidoc/docs.go index 3355084edd85a..1cd63992f22b2 100644 --- a/coderd/apidoc/docs.go +++ b/coderd/apidoc/docs.go @@ -408,7 +408,7 @@ const docTemplate = `{ "schema": { "type": "array", "items": { - "$ref": "#/definitions/codersdk.Experiment" + "type": "string" } } } @@ -6102,15 +6102,6 @@ const docTemplate = `{ } } }, - "codersdk.Experiment": { - "type": "string", - "enum": [ - "vscode_local" - ], - "x-enum-varnames": [ - "ExperimentVSCodeLocal" - ] - }, "codersdk.Feature": { "type": "object", "properties": { diff --git a/coderd/apidoc/swagger.json b/coderd/apidoc/swagger.json index 50339d9e3e44b..68a4b96850a00 100644 --- a/coderd/apidoc/swagger.json +++ b/coderd/apidoc/swagger.json @@ -346,7 +346,7 @@ "schema": { "type": "array", "items": { - "$ref": "#/definitions/codersdk.Experiment" + "type": "string" } } } @@ -5447,11 +5447,6 @@ } } }, - "codersdk.Experiment": { - "type": "string", - "enum": ["vscode_local"], - "x-enum-varnames": ["ExperimentVSCodeLocal"] - }, "codersdk.Feature": { "type": "object", "properties": { diff --git a/coderd/experiments_test.go b/coderd/experiments_test.go index 7a9da5370703a..4b5ddfcfdbfdc 100644 --- a/coderd/experiments_test.go +++ b/coderd/experiments_test.go @@ -29,7 +29,6 @@ func Test_Experiments(t *testing.T) { require.NoError(t, err) require.NotNil(t, experiments) require.Empty(t, experiments) - require.False(t, experiments.Enabled(codersdk.ExperimentVSCodeLocal)) require.False(t, experiments.Enabled("foo")) }) diff --git a/codersdk/experiments.go b/codersdk/experiments.go index 0d6f1b78f5582..6bb4fb8d5bba0 100644 --- a/codersdk/experiments.go +++ b/codersdk/experiments.go @@ -8,20 +8,12 @@ import ( type Experiment string -const ( - // ExperimentVSCodeLocal enables a workspace button to launch VSCode - // and connect using the local VSCode extension. - ExperimentVSCodeLocal Experiment = "vscode_local" -) - var ( // ExperimentsAll should include all experiments that are safe for // users to opt-in to via --experimental='*'. // Experiments that are not ready for consumption by all users should // not be included here and will be essentially hidden. - ExperimentsAll = Experiments{ - ExperimentVSCodeLocal, - } + ExperimentsAll = Experiments{} ) // Experiments is a list of experiments that are enabled for the deployment. diff --git a/docs/api/general.md b/docs/api/general.md index 447e6dde907ad..822ba9153c822 100644 --- a/docs/api/general.md +++ b/docs/api/general.md @@ -1037,23 +1037,17 @@ curl -X GET http://coder-server:8080/api/v2/experiments \ > 200 Response ```json -["vscode_local"] +["string"] ``` ### Responses -| Status | Meaning | Description | Schema | -| ------ | ------------------------------------------------------- | ----------- | ------------------------------------------------------------- | -| 200 | [OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) | OK | array of [codersdk.Experiment](schemas.md#codersdkexperiment) | +| Status | Meaning | Description | Schema | +| ------ | ------------------------------------------------------- | ----------- | --------------- | +| 200 | [OK](https://tools.ietf.org/html/rfc7231#section-6.3.1) | OK | array of string |

Response Schema

-Status Code **200** - -| Name | Type | Required | Restrictions | Description | -| -------------- | ----- | -------- | ------------ | ----------- | -| `[array item]` | array | false | | | - To perform this operation, you must be authenticated. [Learn more](authentication.md). ## Update check diff --git a/docs/api/schemas.md b/docs/api/schemas.md index 83cb1ba074c80..2859909c87997 100644 --- a/docs/api/schemas.md +++ b/docs/api/schemas.md @@ -2354,20 +2354,6 @@ CreateParameterRequest is a structure used to create a new parameter value for a | `trial` | boolean | false | | | | `warnings` | array of string | false | | | -## codersdk.Experiment - -```json -"vscode_local" -``` - -### Properties - -#### Enumerated Values - -| Value | -| -------------- | -| `vscode_local` | - ## codersdk.Feature ```json diff --git a/scripts/apitypings/main.go b/scripts/apitypings/main.go index 765c8dd510d70..96b4398d0fa33 100644 --- a/scripts/apitypings/main.go +++ b/scripts/apitypings/main.go @@ -223,8 +223,13 @@ func (g *Generator) generateAll() (*TypescriptTypes, error) { sort.Strings(values) var s strings.Builder _, _ = s.WriteString(g.posLine(v)) + joined := strings.Join(values, " | ") + if joined == "" { + // It's possible an enum has no values. + joined = "never" + } _, _ = s.WriteString(fmt.Sprintf("export type %s = %s\n", - name, strings.Join(values, " | "), + name, joined, )) var pluralName string diff --git a/site/src/api/typesGenerated.ts b/site/src/api/typesGenerated.ts index 6793d66ca0fbf..f857f18621c9a 100644 --- a/site/src/api/typesGenerated.ts +++ b/site/src/api/typesGenerated.ts @@ -1084,8 +1084,8 @@ export const Entitlements: Entitlement[] = [ ] // From codersdk/experiments.go -export type Experiment = "vscode_local" -export const Experiments: Experiment[] = ["vscode_local"] +export type Experiment = never +export const Experiments: Experiment[] = [] // From codersdk/features.go export type FeatureName = diff --git a/site/src/pages/WorkspacePage/WorkspaceReadyPage.tsx b/site/src/pages/WorkspacePage/WorkspaceReadyPage.tsx index 0041901b01897..65dc0504b36d9 100644 --- a/site/src/pages/WorkspacePage/WorkspaceReadyPage.tsx +++ b/site/src/pages/WorkspacePage/WorkspaceReadyPage.tsx @@ -41,10 +41,6 @@ export const WorkspaceReadyPage = ({ workspaceState.children["scheduleBannerMachine"], ) const xServices = useContext(XServiceContext) - const experiments = useSelector( - xServices.experimentsXService, - (state) => state.context.experiments || [], - ) const featureVisibility = useSelector( xServices.entitlementsXService, selectFeatureVisibility, @@ -123,10 +119,7 @@ export const WorkspaceReadyPage = ({ builds={builds} canUpdateWorkspace={canUpdateWorkspace} hideSSHButton={featureVisibility["browser_only"]} - hideVSCodeDesktopButton={ - !experiments.includes("vscode_local") || - featureVisibility["browser_only"] - } + hideVSCodeDesktopButton={featureVisibility["browser_only"]} workspaceErrors={{ [WorkspaceErrors.GET_RESOURCES_ERROR]: refreshWorkspaceWarning, [WorkspaceErrors.GET_BUILDS_ERROR]: getBuildsError, From 53ad5062da4170651bfc27be281997fa100ad85f Mon Sep 17 00:00:00 2001 From: Kyle Carberry Date: Fri, 20 Jan 2023 04:12:33 +0000 Subject: [PATCH 2/2] Fix entities --- codersdk/experiments.go | 5 +++++ site/src/testHelpers/entities.ts | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/codersdk/experiments.go b/codersdk/experiments.go index 6bb4fb8d5bba0..ecd963ef901cf 100644 --- a/codersdk/experiments.go +++ b/codersdk/experiments.go @@ -8,6 +8,11 @@ import ( type Experiment string +const ( +// Add new experiments here! +// ExperimentExample Experiment = "example" +) + var ( // ExperimentsAll should include all experiments that are safe for // users to opt-in to via --experimental='*'. diff --git a/site/src/testHelpers/entities.ts b/site/src/testHelpers/entities.ts index 7b1b247e3d36d..9e6e0acabd93c 100644 --- a/site/src/testHelpers/entities.ts +++ b/site/src/testHelpers/entities.ts @@ -982,7 +982,7 @@ export const MockEntitlementsWithAuditLog: TypesGen.Entitlements = { }), } -export const MockExperiments: TypesGen.Experiment[] = ["vscode_local"] +export const MockExperiments: TypesGen.Experiment[] = [] export const MockAuditLog: TypesGen.AuditLog = { id: "fbd2116a-8961-4954-87ae-e4575bd29ce0",