Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 08463c2

Browse files
authored
feat: add OpenIn option to coder_app (#15743)
This PR is the coder/coder part of [the open_in parameter issue](coder/terraform-provider-coder#297) aiming to add a new optional parameter to choose how to open modules. This PR is heavily linked [to this PR](coder/terraform-provider-coder#321). ℹ️ For now, some integrations tests can not be pushed as it requires a release on the terraform-provider repo.
1 parent 3f1795f commit 08463c2

34 files changed

+1075
-800
lines changed

agent/proto/agent.pb.go

+429-419
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

agent/proto/agent.proto

+1
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ message WorkspaceApp {
4242
}
4343
Health health = 12;
4444
bool hidden = 13;
45+
string open_in = 14;
4546
}
4647

4748
message WorkspaceAgentScript {

coderd/agentapi/apps_test.go

+3
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ func TestBatchUpdateAppHealths(t *testing.T) {
3030
DisplayName: "code-server 1",
3131
HealthcheckUrl: "http://localhost:3000",
3232
Health: database.WorkspaceAppHealthInitializing,
33+
OpenIn: database.WorkspaceAppOpenInSlimWindow,
3334
}
3435
app2 = database.WorkspaceApp{
3536
ID: uuid.New(),
@@ -38,6 +39,7 @@ func TestBatchUpdateAppHealths(t *testing.T) {
3839
DisplayName: "code-server 2",
3940
HealthcheckUrl: "http://localhost:3001",
4041
Health: database.WorkspaceAppHealthHealthy,
42+
OpenIn: database.WorkspaceAppOpenInSlimWindow,
4143
}
4244
)
4345

@@ -163,6 +165,7 @@ func TestBatchUpdateAppHealths(t *testing.T) {
163165
AgentID: agent.ID,
164166
Slug: "code-server-3",
165167
DisplayName: "code-server 3",
168+
OpenIn: database.WorkspaceAppOpenInSlimWindow,
166169
}
167170

168171
dbM := dbmock.NewMockStore(gomock.NewController(t))

coderd/apidoc/docs.go

+3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/apidoc/swagger.json

+3
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/dbauthz/dbauthz_test.go

+4-3
Original file line numberDiff line numberDiff line change
@@ -2502,7 +2502,7 @@ func (s *MethodTestSuite) TestSystemFunctions() {
25022502
check.Args(time.Now()).Asserts(rbac.ResourceSystem, policy.ActionRead)
25032503
}))
25042504
s.Run("GetWorkspaceAppsCreatedAfter", s.Subtest(func(db database.Store, check *expects) {
2505-
_ = dbgen.WorkspaceApp(s.T(), db, database.WorkspaceApp{CreatedAt: time.Now().Add(-time.Hour)})
2505+
_ = dbgen.WorkspaceApp(s.T(), db, database.WorkspaceApp{CreatedAt: time.Now().Add(-time.Hour), OpenIn: database.WorkspaceAppOpenInSlimWindow})
25062506
check.Args(time.Now()).Asserts(rbac.ResourceSystem, policy.ActionRead)
25072507
}))
25082508
s.Run("GetWorkspaceResourcesCreatedAfter", s.Subtest(func(db database.Store, check *expects) {
@@ -2551,13 +2551,13 @@ func (s *MethodTestSuite) TestSystemFunctions() {
25512551
aBuild := dbgen.WorkspaceBuild(s.T(), db, database.WorkspaceBuild{WorkspaceID: aWs.ID, JobID: uuid.New()})
25522552
aRes := dbgen.WorkspaceResource(s.T(), db, database.WorkspaceResource{JobID: aBuild.JobID})
25532553
aAgt := dbgen.WorkspaceAgent(s.T(), db, database.WorkspaceAgent{ResourceID: aRes.ID})
2554-
a := dbgen.WorkspaceApp(s.T(), db, database.WorkspaceApp{AgentID: aAgt.ID})
2554+
a := dbgen.WorkspaceApp(s.T(), db, database.WorkspaceApp{AgentID: aAgt.ID, OpenIn: database.WorkspaceAppOpenInSlimWindow})
25552555

25562556
bWs := dbgen.Workspace(s.T(), db, database.WorkspaceTable{})
25572557
bBuild := dbgen.WorkspaceBuild(s.T(), db, database.WorkspaceBuild{WorkspaceID: bWs.ID, JobID: uuid.New()})
25582558
bRes := dbgen.WorkspaceResource(s.T(), db, database.WorkspaceResource{JobID: bBuild.JobID})
25592559
bAgt := dbgen.WorkspaceAgent(s.T(), db, database.WorkspaceAgent{ResourceID: bRes.ID})
2560-
b := dbgen.WorkspaceApp(s.T(), db, database.WorkspaceApp{AgentID: bAgt.ID})
2560+
b := dbgen.WorkspaceApp(s.T(), db, database.WorkspaceApp{AgentID: bAgt.ID, OpenIn: database.WorkspaceAppOpenInSlimWindow})
25612561

25622562
check.Args([]uuid.UUID{a.AgentID, b.AgentID}).
25632563
Asserts(rbac.ResourceSystem, policy.ActionRead).
@@ -2611,6 +2611,7 @@ func (s *MethodTestSuite) TestSystemFunctions() {
26112611
ID: uuid.New(),
26122612
Health: database.WorkspaceAppHealthDisabled,
26132613
SharingLevel: database.AppSharingLevelOwner,
2614+
OpenIn: database.WorkspaceAppOpenInSlimWindow,
26142615
}).Asserts(rbac.ResourceSystem, policy.ActionCreate)
26152616
}))
26162617
s.Run("InsertWorkspaceResourceMetadata", s.Subtest(func(db database.Store, check *expects) {

coderd/database/dbgen/dbgen.go

+1
Original file line numberDiff line numberDiff line change
@@ -659,6 +659,7 @@ func WorkspaceApp(t testing.TB, db database.Store, orig database.WorkspaceApp) d
659659
Health: takeFirst(orig.Health, database.WorkspaceAppHealthHealthy),
660660
DisplayOrder: takeFirst(orig.DisplayOrder, 1),
661661
Hidden: orig.Hidden,
662+
OpenIn: takeFirst(orig.OpenIn, database.WorkspaceAppOpenInSlimWindow),
662663
})
663664
require.NoError(t, err, "insert app")
664665
return resource

coderd/database/dbmem/dbmem.go

+5
Original file line numberDiff line numberDiff line change
@@ -8348,6 +8348,10 @@ func (q *FakeQuerier) InsertWorkspaceApp(_ context.Context, arg database.InsertW
83488348
arg.SharingLevel = database.AppSharingLevelOwner
83498349
}
83508350

8351+
if arg.OpenIn == "" {
8352+
arg.OpenIn = database.WorkspaceAppOpenInSlimWindow
8353+
}
8354+
83518355
// nolint:gosimple
83528356
workspaceApp := database.WorkspaceApp{
83538357
ID: arg.ID,
@@ -8367,6 +8371,7 @@ func (q *FakeQuerier) InsertWorkspaceApp(_ context.Context, arg database.InsertW
83678371
Health: arg.Health,
83688372
Hidden: arg.Hidden,
83698373
DisplayOrder: arg.DisplayOrder,
8374+
OpenIn: arg.OpenIn,
83708375
}
83718376
q.workspaceApps = append(q.workspaceApps, workspaceApp)
83728377
return workspaceApp, nil

coderd/database/dump.sql

+8-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
ALTER TABLE workspace_apps DROP COLUMN open_in;
2+
3+
DROP TYPE workspace_app_open_in;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
CREATE TYPE workspace_app_open_in AS ENUM ('tab', 'window', 'slim-window');
2+
3+
ALTER TABLE workspace_apps ADD COLUMN open_in workspace_app_open_in NOT NULL DEFAULT 'slim-window'::workspace_app_open_in;

coderd/database/models.go

+63-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries.sql.go

+14-6
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

coderd/database/queries/workspaceapps.sql

+3-2
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,11 @@ INSERT INTO
2929
healthcheck_threshold,
3030
health,
3131
display_order,
32-
hidden
32+
hidden,
33+
open_in
3334
)
3435
VALUES
35-
($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17) RETURNING *;
36+
($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16, $17, $18) RETURNING *;
3637

3738
-- name: UpdateWorkspaceAppHealthByID :exec
3839
UPDATE

coderd/provisionerdserver/provisionerdserver.go

+10
Original file line numberDiff line numberDiff line change
@@ -1509,6 +1509,7 @@ func (s *server) CompleteJob(ctx context.Context, completed *proto.CompletedJob)
15091509
dur := time.Duration(protoAgent.GetConnectionTimeoutSeconds()) * time.Second
15101510
agentTimeouts[dur] = true
15111511
}
1512+
15121513
err = InsertWorkspaceResource(ctx, db, job.ID, workspaceBuild.Transition, protoResource, telemetrySnapshot)
15131514
if err != nil {
15141515
return xerrors.Errorf("insert provisioner job: %w", err)
@@ -2012,6 +2013,14 @@ func InsertWorkspaceResource(ctx context.Context, db database.Store, jobID uuid.
20122013
sharingLevel = database.AppSharingLevelPublic
20132014
}
20142015

2016+
openIn := database.WorkspaceAppOpenInSlimWindow
2017+
switch app.OpenIn {
2018+
case sdkproto.AppOpenIn_TAB:
2019+
openIn = database.WorkspaceAppOpenInTab
2020+
case sdkproto.AppOpenIn_WINDOW:
2021+
openIn = database.WorkspaceAppOpenInWindow
2022+
}
2023+
20152024
dbApp, err := db.InsertWorkspaceApp(ctx, database.InsertWorkspaceAppParams{
20162025
ID: uuid.New(),
20172026
CreatedAt: dbtime.Now(),
@@ -2036,6 +2045,7 @@ func InsertWorkspaceResource(ctx context.Context, db database.Store, jobID uuid.
20362045
Health: health,
20372046
DisplayOrder: int32(app.Order),
20382047
Hidden: app.Hidden,
2048+
OpenIn: openIn,
20392049
})
20402050
if err != nil {
20412051
return xerrors.Errorf("insert app: %w", err)

coderd/telemetry/telemetry_test.go

+1
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ func TestTelemetry(t *testing.T) {
5959
_ = dbgen.WorkspaceApp(t, db, database.WorkspaceApp{
6060
SharingLevel: database.AppSharingLevelOwner,
6161
Health: database.WorkspaceAppHealthDisabled,
62+
OpenIn: database.WorkspaceAppOpenInSlimWindow,
6263
})
6364
group := dbgen.Group(t, db, database.Group{})
6465
_ = dbgen.GroupMember(t, db, database.GroupMemberTable{UserID: user.ID, GroupID: group.ID})

codersdk/agentsdk/convert.go

+2
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,7 @@ func AppFromProto(protoApp *proto.WorkspaceApp) (codersdk.WorkspaceApp, error) {
255255
},
256256
Health: health,
257257
Hidden: protoApp.Hidden,
258+
OpenIn: protoApp.OpenIn,
258259
}, nil
259260
}
260261

@@ -285,6 +286,7 @@ func ProtoFromApp(a codersdk.WorkspaceApp) (*proto.WorkspaceApp, error) {
285286
},
286287
Health: proto.WorkspaceApp_Health(health),
287288
Hidden: a.Hidden,
289+
OpenIn: a.OpenIn,
288290
}, nil
289291
}
290292

0 commit comments

Comments
 (0)