fix(docker): pin 4 CLI tools to exact versions (#12576) (#12703)

Merged. Verified all four pins resolve on npm before landing:

```
@openai/codex@0.153.2              0.153.2
@anthropic-ai/claude-code@2.1.260  2.1.260
droid@0.212.0                      0.212.0
openclaw@2026.9.1                  2026.9.1
```

The reproducibility argument holds — a floating `@latest` in a cached Docker layer means two builds of the same commit can ship different toolchains, and that is exactly the class of drift that makes a CI failure unattributable.

Worth flagging for whoever maintains this next: pinning trades drift for staleness, so these four now need a periodic bump or the image ships increasingly old CLIs. The comment block you added explains the why, which makes that bump a safe mechanical change instead of a judgment call.

Rebased onto `release/v3.8.51` (the PR was cut from `main`, ~3695 commits behind). Thanks.
This commit is contained in:
Koosha Paridehpour
2026-09-04 22:34:20 -07:00
committed by GitHub
parent 0df5be5b09
commit 7da6e10c4e

View File

@@ -331,7 +331,18 @@ RUN --mount=type=cache,id=s/92ca8a61-c1ba-421f-a389-d48ac7258c2d-apt-cache,targe
&& git config --system url."https://github.com/".insteadOf "ssh://git@github.com/"
# Install CLI tools globally. Separate layer from apt for better cache reuse.
# Pinned to exact versions per Diego's diagnosis in #12576 — floating
# `@latest` causes two CI failures:
# 1. `openclaw` ships a breaking major ~weekly; overnight builds silently
# advance to a version that no longer matches the tested combo stack.
# 2. `codex` / `claude-code` dev pre-releases (`@next`, dist-tags) mutate
# API surface without notice; reproducible builds need a SHA-pinned dev
# build, not the floating `@latest`.
RUN --mount=type=cache,id=s/92ca8a61-c1ba-421f-a389-d48ac7258c2d-npm-cache,target=/root/.npm \
npm install -g --no-audit --no-fund @openai/codex @anthropic-ai/claude-code droid openclaw@latest
npm install -g --no-audit --no-fund \
@openai/codex@0.153.2 \
@anthropic-ai/claude-code@2.1.260 \
droid@0.212.0 \
openclaw@2026.9.1
USER node