mirror of
https://github.com/coder/coder.git
synced 2026-11-02 21:50:08 +08:00
Three changes to make mise-managed tooling reach every dogfood workspace cleanly, with the upstream `devcontainers-cli` module fix as the original trigger. ## Why the module breaks The upstream [`devcontainers-cli` coder module](https://github.com/coder/registry/blob/main/registry/coder/modules/devcontainers-cli/run.sh) does `npm install -g @devcontainers/cli` and then verifies the binary is on `PATH`. With mise-managed Node (introduced in #25282), `npm install -g` lands the binary at `$MISE_DATA_DIR/installs/node/<ver>/bin/`, which is *not* on `PATH` and which `mise reshim` does not surface as a shim. The post-install check fails: ``` Installing @devcontainers/cli using npm... changed 1 package in 661ms Reshimming mise 26... Installation completed but 'devcontainer' command not found in PATH ``` Even though nothing the user does is actually broken. ## What this PR does 1. **`mise.toml`** — pre-install `@devcontainers/cli` via mise's `npm:` backend (`npm:@devcontainers/cli = "0.87.0"`). The mise shim lands at `$MISE_DATA_DIR/shims/devcontainer`, on `PATH`. The upstream module's `run.sh` short-circuits on its `command -v devcontainer` check and exits 0 without ever running the broken npm-install path. Strictly redundant after fix the second point makes `npm i -g` work natively, but kept for build-time pre-install and pinned-version reasons matching the other mise-pinned CLIs. 2. **`dogfood/coder/ubuntu-*.04/Dockerfile`** — set `NPM_CONFIG_PREFIX=/home/coder/.npm-global` and prepend `/home/coder/.npm-global/bin` to `PATH`. With this, generic `npm install -g <pkg>` (prettier, biome, anything frontend folks reach for) lands in a stable home-volume dir that is already on `PATH`, survives node version bumps, and needs no `mise reshim`. The mise `npm:` backend keeps using its own `--prefix` internally so the `npm:@devcontainers/cli` pin still installs under `$MISE_DATA_DIR` as before. 3. **`dogfood/coder/ubuntu-*.04/Dockerfile`** — install image tools into `/opt/mise/data` at build time (owned by `coder`) and expose them at runtime via `MISE_SHARED_INSTALL_DIRS=/opt/mise/data/installs`, keeping `MISE_DATA_DIR=/home/coder/.local/share/mise` for the user's own installs. This decouples baked tool versions from the home volume's copy-on-first-mount: fresh and existing workspaces both immediately see the image's tool set without a `mise install` step, and the user's own `mise install <tool>` / `mise use --global` still lands on the home volume. The `/opt/mise/data/shims` dir trails the user shim dir on `PATH` so a user-installed version wins when both exist. Pinned to `0.87.0` (current latest) so Renovate/Dependabot can bump deliberately, matching the policy applied to the other floating tools during the mise migration (`lazygit`, `doctl`, `jj`, `typos`, `watchexec`). --------- Signed-off-by: Thomas Kosiewski <tk@coder.com> Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
73 lines
2.6 KiB
TOML
73 lines
2.6 KiB
TOML
[settings]
|
|
lockfile = true
|
|
|
|
[env]
|
|
# Required for sqlc (coder fork) to compile against its sqlite dependency.
|
|
# Mise applies [env] during `mise install`, but also at runtime when a
|
|
# tool from this manifest is invoked. CGO_ENABLED is harmless to leave
|
|
# set system-wide on the dogfood image.
|
|
CGO_ENABLED = "1"
|
|
|
|
[tools]
|
|
# Languages and runtimes.
|
|
bun = "1.2.15"
|
|
go = "1.26.2"
|
|
node = "22.19.0"
|
|
pnpm = "10.33.2"
|
|
|
|
# Codegen and proto toolchain.
|
|
"go:github.com/coder/sqlc/cmd/sqlc" = "337309bfb9524f38466a5090e310040fc7af0203"
|
|
"go:go.uber.org/mock/mockgen" = "v0.6.0"
|
|
"go:storj.io/drpc/cmd/protoc-gen-go-drpc" = "v0.0.34"
|
|
protoc = "23.4"
|
|
protoc-gen-go = "1.30.0"
|
|
|
|
# Go development tools.
|
|
"go:github.com/golang-migrate/migrate/v4/cmd/migrate" = "v4.19.0"
|
|
"go:github.com/goreleaser/nfpm/v2/cmd/nfpm" = "v2.35.1"
|
|
"go:github.com/mikefarah/yq/v4" = "v4.44.3"
|
|
"go:github.com/quasilyte/go-ruleguard/cmd/ruleguard" = "v0.3.13"
|
|
"go:github.com/swaggo/swag/cmd/swag" = "v1.16.2"
|
|
"go:golang.org/x/tools/cmd/goimports" = "v0.41.0"
|
|
"go:golang.org/x/tools/gopls" = "v0.21.0"
|
|
"go:gotest.tools/gotestsum" = "v1.9.0"
|
|
"go:mvdan.cc/sh/v3/cmd/shfmt" = "v3.12.0"
|
|
|
|
# Infrastructure, release, and lint CLIs.
|
|
"aqua:ahmetb/kubectx/kubens" = "0.9.4"
|
|
cosign = "2.4.3"
|
|
golangci-lint = "1.64.8"
|
|
kubectx = "0.9.4"
|
|
syft = "1.20.0"
|
|
terraform = "1.15.2"
|
|
|
|
# Developer-environment niceties for the dogfood image. Non-dogfood
|
|
# users who run `mise install` here will pull these too; they are
|
|
# small, optional conveniences, and mise does nothing without the
|
|
# user's explicit `mise install` invocation.
|
|
#
|
|
# `gh` is intentionally absent from this manifest: the dogfood
|
|
# image ships a wrapper at /usr/local/bin/gh that bridges
|
|
# `coder external-auth` into `gh`, and a mise shim earlier in
|
|
# PATH would bypass it.
|
|
"aqua:crate-ci/typos" = "1.46.1"
|
|
"aqua:jj-vcs/jj" = "0.41.0"
|
|
"aqua:watchexec/watchexec" = "2.5.1"
|
|
doctl = "1.158.0"
|
|
lazygit = "0.61.1"
|
|
|
|
# Pre-installs the binary so the upstream devcontainers-cli coder
|
|
# module's `command -v devcontainer` short-circuit fires
|
|
"npm:@devcontainers/cli" = "0.87.0"
|
|
|
|
# helm publishes binaries at get.helm.sh, not on GitHub. Mise's aqua
|
|
# plugin templates the URL without the `v` prefix (404), and the
|
|
# github backend can't find the binary (helm only publishes signatures
|
|
# on GitHub). The http backend with a templated URL covers
|
|
# linux/macos cleanly. Windows is omitted (different extension);
|
|
# the dogfood image is linux/amd64-only and nobody on the team runs
|
|
# helm via mise on Windows.
|
|
[tools."http:helm"]
|
|
version = "3.12.0"
|
|
url = 'https://get.helm.sh/helm-v{{version}}-{{os(macos="darwin")}}-{{arch(x64="amd64")}}.tar.gz'
|