Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion .github/workflows/build-claude-code.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,8 @@ on:
branches: [master]
paths:
- "claude-code/.devcontainer/Dockerfile"
schedule:
- cron: '0 11 * * *'
workflow_dispatch:

permissions:
Expand Down Expand Up @@ -32,7 +34,7 @@ jobs:
verify-command: "bun --version || true && claude --version && mise --version && fish --version"
- target: sandbox
image-suffix: claude-code-sandbox
verify-command: "claude --version && mise --version && fish --version && iptables --version"
verify-command: "claude --version && mise --version && fish --version && which iptables"
steps:
- uses: actions/checkout@v6

Expand Down Expand Up @@ -74,6 +76,7 @@ jobs:
push: true
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}
no-cache: ${{ github.event_name != 'push' }}
cache-from: type=gha,scope=${{ matrix.target }}
cache-to: type=gha,mode=max,scope=${{ matrix.target }}

Expand Down
13 changes: 11 additions & 2 deletions claude-code/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,10 @@ Both variants are built for:
- `:<git-sha>` — pinned to a specific commit
- `:<YYYYMMDD>` — date-based tag (e.g., `20260319`)

## Automatic Rebuilds

The image rebuilds daily at 5am MT (11:00 UTC) with no Docker cache, picking up the latest Claude Code, Playwright, and other tools. Manual rebuilds can be triggered via the "Run workflow" button in the Actions UI.

## Quick Start

### Default variant
Expand Down Expand Up @@ -125,6 +129,11 @@ node = "22"
### Optional: `.devcontainer/init-plugins.sh`

Claude Code plugin initialization. Runs once at container creation. Idempotent.
Wire it into `postCreateCommand` in your `devcontainer.json`:

```jsonc
"postCreateCommand": "bash .devcontainer/init-plugins.sh"
```

```bash
#!/bin/bash
Expand Down Expand Up @@ -204,7 +213,7 @@ If your project has additional services, create volume mounts in `devcontainer.j

## Playwright Version Strategy

The image bakes in a Playwright browser binary at a specific version (controlled by the `PLAYWRIGHT_VERSION` build arg).
The image bakes in a Playwright browser binary at a specific version (controlled by the `PLAYWRIGHT_VERSION` build arg). Daily rebuilds keep this reasonably current.

- If your project's `@playwright/test` version **matches** the image — zero startup cost, browser is ready
- If your project's version **differs** — Playwright auto-downloads the correct browser on first test run (~10s graceful fallback)
Expand All @@ -215,7 +224,7 @@ The image bakes in a Playwright browser binary at a specific version (controlled
| Arg | Default | Description |
|-----|---------|-------------|
| `GIT_DELTA_VERSION` | `0.18.2` | git-delta version |
| `PLAYWRIGHT_VERSION` | `1.50.1` | Playwright browser binary version |
| `PLAYWRIGHT_VERSION` | `1.58.2` | Playwright browser binary version |
| `AGENT_BROWSER_VERSION` | `0.14.0` | agent-browser version (default target only) |

## Building Locally
Expand Down
Loading