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

Skip to content

Commit 5c8cac9

Browse files
authored
feat: add name to workspace agent devcontainers (#17089)
In the presence of multiple devcontainers, it would be nice to differentiate them by name. This change inherits the resource name from terraform. Refs #17076
1 parent 56082f3 commit 5c8cac9

22 files changed

+803
-743
lines changed

agent/proto/agent.pb.go

+434-425
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
@@ -102,6 +102,7 @@ message WorkspaceAgentDevcontainer {
102102
bytes id = 1;
103103
string workspace_folder = 2;
104104
string config_path = 3;
105+
string name = 4;
105106
}
106107

107108
message GetManifestRequest {}

coderd/agentapi/manifest.go

+1
Original file line numberDiff line numberDiff line change
@@ -244,6 +244,7 @@ func dbAgentDevcontainersToProto(devcontainers []database.WorkspaceAgentDevconta
244244
for i, dc := range devcontainers {
245245
ret[i] = &agentproto.WorkspaceAgentDevcontainer{
246246
Id: dc.ID[:],
247+
Name: dc.Name,
247248
WorkspaceFolder: dc.WorkspaceFolder,
248249
ConfigPath: dc.ConfigPath,
249250
}

coderd/agentapi/manifest_test.go

+4
Original file line numberDiff line numberDiff line change
@@ -159,11 +159,13 @@ func TestGetManifest(t *testing.T) {
159159
devcontainers = []database.WorkspaceAgentDevcontainer{
160160
{
161161
ID: uuid.New(),
162+
Name: "cool",
162163
WorkspaceAgentID: agent.ID,
163164
WorkspaceFolder: "/cool/folder",
164165
},
165166
{
166167
ID: uuid.New(),
168+
Name: "another",
167169
WorkspaceAgentID: agent.ID,
168170
WorkspaceFolder: "/another/cool/folder",
169171
ConfigPath: "/another/cool/folder/.devcontainer/devcontainer.json",
@@ -283,10 +285,12 @@ func TestGetManifest(t *testing.T) {
283285
protoDevcontainers = []*agentproto.WorkspaceAgentDevcontainer{
284286
{
285287
Id: devcontainers[0].ID[:],
288+
Name: devcontainers[0].Name,
286289
WorkspaceFolder: devcontainers[0].WorkspaceFolder,
287290
},
288291
{
289292
Id: devcontainers[1].ID[:],
293+
Name: devcontainers[1].Name,
290294
WorkspaceFolder: devcontainers[1].WorkspaceFolder,
291295
ConfigPath: devcontainers[1].ConfigPath,
292296
},

coderd/database/dbgen/dbgen.go

+1
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,7 @@ func WorkspaceAgentDevcontainer(t testing.TB, db database.Store, orig database.W
260260
WorkspaceAgentID: takeFirst(orig.WorkspaceAgentID, uuid.New()),
261261
CreatedAt: takeFirst(orig.CreatedAt, dbtime.Now()),
262262
ID: []uuid.UUID{takeFirst(orig.ID, uuid.New())},
263+
Name: []string{takeFirst(orig.Name, testutil.GetRandomName(t))},
263264
WorkspaceFolder: []string{takeFirst(orig.WorkspaceFolder, "/workspace")},
264265
ConfigPath: []string{takeFirst(orig.ConfigPath, "")},
265266
})

coderd/database/dbmem/dbmem.go

+1
Original file line numberDiff line numberDiff line change
@@ -9171,6 +9171,7 @@ func (q *FakeQuerier) InsertWorkspaceAgentDevcontainers(_ context.Context, arg d
91719171
WorkspaceAgentID: arg.WorkspaceAgentID,
91729172
CreatedAt: arg.CreatedAt,
91739173
ID: id,
9174+
Name: arg.Name[i],
91749175
WorkspaceFolder: arg.WorkspaceFolder[i],
91759176
ConfigPath: arg.ConfigPath[i],
91769177
})

coderd/database/dump.sql

+4-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 @@
1+
ALTER TABLE workspace_agent_devcontainers DROP COLUMN name;
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
ALTER TABLE workspace_agent_devcontainers ADD COLUMN name TEXT NOT NULL DEFAULT '';
2+
ALTER TABLE workspace_agent_devcontainers ALTER COLUMN name DROP DEFAULT;
3+
4+
COMMENT ON COLUMN workspace_agent_devcontainers.name IS 'The name of the Dev Container.';

coderd/database/models.go

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

coderd/database/queries.sql.go

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

coderd/database/queries/workspaceagentdevcontainers.sql

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
-- name: InsertWorkspaceAgentDevcontainers :many
22
INSERT INTO
3-
workspace_agent_devcontainers (workspace_agent_id, created_at, id, workspace_folder, config_path)
3+
workspace_agent_devcontainers (workspace_agent_id, created_at, id, name, workspace_folder, config_path)
44
SELECT
55
@workspace_agent_id::uuid AS workspace_agent_id,
66
@created_at::timestamptz AS created_at,
77
unnest(@id::uuid[]) AS id,
8+
unnest(@name::text[]) AS name,
89
unnest(@workspace_folder::text[]) AS workspace_folder,
910
unnest(@config_path::text[]) AS config_path
1011
RETURNING workspace_agent_devcontainers.*;

coderd/provisionerdserver/provisionerdserver.go

+12-9
Original file line numberDiff line numberDiff line change
@@ -2110,22 +2110,25 @@ func InsertWorkspaceResource(ctx context.Context, db database.Store, jobID uuid.
21102110

21112111
if devcontainers := prAgent.GetDevcontainers(); len(devcontainers) > 0 {
21122112
var (
2113-
devContainerIDs = make([]uuid.UUID, 0, len(devcontainers))
2114-
devContainerWorkspaceFolders = make([]string, 0, len(devcontainers))
2115-
devContainerConfigPaths = make([]string, 0, len(devcontainers))
2113+
devcontainerIDs = make([]uuid.UUID, 0, len(devcontainers))
2114+
devcontainerNames = make([]string, 0, len(devcontainers))
2115+
devcontainerWorkspaceFolders = make([]string, 0, len(devcontainers))
2116+
devcontainerConfigPaths = make([]string, 0, len(devcontainers))
21162117
)
21172118
for _, dc := range devcontainers {
2118-
devContainerIDs = append(devContainerIDs, uuid.New())
2119-
devContainerWorkspaceFolders = append(devContainerWorkspaceFolders, dc.WorkspaceFolder)
2120-
devContainerConfigPaths = append(devContainerConfigPaths, dc.ConfigPath)
2119+
devcontainerIDs = append(devcontainerIDs, uuid.New())
2120+
devcontainerNames = append(devcontainerNames, dc.Name)
2121+
devcontainerWorkspaceFolders = append(devcontainerWorkspaceFolders, dc.WorkspaceFolder)
2122+
devcontainerConfigPaths = append(devcontainerConfigPaths, dc.ConfigPath)
21212123
}
21222124

21232125
_, err = db.InsertWorkspaceAgentDevcontainers(ctx, database.InsertWorkspaceAgentDevcontainersParams{
21242126
WorkspaceAgentID: agentID,
21252127
CreatedAt: dbtime.Now(),
2126-
ID: devContainerIDs,
2127-
WorkspaceFolder: devContainerWorkspaceFolders,
2128-
ConfigPath: devContainerConfigPaths,
2128+
ID: devcontainerIDs,
2129+
Name: devcontainerNames,
2130+
WorkspaceFolder: devcontainerWorkspaceFolders,
2131+
ConfigPath: devcontainerConfigPaths,
21292132
})
21302133
if err != nil {
21312134
return xerrors.Errorf("insert agent devcontainer: %w", err)

coderd/provisionerdserver/provisionerdserver_test.go

+5-2
Original file line numberDiff line numberDiff line change
@@ -2204,8 +2204,8 @@ func TestInsertWorkspaceResource(t *testing.T) {
22042204
Agents: []*sdkproto.Agent{{
22052205
Name: "dev",
22062206
Devcontainers: []*sdkproto.Devcontainer{
2207-
{WorkspaceFolder: "/workspace1"},
2208-
{WorkspaceFolder: "/workspace2", ConfigPath: "/workspace2/.devcontainer/devcontainer.json"},
2207+
{Name: "foo", WorkspaceFolder: "/workspace1"},
2208+
{Name: "bar", WorkspaceFolder: "/workspace2", ConfigPath: "/workspace2/.devcontainer/devcontainer.json"},
22092209
},
22102210
}},
22112211
})
@@ -2220,7 +2220,10 @@ func TestInsertWorkspaceResource(t *testing.T) {
22202220
devcontainers, err := db.GetWorkspaceAgentDevcontainersByAgentID(ctx, agent.ID)
22212221
require.NoError(t, err)
22222222
require.Len(t, devcontainers, 2)
2223+
require.Equal(t, "foo", devcontainers[0].Name)
22232224
require.Equal(t, "/workspace1", devcontainers[0].WorkspaceFolder)
2225+
require.Equal(t, "", devcontainers[0].ConfigPath)
2226+
require.Equal(t, "bar", devcontainers[1].Name)
22242227
require.Equal(t, "/workspace2", devcontainers[1].WorkspaceFolder)
22252228
require.Equal(t, "/workspace2/.devcontainer/devcontainer.json", devcontainers[1].ConfigPath)
22262229
})

codersdk/agentsdk/convert.go

+2
Original file line numberDiff line numberDiff line change
@@ -450,6 +450,7 @@ func DevcontainerFromProto(pdc *proto.WorkspaceAgentDevcontainer) (codersdk.Work
450450
}
451451
return codersdk.WorkspaceAgentDevcontainer{
452452
ID: id,
453+
Name: pdc.Name,
453454
WorkspaceFolder: pdc.WorkspaceFolder,
454455
ConfigPath: pdc.ConfigPath,
455456
}, nil
@@ -466,6 +467,7 @@ func ProtoFromDevcontainers(dcs []codersdk.WorkspaceAgentDevcontainer) []*proto.
466467
func ProtoFromDevcontainer(dc codersdk.WorkspaceAgentDevcontainer) *proto.WorkspaceAgentDevcontainer {
467468
return &proto.WorkspaceAgentDevcontainer{
468469
Id: dc.ID[:],
470+
Name: dc.Name,
469471
WorkspaceFolder: dc.WorkspaceFolder,
470472
ConfigPath: dc.ConfigPath,
471473
}

codersdk/workspaceagents.go

+1
Original file line numberDiff line numberDiff line change
@@ -396,6 +396,7 @@ func (c *Client) WorkspaceAgentListeningPorts(ctx context.Context, agentID uuid.
396396
// configuration in a workspace that is visible to the workspace agent.
397397
type WorkspaceAgentDevcontainer struct {
398398
ID uuid.UUID `json:"id" format:"uuid"`
399+
Name string `json:"name"`
399400
WorkspaceFolder string `json:"workspace_folder"`
400401
ConfigPath string `json:"config_path,omitempty"`
401402
}

provisioner/terraform/resources.go

+1
Original file line numberDiff line numberDiff line change
@@ -614,6 +614,7 @@ func ConvertState(ctx context.Context, modules []*tfjson.StateModule, rawGraph s
614614
continue
615615
}
616616
agent.Devcontainers = append(agent.Devcontainers, &proto.Devcontainer{
617+
Name: resource.Name,
617618
WorkspaceFolder: attrs.WorkspaceFolder,
618619
ConfigPath: attrs.ConfigPath,
619620
})

provisioner/terraform/resources_test.go

+3-1
Original file line numberDiff line numberDiff line change
@@ -845,9 +845,11 @@ func TestConvertResources(t *testing.T) {
845845
ResourcesMonitoring: &proto.ResourcesMonitoring{},
846846
Devcontainers: []*proto.Devcontainer{
847847
{
848+
Name: "dev1",
848849
WorkspaceFolder: "/workspace1",
849850
},
850851
{
852+
Name: "dev2",
851853
WorkspaceFolder: "/workspace2",
852854
ConfigPath: "/workspace2/.devcontainer/devcontainer.json",
853855
},
@@ -1404,7 +1406,7 @@ func sortResources(resources []*proto.Resource) {
14041406
return agent.Scripts[i].DisplayName < agent.Scripts[j].DisplayName
14051407
})
14061408
sort.Slice(agent.Devcontainers, func(i, j int) bool {
1407-
return agent.Devcontainers[i].WorkspaceFolder < agent.Devcontainers[j].WorkspaceFolder
1409+
return agent.Devcontainers[i].Name < agent.Devcontainers[j].Name
14081410
})
14091411
}
14101412
sort.Slice(resource.Agents, func(i, j int) bool {

0 commit comments

Comments
 (0)