Skip to content

Where people and agents ship software together. The open-source git platform for the whole job: issues, agents, checks and deploys to the edge.

Commit

The runner base no longer carries the Claude Code CLI. g1t runs no agents of its own any more (people's own harnesses do the work), and nothing in the runner calls `claude`, so the base drops the CLI, its pinned version, its root-refusing user note and its settings file, and the deploy tool stops reading its version. The base is about 4.16 GB instead of 4.52 GB.

Not yet shippable on its own: services/runner/base/Dockerfile changed, so a runner deploy refuses until a new base is built and pushed and services/runner/base.json records it (`node scripts/deploy.mjs build-base`, or the runner-base workflow, which opens the pull request that records it). Merge this together with that base.json.

syntaqxcommitted Parent9232a85Browse files
4 files+8−250/4 viewed
+1−1
11 # Rebuilds the base image of g1t's sandboxes (services/runner/base/Dockerfile:
2−# the OS, toolchains and the Claude Code CLI), pushes it to Cloudflare's
2+# the OS and toolchains), pushes it to Cloudflare's
33 # registry, and opens a pull request that records it in
44 # services/runner/base.json. Merging that pull request is what rolls it out:
55 # the next deploy builds the runner's image on it, in seconds.
+1−1
276276
277277 | Image | Built from | Rebuilt |
278278 | --- | --- | --- |
279−| The base | `services/runner/base/Dockerfile`: Debian, Node, Python, Docker, Go, Rust, Java, .NET, Ruby and the Claude Code CLI | When its folder changes, weekly by `runner-base.yml`, or by hand with `build-base` |
279+| The base | `services/runner/base/Dockerfile`: Debian, Node, Python, Docker, Go, Rust, Java, .NET and Ruby | When its folder changes, weekly by `runner-base.yml`, or by hand with `build-base` |
280280 | The runner | `services/runner/Dockerfile`: the base plus the `g1t-runner` binary | When the binary or the base changes |
281281
282282 `services/runner/base.json` records the base that was pushed;
+1−2
22 // (docs.g1t.sh/guides/deploy-to-cloudflare/#the-runners-images):
33 //
44 // base g1t-runner:base-<date>-<inputs> services/runner/base/Dockerfile:
5−// the OS, toolchains and the Claude Code CLI. Rebuilt only when
5+// the OS and toolchains. Rebuilt only when
66 // its folder changes, or weekly (.g1t/workflows/runner-base.yml),
77 // and recorded in services/runner/base.json.
88 // runner g1t-runner:<content> services/runner/Dockerfile: the
221221 'echo "dotnet=$(dotnet --version)"',
222222 'echo "ruby=$(ruby --version | cut -d" " -f2)"',
223223 'echo "git=$(git --version | cut -d" " -f3)"',
224− 'echo "claude_code=$(claude --version | cut -d" " -f1)"',
225224 'echo "docker=$(dockerd --version | cut -d" " -f3 | tr -d ,)"',
226225 'echo "debian=$(cat /etc/debian_version)"',
227226 ].join("; ");
+5−21
11 # syntax=docker/dockerfile:1.7
22 #
33 # g1t-runner-base: everything a g1t sandbox has apart from the g1t runner
4−# itself. Agents, checks, the merge queue, workflow jobs and g1t.page
4+# itself. Checks, the merge queue, workflow jobs and g1t.page
55 # builds all run in it: git, Node, Python, Go, Rust (with the formatter,
66 # the linter, and the wasm32 and musl targets), Java (Temurin 21), .NET
77 # (SDK 8), Ruby (3.3), the usual build tools, Docker (Engine, Buildx,
8−# Compose), and the Claude Code CLI.
8+# Compose).
99 #
1010 # Built and pushed by `node scripts/deploy.mjs build-base` (by hand, or by
1111 # .g1t/workflows/runner-base.yml), which records what it pushed in
1212 # services/runner/base.json. The runner's own image
1313 # (services/runner/Dockerfile) is this plus one file, so a change to the
14−# runner builds in seconds. docs/DEPLOYING.md explains the two.
14+# runner builds in seconds. The deploy-to-cloudflare guide explains the two.
1515 #
1616 # Layers go from what changes least to what changes most: the system's
17−# packages, Docker, then Go, then Rust, then Java, .NET and Ruby, then the
18−# Claude Code CLI on top, so a new CLI version rebuilds and pushes one
19−# layer.
17+# packages, Docker, then Go, then Rust, then Java, .NET and Ruby.
2018 #
2119 # Java and Ruby live in the runner's tool cache (RUNNER_TOOL_CACHE,
2220 # /home/runner/_tool), laid out as the setup actions look for them, so
10098 && rm -rf /tmp/go.tgz /usr/local/go/test /usr/local/go/api /usr/local/go/doc \
10199 && ln -s /usr/local/go/bin/go /usr/local/go/bin/gofmt /usr/local/bin/
102100
103−# Claude Code refuses to skip permission prompts as root.
101+# Install the Rust toolchain for the unprivileged job user.
104102 USER node
105103 ENV HOME=/home/node
106104 ENV PATH=/home/node/.cargo/bin:/home/node/go/bin:$PATH
191189 && touch "$prefix.complete" \
192190 && chown -R node:node "/home/runner/_tool/Ruby"
193191 ENV PATH=${JAVA_HOME}/bin:/home/runner/_tool/Ruby/${RUBY_VERSION}/x64/bin:$PATH
194−
195−USER node
196192
197−# Commits are the g1t agent's; the harness does not sign them as its own.
198−RUN mkdir -p /home/node/.claude \
199− && echo '{"includeCoAuthoredBy": false}' > /home/node/.claude/settings.json
200−
201−# The Claude Code CLI, pinned, on top: it changes most often of anything
202−# here, and is one layer to rebuild and push.
203−ARG CLAUDE_CODE_VERSION=2.1.291
204−USER root
205−# npm's cache stays in BuildKit's cache, out of the image.
206−RUN --mount=type=cache,target=/tmp/npm-cache \
207− npm install --global --no-audit --no-fund --cache /tmp/npm-cache "@anthropic-ai/claude-code@${CLAUDE_CODE_VERSION}" \
208− && claude --version
209193 USER node

Comments

Sign in to comment.