feat(images/kitchensink): add multi-arch kitchensink image - #337
Conversation
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.
|
WDYT about just renaming our universal image to this one? I would love it if we could maintain only one. |
@johnstcn Also curious for your thoughts on this |
I'd much rather have one single "kitchen-sink" image. |
|
so we deprecate the universal one and maintain new kitchensink one? |
|
@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 |
|
let us merge this one as is. And create a followup issue to unify |
Adds a new
kitchensinkimage as a multi-arch alternative touniversal. Theuniversalimage is pinned tolinux/amd64because its upstream base (Microsoft's devcontainers/universal) doesn't publish arm64, and upstream has no plans to. Rather than changinguniversal, this adds a separate image so both stay available.Changes
images/kitchensink/: built oncodercom/enterprise-base:ubuntuwith toolchains from Homebrew, which supports Linux ARM64 as Tier 1 since 5.0 (so one package source covers both platforms):uv, Rust viarustup(+ cargo-binstall, cargo-nextest)coderuserscripts/images.sh: addskitchensinkto the build list, so CI builds and pushes it forlinux/amd64,linux/arm64like the other imagesTesting
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-kitchensinkif you want to try it on arm64 hardware.🤖 Generated with Coder Agents on behalf of @bpmct