Skip to content

feat(images/kitchensink): add multi-arch kitchensink image - #337

Open
bpmct wants to merge 3 commits into
mainfrom
kitchensink
Open

feat(images/kitchensink): add multi-arch kitchensink image#337
bpmct wants to merge 3 commits into
mainfrom
kitchensink

Conversation

@bpmct

@bpmct bpmct commented Jul 31, 2026

Copy link
Copy Markdown
Member

Adds a new kitchensink image as a multi-arch alternative to universal. The universal image is pinned to linux/amd64 because its upstream base (Microsoft's devcontainers/universal) doesn't publish arm64, and upstream has no plans to. Rather than changing universal, this adds a separate image so both stay available.

Changes

  • images/kitchensink/: built on codercom/enterprise-base:ubuntu with toolchains from Homebrew, which supports Linux ARM64 as Tier 1 since 5.0 (so one package source covers both platforms):
    • Homebrew: Go (+ gofumpt, golangci-lint, staticcheck), Node.js (+ yarn, pnpm, fnm), Ruby, Kotlin, Gradle, Maven, mise, just, ninja, OpenTofu, fish, and friends
    • Python via uv, Rust via rustup (+ cargo-binstall, cargo-nextest)
    • Everything installs as the coder user
  • scripts/images.sh: adds kitchensink to the build list, so CI builds and pushes it for linux/amd64,linux/arm64 like the other images

Testing

Both platforms build and pass the in-Dockerfile sanity checks (arm64 via qemu locally; CI uses native Depot builders). A test multi-arch image is up at bencdr/coder-kitchensink if you want to try it on arm64 hardware.

🤖 Generated with Coder Agents on behalf of @bpmct

bpmct added 3 commits July 29, 2026 20:27
The devcontainers/universal base image is amd64-only, which forced the
universal image to be pinned to linux/amd64 via a .platforms override.

Rebuild the image on codercom/enterprise-base:ubuntu instead, installing
the language toolchains it provided (Node.js, Go, Java, .NET, Ruby, PHP,
Rust) plus the GitHub CLI and common utilities, all from multi-arch
sources. Google Chrome only ships amd64 packages, so arm64 builds use
Playwright's Chromium instead.

Remove the .platforms override so the image builds for both linux/amd64
and linux/arm64 like the rest of the images.
The universal image is pinned to linux/amd64 because its upstream base
(devcontainers/universal) is amd64-only. Add a new kitchensink image
built on codercom/enterprise-base:ubuntu that provides the same broad
toolchain (Node.js, Go, Java, .NET, Ruby, PHP, Rust, GitHub CLI) from
multi-arch sources, for both linux/amd64 and linux/arm64.

Google Chrome only ships amd64 packages, so arm64 builds use
Playwright's Chromium instead. The universal image is unchanged.
Replace the apt/tarball toolchain installs with Homebrew, which as of
5.0 supports Linux ARM64/AArch64 as Tier 1, so a single package source
covers both platforms. Toolchains and dev tools (Go, Node.js, Ruby,
Kotlin, Gradle, Maven, mise, just, OpenTofu, and friends) come from
brew, Python from uv, and Rust from rustup with cargo-binstall and
cargo-nextest. Everything installs as the coder user.
@matifali

matifali commented Aug 1, 2026

Copy link
Copy Markdown
Member

WDYT about just renaming our universal image to this one? I would love it if we could maintain only one.
We are already shipping a major change with the 2.36 release that bumps base images to 26.04, so we could bundle this with that.

@matifali

matifali commented Aug 4, 2026

Copy link
Copy Markdown
Member

WDYT about just renaming our universal image to this one? I would love if we can maintain only one. We are already shipping a major change along with the 2.36 release that bums base images to 26.04 so this could be bundled along with that.

@johnstcn Also curious for your thoughts on this

@johnstcn

johnstcn commented Aug 4, 2026

Copy link
Copy Markdown
Member

WDYT about just renaming our universal image to this one? I would love if we can maintain only one. We are already shipping a major change along with the 2.36 release that bums base images to 26.04 so this could be bundled along with that.

@johnstcn Also curious for your thoughts on this

I'd much rather have one single "kitchen-sink" image.

matifali commented Aug 4, 2026

Copy link
Copy Markdown
Member

so we deprecate the universal one and maintain new kitchensink one?

@bpmct

bpmct commented Aug 4, 2026

Copy link
Copy Markdown
Member Author

@matifali i'm fine with that. would you be able to make this change so this doesn't break our users transparently overnight? i'm not sure how the other change works and FWIW I'd rather "deprecate" an image than change the behavior of an existing oen

matifali commented Aug 4, 2026

Copy link
Copy Markdown
Member

let us merge this one as is. And create a followup issue to unify uniersal and kitchensink

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants