Skip to content

Commit 4c2532a

Browse files
committed
fix(agent/agentcontainers): generate devcontainer metadata from schema
1 parent 09dd69a commit 4c2532a

File tree

5 files changed

+616
-10
lines changed

5 files changed

+616
-10
lines changed

Makefile

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -634,6 +634,14 @@ coderd/database/pubsub/psmock/psmock.go: coderd/database/pubsub/pubsub.go
634634
agent/agentcontainers/acmock/acmock.go: agent/agentcontainers/containers.go
635635
go generate ./agent/agentcontainers/acmock/
636636

637+
agent/agentcontainers/devcontainer_base_gen.go:
638+
TMPDIR=$$(mktemp -d)
639+
wget -O "$$TMPDIR/devContainer.base.schema.json" https://raw.githubusercontent.com/devcontainers/spec/refs/heads/main/schemas/devContainer.base.schema.json
640+
quicktype --src "$$TMPDIR/devContainer.base.schema.json" --lang go --package agentcontainers --src-lang schema --top-level DevContainerBase --out "$$TMPDIR/devcontainer_base_gen.go"
641+
rm -f agent/agentcontainers/devcontainer_base_gen.go
642+
mv "$$TMPDIR/devcontainer_base_gen.go" agent/agentcontainers/devcontainer_base_gen.go
643+
rm -rf "$$TMPDIR"
644+
637645
$(TAILNETTEST_MOCKS): tailnet/coordinator.go tailnet/service.go
638646
go generate ./tailnet/tailnettest/
639647

agent/agentcontainers/containers_dockercli.go

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -183,7 +183,7 @@ func devcontainerEnv(ctx context.Context, execer agentexec.Execer, container str
183183
return nil, nil
184184
}
185185

186-
meta := make([]DevContainerMeta, 0)
186+
meta := make([]DevContainerBase, 0)
187187
if err := json.Unmarshal([]byte(rawMeta), &meta); err != nil {
188188
return nil, xerrors.Errorf("unmarshal devcontainer.metadata: %w", err)
189189
}
@@ -192,7 +192,10 @@ func devcontainerEnv(ctx context.Context, execer agentexec.Execer, container str
192192
env := make([]string, 0)
193193
for _, m := range meta {
194194
for k, v := range m.RemoteEnv {
195-
env = append(env, fmt.Sprintf("%s=%s", k, v))
195+
if v == nil { // *string per spec
196+
continue
197+
}
198+
env = append(env, fmt.Sprintf("%s=%s", k, *v))
196199
}
197200
}
198201
slices.Sort(env)
@@ -276,7 +279,7 @@ func (dcl *DockerCLILister) List(ctx context.Context) (codersdk.WorkspaceAgentLi
276279
// log this error, but I'm not sure it's worth it.
277280
ins, dockerInspectStderr, err := runDockerInspect(ctx, dcl.execer, ids...)
278281
if err != nil {
279-
return codersdk.WorkspaceAgentListContainersResponse{}, xerrors.Errorf("run docker inspect: %w", err)
282+
return codersdk.WorkspaceAgentListContainersResponse{}, xerrors.Errorf("run docker inspect: %w: %s", err, dockerInspectStderr)
280283
}
281284

282285
for _, in := range ins {

agent/agentcontainers/containers_internal_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ import (
3535
//
3636
// CODER_TEST_USE_DOCKER=1 go test ./agent/agentcontainers -run TestDockerCLIContainerLister
3737
func TestIntegrationDocker(t *testing.T) {
38-
t.Parallel()
38+
//nolint:paralleltest // This test tends to flake when lots of containers start and stop in parallel.
3939
if ctud, ok := os.LookupEnv("CODER_TEST_USE_DOCKER"); !ok || ctud != "1" {
4040
t.Skip("Set CODER_TEST_USE_DOCKER=1 to run this test")
4141
}
@@ -419,7 +419,7 @@ func TestConvertDockerVolume(t *testing.T) {
419419
//
420420
// CODER_TEST_USE_DOCKER=1 go test ./agent/agentcontainers -run TestDockerEnvInfoer
421421
func TestDockerEnvInfoer(t *testing.T) {
422-
t.Parallel()
422+
//nolint:paralleltest // This test tends to flake when lots of containers start and stop in parallel.
423423
if ctud, ok := os.LookupEnv("CODER_TEST_USE_DOCKER"); !ok || ctud != "1" {
424424
t.Skip("Set CODER_TEST_USE_DOCKER=1 to run this test")
425425
}

0 commit comments

Comments
 (0)