@@ -5,6 +5,17 @@ ENV BUN_INSTALL=/usr/local
55ENV NODE_VERSION=24
66ENV GO_VERSION=1.26.5
77ENV GLAB_VERSION=1.111.0
8+ ENV OPENCODE_VERSION=1.18.13
9+ ENV CLAUDE_VERSION=2.1.224
10+ ENV DENO_VERSION=2.9.4
11+ ENV BUN_VERSION=1.3.14
12+ ENV COMPOSER_VERSION=2.10.2
13+ ENV CODEX_VERSION=0.147.0
14+ ENV COPILOT_VERSION=1.0.78
15+ ENV PI_VERSION=0.84.1
16+ ENV T3_VERSION=0.0.31
17+ ENV PNPM_VERSION=11.20.0
18+ ENV AGENT_BROWSER_VERSION=0.33.2
819ENV GOROOT=/usr/local/go
920ENV GOPATH=/home/coder/go
1021ENV PATH=$GOROOT/bin:$GOPATH/bin:$PATH
2536 # REPOS ####################################################################
2637 # Add all package repos first, then do a single apt-get update
2738 apt-get update && \
28- apt-get install -y --no-install-recommends curl wget software-properties-common gpg && \
39+ apt-get install -y --no-install-recommends curl wget gpg && \
2940 # Node repo
3041 curl -fsSL "https://deb.nodesource.com/setup_${NODE_VERSION}.x" | bash - && \
31- # PHP repo
32- add-apt-repository -y ppa:ondrej/php && \
3342 # GitHub CLI repo
3443 wget -qO /tmp/githubcli-archive-keyring.gpg https://cli.github.com/packages/githubcli-archive-keyring.gpg && \
3544 mkdir -p -m 755 /etc/apt/keyrings && \
4453 # Node
4554 nodejs \
4655 # PHP
47- php8.5-cli php8.5-common php8.5-curl php8.5-gd php8.5-imap php8.5- intl \
56+ php8.5-cli php8.5-common php8.5-curl php8.5-gd php8.5-intl \
4857 php8.5-mailparse php8.5-mbstring php8.5-mysql php8.5-pgsql php8.5-phpdbg \
4958 php8.5-readline php8.5-redis php8.5-soap php8.5-sqlite3 php8.5-xml \
5059 php8.5-zip php8.5-bcmath php8.5-apcu php8.5-imagick \
@@ -71,36 +80,37 @@ RUN \
7180 rm /tmp/go.tar.gz && \
7281 mkdir -p /home/coder/go && \
7382 # COMPOSER ##################################################################
74- curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer && \
83+ curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer --version=${COMPOSER_VERSION} && \
7584 # GLAB (GitLab CLI) ########################################################
7685 curl -fsSL "https://gitlab.com/gitlab-org/cli/-/releases/v${GLAB_VERSION}/downloads/glab_${GLAB_VERSION}_linux_$(dpkg --print-architecture).deb" -o /tmp/glab.deb && \
7786 dpkg -i /tmp/glab.deb && \
7887 rm -f /tmp/glab.deb && \
7988 # DENO ######################################################################
80- curl -fsSL https://deno.land/install.sh | sh && \
89+ curl -fsSL https://deno.land/install.sh | sh -s v${DENO_VERSION} && \
8190 # BUN #######################################################################
82- curl -fsSL https://bun.sh/install | bash && \
91+ curl -fsSL https://bun.sh/install | bash -s "bun-v${BUN_VERSION}" && \
8392 # CLAUDE ####################################################################
8493 # Install into /usr/local/bin (image layer) so the binary survives the
8594 # persistent /home/coder volume that Coder mounts over the home dir at runtime.
86- (curl -fsSL https://claude.ai/install.sh | bash || true) && \
95+ (curl -fsSL https://claude.ai/install.sh | bash -s ${CLAUDE_VERSION} || true) && \
8796 if [ -f /root/.local/bin/claude ]; then cp /root/.local/bin/claude /usr/local/bin/claude; fi && \
8897 if [ -f /root/bin/claude ]; then cp /root/bin/claude /usr/local/bin/claude; fi && \
8998 chmod 0755 /usr/local/bin/claude && \
9099 # OPENCODE ##################################################################
91- ( curl -fsSL https://opencode.ai/install | bash || true) && \
92- if [ -f /root/.opencode/bin/opencode ]; then cp /root/.opencode/bin/opencode /usr/local/bin/opencode; fi && \
100+ curl -fsSL https://opencode.ai/install | VERSION=${OPENCODE_VERSION} bash -s -- --no-modify-path && \
101+ cp /root/.opencode/bin/opencode /usr/local/bin/opencode && \
93102 chmod 0755 /usr/local/bin/opencode && \
103+ opencode --version && \
94104 # NPM: CODEX, COPILOT #######################################################
95- npm install -g @openai/codex @github/copilot && \
105+ npm install -g @openai/codex@${CODEX_VERSION} @github/copilot@${COPILOT_VERSION} && \
96106 # PI ########################################################################
97- npm install -g --ignore-scripts @earendil-works/pi-coding-agent && \
107+ npm install -g --ignore-scripts @earendil-works/pi-coding-agent@${PI_VERSION} && \
98108 # T3CODE (browser GUI for coding agents) ###################################
99- npm install -g t3 && \
109+ npm install -g t3@${T3_VERSION} && \
100110 # PNPM ######################################################################
101- npm install -g pnpm && \
111+ npm install -g pnpm@${PNPM_VERSION} && \
102112 # AGENT-BROWSER ##############################################################
103- npm install -g agent-browser && \
113+ npm install -g agent-browser@${AGENT_BROWSER_VERSION} && \
104114 runuser -u coder -- agent-browser install && \
105115 # PROFILE (DENO, BUN PATH) ##################################################
106116 echo '' >> /etc/profile && \
@@ -119,12 +129,12 @@ RUN \
119129 echo 'export XDG_RUNTIME_DIR="${XDG_RUNTIME_DIR:-/run/user/$(id -u)}"' >> /etc/profile && \
120130 echo 'export DOCKER_HOST="unix://${XDG_RUNTIME_DIR}/docker.sock"' >> /etc/profile && \
121131 # OWNERSHIP (coder can upgrade tools) ######################################
122- chown coder:coder /usr/local/bin/claude /usr/local/bin/opencode 2>/dev/null || true && \
123- chown -R coder:coder /home/coder/go 2>/dev/null || true && \
132+ chown coder:coder /usr/local/bin/claude /usr/local/bin/opencode && \
133+ chown -R coder:coder /home/coder/go && \
124134 # CLEANUP ###################################################################
125135 apt-get clean -y && \
126136 apt-get autoclean -y && \
127- apt-get remove -y wget software-properties-common && \
137+ apt-get remove -y wget && \
128138 apt-get autoremove -y && \
129139 rm -rf /var/lib/apt/lists/* /var/lib/log/* /tmp/* /var/tmp/* \
130140 /root/.npm /root/.cache /root/.local /root/.opencode /root/.bun
0 commit comments