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)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy