From a1046515033ce9f830a07d78aa8c8fe542482516 Mon Sep 17 00:00:00 2001 From: Pablo Zaidenvoren Date: Tue, 19 May 2026 22:03:32 +0000 Subject: [PATCH 1/2] chore(devcontainer): use docker-in-docker feature v3 --- .devcontainer/devcontainer.json | 2 +- .../complex-workspace/.devcontainer/devcontainer.json | 4 ++-- examples/smoke-workspace/.devcontainer/devcontainer.json | 2 +- src/templates.ts | 2 +- tests/core.test.ts | 2 +- tests/examples.test.ts | 8 ++++---- tests/templates.test.ts | 8 ++++---- 7 files changed, 14 insertions(+), 14 deletions(-) diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json index 4f62a3a..2134d26 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/devcontainer.json @@ -5,7 +5,7 @@ // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile "image": "mcr.microsoft.com/devcontainers/base:noble", "features": { - "ghcr.io/devcontainers/features/docker-in-docker:2": {}, + "ghcr.io/devcontainers/features/docker-in-docker:3": {}, "ghcr.io/pablozaiden/devcontainers-features/bun": {} }, "remoteEnv": { diff --git a/examples/complex-workspace/.devcontainer/devcontainer.json b/examples/complex-workspace/.devcontainer/devcontainer.json index 4e39306..b5151ae 100644 --- a/examples/complex-workspace/.devcontainer/devcontainer.json +++ b/examples/complex-workspace/.devcontainer/devcontainer.json @@ -4,8 +4,8 @@ "image": "mcr.microsoft.com/devcontainers/base:noble", "features": { "ghcr.io/devcontainers/features/azure-cli:1": {}, - "ghcr.io/devcontainers/features/docker-in-docker:2": {}, + "ghcr.io/devcontainers/features/docker-in-docker:3": {}, "ghcr.io/devcontainers/features/node:1": {}, "ghcr.io/devcontainers/features/terraform:1": {} } -} \ No newline at end of file +} diff --git a/examples/smoke-workspace/.devcontainer/devcontainer.json b/examples/smoke-workspace/.devcontainer/devcontainer.json index 482f7d8..6ff084b 100644 --- a/examples/smoke-workspace/.devcontainer/devcontainer.json +++ b/examples/smoke-workspace/.devcontainer/devcontainer.json @@ -2,6 +2,6 @@ "name": "devbox-smoke-workspace", "image": "mcr.microsoft.com/devcontainers/base:ubuntu", "features": { - "ghcr.io/devcontainers/features/docker-in-docker:2": {} + "ghcr.io/devcontainers/features/docker-in-docker:3": {} } } diff --git a/src/templates.ts b/src/templates.ts index 8d2ed9b..697003d 100644 --- a/src/templates.ts +++ b/src/templates.ts @@ -28,7 +28,7 @@ export interface DevboxTemplateSummary { const BASE_IMAGE = "mcr.microsoft.com/devcontainers/base:noble"; const BASE_NAME = "noble"; -const DOCKER_IN_DOCKER_FEATURE = "ghcr.io/devcontainers/features/docker-in-docker:2"; +const DOCKER_IN_DOCKER_FEATURE = "ghcr.io/devcontainers/features/docker-in-docker:3"; const DOTNET_FEATURE = "ghcr.io/devcontainers/features/dotnet:2"; const GO_FEATURE = "ghcr.io/devcontainers/features/go:1"; const JAVA_FEATURE = "ghcr.io/devcontainers/features/java:1"; diff --git a/tests/core.test.ts b/tests/core.test.ts index 2be7e27..1be5d86 100644 --- a/tests/core.test.ts +++ b/tests/core.test.ts @@ -436,7 +436,7 @@ describe("resolveWorkspaceConfig", () => { expect(rebuildStyleResolution.config).toEqual({ image: "mcr.microsoft.com/devcontainers/base:noble", features: { - "ghcr.io/devcontainers/features/docker-in-docker:2": {}, + "ghcr.io/devcontainers/features/docker-in-docker:3": {}, "ghcr.io/devcontainers-extra/features/uv:1": {}, }, }); diff --git a/tests/examples.test.ts b/tests/examples.test.ts index e112105..8e5bfef 100644 --- a/tests/examples.test.ts +++ b/tests/examples.test.ts @@ -388,7 +388,7 @@ describe("example workspaces (simulated host tools)", () => { const generatedConfig = await readJson(fixture.generatedConfigPath); expect(generatedConfig.image).toBe("mcr.microsoft.com/devcontainers/base:ubuntu"); expect(generatedConfig.features).toEqual({ - "ghcr.io/devcontainers/features/docker-in-docker:2": {}, + "ghcr.io/devcontainers/features/docker-in-docker:3": {}, }); expect(generatedConfig.runArgs).toEqual(["--name", "devbox-smoke-workspace-5001", "-p", "5001:5001"]); expect(generatedConfig.mounts).toEqual([]); @@ -485,7 +485,7 @@ describe("example workspaces (simulated host tools)", () => { const generatedConfig = await readJson(fixture.generatedConfigPath); expect(generatedConfig.features).toEqual({ "ghcr.io/devcontainers/features/azure-cli:1": {}, - "ghcr.io/devcontainers/features/docker-in-docker:2": {}, + "ghcr.io/devcontainers/features/docker-in-docker:3": {}, "ghcr.io/devcontainers/features/node:1": {}, "ghcr.io/devcontainers/features/terraform:1": {}, }); @@ -544,7 +544,7 @@ describe("example workspaces (simulated host tools)", () => { const generatedConfig = await readJson(fixture.generatedConfigPath); expect(generatedConfig.image).toBe("mcr.microsoft.com/devcontainers/base:noble"); expect(generatedConfig.features).toEqual({ - "ghcr.io/devcontainers/features/docker-in-docker:2": {}, + "ghcr.io/devcontainers/features/docker-in-docker:3": {}, }); expect(generatedConfig.postCreateCommand).toBeUndefined(); @@ -554,7 +554,7 @@ describe("example workspaces (simulated host tools)", () => { expect(state.template.name).toBe("ubuntu"); expect(state.template.image).toBe("mcr.microsoft.com/devcontainers/base:noble"); expect(state.template.pinnedReference).toBe( - "mcr.microsoft.com/devcontainers/base:noble + ghcr.io/devcontainers/features/docker-in-docker:2", + "mcr.microsoft.com/devcontainers/base:noble + ghcr.io/devcontainers/features/docker-in-docker:3", ); expect(state.template.runtimeVersion).toBe("Ubuntu noble"); diff --git a/tests/templates.test.ts b/tests/templates.test.ts index 5180f0b..e17ddc2 100644 --- a/tests/templates.test.ts +++ b/tests/templates.test.ts @@ -11,7 +11,7 @@ describe("built-in templates", () => { expect.objectContaining({ image: "mcr.microsoft.com/devcontainers/base:noble", features: expect.objectContaining({ - "ghcr.io/devcontainers/features/docker-in-docker:2": {}, + "ghcr.io/devcontainers/features/docker-in-docker:3": {}, }), }), ); @@ -29,13 +29,13 @@ describe("built-in templates", () => { expect(template.base).toBe("noble"); expect(template.image).toBe("mcr.microsoft.com/devcontainers/base:noble"); expect(template.pinnedReference).toBe( - "mcr.microsoft.com/devcontainers/base:noble + ghcr.io/devcontainers/features/docker-in-docker:2 + ghcr.io/devcontainers/features/node:1 + ghcr.io/devcontainers-extra/features/bun:1", + "mcr.microsoft.com/devcontainers/base:noble + ghcr.io/devcontainers/features/docker-in-docker:3 + ghcr.io/devcontainers/features/node:1 + ghcr.io/devcontainers-extra/features/bun:1", ); expect(template.runnerCompatible).toBe(true); expect(template.config).toEqual({ image: "mcr.microsoft.com/devcontainers/base:noble", features: { - "ghcr.io/devcontainers/features/docker-in-docker:2": {}, + "ghcr.io/devcontainers/features/docker-in-docker:3": {}, "ghcr.io/devcontainers/features/node:1": {}, "ghcr.io/devcontainers-extra/features/bun:1": {}, }, @@ -51,7 +51,7 @@ describe("built-in templates", () => { base: "noble", image: "mcr.microsoft.com/devcontainers/base:noble", pinnedReference: - "mcr.microsoft.com/devcontainers/base:noble + ghcr.io/devcontainers/features/docker-in-docker:2 + ghcr.io/devcontainers/features/node:1 + ghcr.io/devcontainers-extra/features/bun:1", + "mcr.microsoft.com/devcontainers/base:noble + ghcr.io/devcontainers/features/docker-in-docker:3 + ghcr.io/devcontainers/features/node:1 + ghcr.io/devcontainers-extra/features/bun:1", runtimeVersion: "Node.js + Bun", languages: ["node", "bun", "typescript", "javascript"], runnerCompatible: true, From e0630a894e53697649de4e76667ddcd4ff78376f Mon Sep 17 00:00:00 2001 From: Pablo Zaidenvoren Date: Tue, 19 May 2026 22:16:43 +0000 Subject: [PATCH 2/2] fix(examples): pin smoke workspace to noble base --- examples/smoke-workspace/.devcontainer/devcontainer.json | 2 +- tests/examples.test.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/smoke-workspace/.devcontainer/devcontainer.json b/examples/smoke-workspace/.devcontainer/devcontainer.json index 6ff084b..cdcc2ff 100644 --- a/examples/smoke-workspace/.devcontainer/devcontainer.json +++ b/examples/smoke-workspace/.devcontainer/devcontainer.json @@ -1,6 +1,6 @@ { "name": "devbox-smoke-workspace", - "image": "mcr.microsoft.com/devcontainers/base:ubuntu", + "image": "mcr.microsoft.com/devcontainers/base:noble", "features": { "ghcr.io/devcontainers/features/docker-in-docker:3": {} } diff --git a/tests/examples.test.ts b/tests/examples.test.ts index 8e5bfef..e0b2e48 100644 --- a/tests/examples.test.ts +++ b/tests/examples.test.ts @@ -386,7 +386,7 @@ describe("example workspaces (simulated host tools)", () => { expect(await readFile(String(fixture.sourceConfigPath), "utf8")).toBe(sourceBefore); const generatedConfig = await readJson(fixture.generatedConfigPath); - expect(generatedConfig.image).toBe("mcr.microsoft.com/devcontainers/base:ubuntu"); + expect(generatedConfig.image).toBe("mcr.microsoft.com/devcontainers/base:noble"); expect(generatedConfig.features).toEqual({ "ghcr.io/devcontainers/features/docker-in-docker:3": {}, });