Skip to content

Commit f969c32

Browse files
committed
add experiment
1 parent 7b53e14 commit f969c32

File tree

4 files changed

+53
-9
lines changed

4 files changed

+53
-9
lines changed

coderd/coderd.go

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -959,9 +959,15 @@ func New(options *Options) *API {
959959
r.Delete("/favorite", api.deleteFavoriteWorkspace)
960960
r.Put("/autoupdates", api.putWorkspaceAutoupdates)
961961
r.Get("/resolve-autostart", api.resolveAutostart)
962-
r.Post("/port-share", api.postWorkspaceAgentPortShare)
963-
r.Get("/port-shares", api.workspaceAgentPortShares)
964-
r.Delete("/port-share", api.deleteWorkspaceAgentPortShare)
962+
r.Route("/", func(r chi.Router) {
963+
r.Use(
964+
httpmw.RequireExperiment(api.Experiments, codersdk.ExperimentSharedPorts),
965+
)
966+
r.Post("/port-share", api.postWorkspaceAgentPortShare)
967+
r.Get("/port-shares", api.workspaceAgentPortShares)
968+
r.Delete("/port-share", api.deleteWorkspaceAgentPortShare)
969+
})
970+
965971
})
966972
})
967973
r.Route("/workspacebuilds/{workspacebuild}", func(r chi.Router) {

coderd/httpmw/experiments.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package httpmw
2+
3+
import (
4+
"fmt"
5+
"net/http"
6+
7+
"github.com/coder/coder/v2/coderd/httpapi"
8+
"github.com/coder/coder/v2/codersdk"
9+
)
10+
11+
func RequireExperiment(experiments codersdk.Experiments, experiment codersdk.Experiment) func(next http.Handler) http.Handler {
12+
return func(next http.Handler) http.Handler {
13+
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
14+
if !experiments.Enabled(experiment) {
15+
httpapi.Write(r.Context(), w, http.StatusForbidden, codersdk.Response{
16+
Message: fmt.Sprintf("Experiment '%s' is required but not enabled", experiment),
17+
})
18+
return
19+
}
20+
next.ServeHTTP(w, r)
21+
})
22+
}
23+
}

coderd/workspaceagentportshare_test.go

Lines changed: 15 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,11 @@ func TestPostWorkspaceAgentPortShare(t *testing.T) {
1919
t.Parallel()
2020
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
2121
defer cancel()
22-
23-
ownerClient, db := coderdtest.NewWithDatabase(t, nil)
22+
dep := coderdtest.DeploymentValues(t)
23+
dep.Experiments = append(dep.Experiments, string(codersdk.ExperimentSharedPorts))
24+
ownerClient, db := coderdtest.NewWithDatabase(t, &coderdtest.Options{
25+
DeploymentValues: dep,
26+
})
2427
owner := coderdtest.CreateFirstUser(t, ownerClient)
2528
client, user := coderdtest.CreateAnotherUser(t, ownerClient, owner.OrganizationID)
2629

@@ -73,7 +76,11 @@ func TestGetWorkspaceAgentPortShares(t *testing.T) {
7376
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
7477
defer cancel()
7578

76-
ownerClient, db := coderdtest.NewWithDatabase(t, nil)
79+
dep := coderdtest.DeploymentValues(t)
80+
dep.Experiments = append(dep.Experiments, string(codersdk.ExperimentSharedPorts))
81+
ownerClient, db := coderdtest.NewWithDatabase(t, &coderdtest.Options{
82+
DeploymentValues: dep,
83+
})
7784
owner := coderdtest.CreateFirstUser(t, ownerClient)
7885
client, user := coderdtest.CreateAnotherUser(t, ownerClient, owner.OrganizationID)
7986

@@ -108,7 +115,11 @@ func TestDeleteWorkspaceAgentPortShare(t *testing.T) {
108115
ctx, cancel := context.WithTimeout(context.Background(), testutil.WaitLong)
109116
defer cancel()
110117

111-
ownerClient, db := coderdtest.NewWithDatabase(t, nil)
118+
dep := coderdtest.DeploymentValues(t)
119+
dep.Experiments = append(dep.Experiments, string(codersdk.ExperimentSharedPorts))
120+
ownerClient, db := coderdtest.NewWithDatabase(t, &coderdtest.Options{
121+
DeploymentValues: dep,
122+
})
112123
owner := coderdtest.CreateFirstUser(t, ownerClient)
113124
client, user := coderdtest.CreateAnotherUser(t, ownerClient, owner.OrganizationID)
114125

codersdk/deployment.go

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,6 +73,7 @@ var FeatureNames = []FeatureName{
7373
FeatureWorkspaceBatchActions,
7474
FeatureAccessControl,
7575
FeatureOAuth2Provider,
76+
FeatureControlSharedPorts,
7677
}
7778

7879
// Humanize returns the feature name in a human-readable format.
@@ -2116,14 +2117,17 @@ type Experiment string
21162117

21172118
const (
21182119
// Add new experiments here!
2119-
ExperimentExample Experiment = "example" // This isn't used for anything.
2120+
ExperimentExample Experiment = "example" // This isn't used for anything.
2121+
ExperimentSharedPorts Experiment = "shared-ports"
21202122
)
21212123

21222124
// ExperimentsAll should include all experiments that are safe for
21232125
// users to opt-in to via --experimental='*'.
21242126
// Experiments that are not ready for consumption by all users should
21252127
// not be included here and will be essentially hidden.
2126-
var ExperimentsAll = Experiments{}
2128+
var ExperimentsAll = Experiments{
2129+
ExperimentSharedPorts,
2130+
}
21272131

21282132
// Experiments is a list of experiments.
21292133
// Multiple experiments may be enabled at the same time.

0 commit comments

Comments
 (0)