Skip to content

Commit ea37f92

Browse files
committed
Merge remote-tracking branch 'github/master' into feat/gh-stack
# Conflicts: # .github/workflows/build-claude-code.yml # .github/workflows/ci.yml
2 parents 24b733e + 6341d4c commit ea37f92

19 files changed

Lines changed: 288 additions & 240 deletions

File tree

‎.claude/CLAUDE.md‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ Never duplicate: wiki pages link to READMEs, READMEs link back. Every wiki page
5454
- Use comments in devcontainer.json (JSONC format)
5555
- Dockerfile instruction order: ARG → FROM → packages → user/permissions → tools → LABEL
5656
- For images with multiple binary downloads, use multi-stage parallel builds (see `ralphex-fe/Dockerfile`)
57+
- Commit every `.sh` file as `100755` (they all have a shebang); check with `git ls-files -s '*.sh'`
58+
- README headings are plain text, no emoji. Per-image READMEs use these shared section names, in this order, wherever the section exists: `Features` → `Multi-platform Support` → `Image Tags` → `Usage` → image-specific sections → `Build Args` → `Building the Image` → `Resources` → `License` → `Contributing`. Shared boilerplate (platform list, buildx block) is worded identically; only each image's tag scheme and paths differ.
5759

5860
## Validation
5961

‎.devcontainer/claude-sandbox/devcontainer.json‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
// **General**
2424
"redhat.vscode-yaml",
2525
"bierner.markdown-preview-github-styles",
26+
"bierner.markdown-mermaid",
2627
"ms-azuretools.vscode-docker"
2728
],
2829
"settings": {

‎.devcontainer/devcontainer.json‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@
2323
"redhat.vscode-yaml",
2424
// Markdown Preview Github Styles - Markdown preview
2525
"bierner.markdown-preview-github-styles",
26+
// Markdown Preview Mermaid Support - Mermaid diagrams
27+
"bierner.markdown-mermaid",
2628
// Docker - Dockerfile support
2729
"ms-azuretools.vscode-docker"
2830
],

‎.devcontainer/init-plugins.sh‎

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -46,13 +46,11 @@ done
4646

4747
# Initialize rtk global hook for Claude Code (auto-rewrite mode).
4848
# --hook-only: installs only the PreToolUse rewrite hook, no workspace artifacts.
49-
# RTK_TELEMETRY_DISABLED=1 is the supported opt-out, not a workaround: since
50-
# rtk-ai/rtk#2477 (v0.44.0+) it short-circuits the telemetry consent prompt that
51-
# would otherwise block on stdin here. rtk's own TTY check is not enough — a
52-
# devcontainer postCreateCommand gets a pseudo-TTY, so the prompt believes it is
53-
# interactive. timeout stays as a backstop against a future init-time hang.
49+
# Telemetry consent prompt: RTK_TELEMETRY_DISABLED=1 opts out (rtk-ai/rtk#2477),
50+
# closed stdin defeats the pseudo-TTY postCreateCommand hands us, and timeout
51+
# backstops any other init-time hang.
5452
echo "Initializing rtk (token optimizer)..."
55-
RTK_TELEMETRY_DISABLED=1 timeout 10 rtk init -g --hook-only --auto-patch || {
53+
RTK_TELEMETRY_DISABLED=1 timeout 10 rtk init -g --hook-only --auto-patch < /dev/null || {
5654
echo "Note: rtk init may have already been configured or rtk not available"
5755
}
5856

‎.github/workflows/build-claude-code.yml‎

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,19 +75,19 @@ jobs:
7575
matrix:
7676
include:
7777
- image-suffix: claude-code
78-
verify-command: "bun --version || true && claude --version && mise --version && zsh --version && gh --version && gh stack --version && rtk --version && ralphex --version && test -x /usr/local/bin/patch-playwright-mcp && test -r /etc/claude-code/managed-settings.json && jq -r '.hooks.SessionStart[0].hooks[0].command' /etc/claude-code/managed-settings.json | grep -qx /usr/local/bin/patch-playwright-mcp && printenv AGENT_BROWSER_EXECUTABLE_PATH | grep -qx /usr/bin/chromium && zsh -ic 'typeset -p ZSH_THEME' | grep -q powerlevel10k/powerlevel10k && stat -c %U /home/node/.local/share | grep -qx node"
78+
verify-command: "bun --version || true && claude --version && mise --version && zsh --version && gh --version && gh stack --version && rtk --version && ralphex --version && test -x /usr/local/bin/patch-playwright-mcp && test -r /etc/claude-code/managed-settings.json && jq -r '.hooks.SessionStart[0].hooks[0].command' /etc/claude-code/managed-settings.json | grep -qx /usr/local/bin/patch-playwright-mcp && printenv AGENT_BROWSER_EXECUTABLE_PATH | grep -qx /usr/bin/chromium && zsh -ic 'typeset -p ZSH_THEME' | grep -q powerlevel10k/powerlevel10k && stat -c %U /home/node/.local/share | grep -qx node && stat -c %U /home/node/.config/gh | grep -qx node"
7979
runner: ubuntu-24.04
8080
arch: amd64
8181
- image-suffix: claude-code
82-
verify-command: "bun --version || true && claude --version && mise --version && zsh --version && gh --version && gh stack --version && rtk --version && ralphex --version && test -x /usr/local/bin/patch-playwright-mcp && test -r /etc/claude-code/managed-settings.json && jq -r '.hooks.SessionStart[0].hooks[0].command' /etc/claude-code/managed-settings.json | grep -qx /usr/local/bin/patch-playwright-mcp && printenv AGENT_BROWSER_EXECUTABLE_PATH | grep -qx /usr/bin/chromium && zsh -ic 'typeset -p ZSH_THEME' | grep -q powerlevel10k/powerlevel10k && stat -c %U /home/node/.local/share | grep -qx node"
82+
verify-command: "bun --version || true && claude --version && mise --version && zsh --version && gh --version && gh stack --version && rtk --version && ralphex --version && test -x /usr/local/bin/patch-playwright-mcp && test -r /etc/claude-code/managed-settings.json && jq -r '.hooks.SessionStart[0].hooks[0].command' /etc/claude-code/managed-settings.json | grep -qx /usr/local/bin/patch-playwright-mcp && printenv AGENT_BROWSER_EXECUTABLE_PATH | grep -qx /usr/bin/chromium && zsh -ic 'typeset -p ZSH_THEME' | grep -q powerlevel10k/powerlevel10k && stat -c %U /home/node/.local/share | grep -qx node && stat -c %U /home/node/.config/gh | grep -qx node"
8383
runner: ubuntu-24.04-arm
8484
arch: arm64
8585
- image-suffix: claude-code-sandbox
86-
verify-command: "claude --version && mise --version && zsh --version && gh --version && gh stack --version && which iptables && rtk --version && ralphex --version && test -x /usr/local/bin/patch-playwright-mcp && test -r /etc/claude-code/managed-settings.json && jq -r '.hooks.SessionStart[0].hooks[0].command' /etc/claude-code/managed-settings.json | grep -qx /usr/local/bin/patch-playwright-mcp && zsh -ic 'typeset -p ZSH_THEME' | grep -q powerlevel10k/powerlevel10k && stat -c %U /home/node/.local/share | grep -qx node"
86+
verify-command: "claude --version && mise --version && zsh --version && gh --version && gh stack --version && which iptables && rtk --version && ralphex --version && test -x /usr/local/bin/patch-playwright-mcp && test -r /etc/claude-code/managed-settings.json && jq -r '.hooks.SessionStart[0].hooks[0].command' /etc/claude-code/managed-settings.json | grep -qx /usr/local/bin/patch-playwright-mcp && zsh -ic 'typeset -p ZSH_THEME' | grep -q powerlevel10k/powerlevel10k && stat -c %U /home/node/.local/share | grep -qx node && stat -c %U /home/node/.config/gh | grep -qx node"
8787
runner: ubuntu-24.04
8888
arch: amd64
8989
- image-suffix: claude-code-sandbox
90-
verify-command: "claude --version && mise --version && zsh --version && gh --version && gh stack --version && which iptables && rtk --version && ralphex --version && test -x /usr/local/bin/patch-playwright-mcp && test -r /etc/claude-code/managed-settings.json && jq -r '.hooks.SessionStart[0].hooks[0].command' /etc/claude-code/managed-settings.json | grep -qx /usr/local/bin/patch-playwright-mcp && zsh -ic 'typeset -p ZSH_THEME' | grep -q powerlevel10k/powerlevel10k && stat -c %U /home/node/.local/share | grep -qx node"
90+
verify-command: "claude --version && mise --version && zsh --version && gh --version && gh stack --version && which iptables && rtk --version && ralphex --version && test -x /usr/local/bin/patch-playwright-mcp && test -r /etc/claude-code/managed-settings.json && jq -r '.hooks.SessionStart[0].hooks[0].command' /etc/claude-code/managed-settings.json | grep -qx /usr/local/bin/patch-playwright-mcp && zsh -ic 'typeset -p ZSH_THEME' | grep -q powerlevel10k/powerlevel10k && stat -c %U /home/node/.local/share | grep -qx node && stat -c %U /home/node/.config/gh | grep -qx node"
9191
runner: ubuntu-24.04-arm
9292
arch: arm64
9393
runs-on: ${{ matrix.runner }}

‎.github/workflows/ci.yml‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -117,12 +117,12 @@ jobs:
117117
add_image "claude-code" \
118118
"claude-code/.devcontainer" \
119119
"claude-code/.devcontainer/Dockerfile" \
120-
"bun --version || true && claude --version && mise --version && zsh --version && gh --version && gh stack --version && rtk --version && ralphex --version && test -x /usr/local/bin/patch-playwright-mcp && test -r /etc/claude-code/managed-settings.json && jq -r '.hooks.SessionStart[0].hooks[0].command' /etc/claude-code/managed-settings.json | grep -qx /usr/local/bin/patch-playwright-mcp && printenv AGENT_BROWSER_EXECUTABLE_PATH | grep -qx /usr/bin/chromium && zsh -ic 'typeset -p ZSH_THEME' | grep -q powerlevel10k/powerlevel10k && stat -c %U /home/node/.local/share | grep -qx node" \
120+
"bun --version || true && claude --version && mise --version && zsh --version && gh --version && gh stack --version && rtk --version && ralphex --version && test -x /usr/local/bin/patch-playwright-mcp && test -r /etc/claude-code/managed-settings.json && jq -r '.hooks.SessionStart[0].hooks[0].command' /etc/claude-code/managed-settings.json | grep -qx /usr/local/bin/patch-playwright-mcp && printenv AGENT_BROWSER_EXECUTABLE_PATH | grep -qx /usr/bin/chromium && zsh -ic 'typeset -p ZSH_THEME' | grep -q powerlevel10k/powerlevel10k && stat -c %U /home/node/.local/share | grep -qx node && stat -c %U /home/node/.config/gh | grep -qx node" \
121121
"default"
122122
add_image "claude-code-sandbox" \
123123
"claude-code/.devcontainer" \
124124
"claude-code/.devcontainer/Dockerfile" \
125-
"claude --version && mise --version && zsh --version && gh --version && gh stack --version && which iptables && rtk --version && ralphex --version && test -x /usr/local/bin/patch-playwright-mcp && test -r /etc/claude-code/managed-settings.json && jq -r '.hooks.SessionStart[0].hooks[0].command' /etc/claude-code/managed-settings.json | grep -qx /usr/local/bin/patch-playwright-mcp && zsh -ic 'typeset -p ZSH_THEME' | grep -q powerlevel10k/powerlevel10k && stat -c %U /home/node/.local/share | grep -qx node" \
125+
"claude --version && mise --version && zsh --version && gh --version && gh stack --version && which iptables && rtk --version && ralphex --version && test -x /usr/local/bin/patch-playwright-mcp && test -r /etc/claude-code/managed-settings.json && jq -r '.hooks.SessionStart[0].hooks[0].command' /etc/claude-code/managed-settings.json | grep -qx /usr/local/bin/patch-playwright-mcp && zsh -ic 'typeset -p ZSH_THEME' | grep -q powerlevel10k/powerlevel10k && stat -c %U /home/node/.local/share | grep -qx node && stat -c %U /home/node/.config/gh | grep -qx node" \
126126
"sandbox"
127127
fi
128128

‎README.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ This repository contains Dockerfiles for custom Docker images hosted on GitHub C
44

55
**New here?** The [wiki](https://github.com/gatezh/devcontainers/wiki) has a [guide to picking an image](https://github.com/gatezh/devcontainers/wiki/Choosing-an-Image) and explains [what `latest` means and when it moves](https://github.com/gatezh/devcontainers/wiki/Image-Tags-and-Rebuild-Policy).
66

7-
## 📚 Image Documentation
7+
## Image Documentation
88

99
### Devcontainer Images
1010

@@ -18,7 +18,7 @@ This repository contains Dockerfiles for custom Docker images hosted on GitHub C
1818

1919
- **[ralphex-fe](./ralphex-fe/README.md)** - Bun + Hugo Extended on ralphex base (standalone image)
2020

21-
## 📖 Guides (wiki)
21+
## Guides (wiki)
2222

2323
Cross-image guides and host-level procedures live in the [wiki](https://github.com/gatezh/devcontainers/wiki), because they go stale when Docker or GitHub changes rather than when this repo does.
2424

‎bun/README.md‎

Lines changed: 53 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -9,44 +9,16 @@ A multiplatform development container image with Bun runtime, optimized for mode
99
- **Zsh** - Modern shell with better VS Code integration
1010
- **Alpine Linux** - Lightweight base image
1111

12-
## Multiplatform Support
12+
## Multi-platform Support
1313

1414
This image is built for multiple architectures:
1515
- `linux/amd64` (x86_64)
1616
- `linux/arm64` (ARM64/Apple Silicon)
1717

18-
## Building the Image
19-
20-
To build this multiplatform image, use Docker Buildx:
21-
22-
```bash
23-
docker buildx build \
24-
--platform linux/amd64,linux/arm64 \
25-
-t ghcr.io/<USERNAME>/devcontainers/bun:bun<BUN_VERSION>-alpine \
26-
-t ghcr.io/<USERNAME>/devcontainers/bun:latest \
27-
--push \
28-
.devcontainer
29-
```
30-
31-
### Example with specific versions:
32-
33-
```bash
34-
docker buildx build \
35-
--platform linux/amd64,linux/arm64 \
36-
-t ghcr.io/myusername/devcontainers/bun:bun1.3.5-alpine \
37-
-t ghcr.io/myusername/devcontainers/bun:latest \
38-
--push \
39-
.devcontainer
40-
```
41-
42-
**Replace:**
43-
- `<USERNAME>` with your GitHub username or organization
44-
- `<BUN_VERSION>` with the Bun version (e.g., `1.3.5`)
18+
## Image Tags
4519

46-
**Note:** The `--push` flag requires you to be logged in to GitHub Container Registry:
47-
```bash
48-
echo $GITHUB_TOKEN | docker login ghcr.io -u <USERNAME> --password-stdin
49-
```
20+
- `latest` — most recent build
21+
- `bun<BUN_VERSION>-alpine` — version-specific tag (e.g., `bun1.3.5-alpine`)
5022

5123
## Usage
5224

@@ -96,7 +68,31 @@ The development container comes pre-configured with the following extensions:
9668
- **Tailwind CSS IntelliSense** (`bradlc.vscode-tailwindcss`) - Autocomplete and syntax highlighting
9769
- **Tailwind Fold** (`stivo.tailwind-fold`) - Fold long Tailwind class strings
9870

99-
## Version Information
71+
## Development Workflow
72+
73+
### Starting the Dev Container
74+
75+
1. Open your project in VS Code
76+
2. Press `F1` and select "Dev Containers: Reopen in Container"
77+
3. VS Code will pull the image and start the container
78+
79+
### Using Bun
80+
81+
```bash
82+
# Install dependencies
83+
bun install
84+
85+
# Run scripts
86+
bun run build
87+
88+
# Execute files
89+
bun run index.ts
90+
91+
# Start development server
92+
bun run dev
93+
```
94+
95+
## Build Args
10096

10197
The image uses a specific version of Bun defined as a build argument:
10298

@@ -116,28 +112,37 @@ docker buildx build \
116112
.devcontainer
117113
```
118114

119-
## Development Workflow
115+
## Building the Image
120116

121-
### Starting the Dev Container
117+
To build this multiplatform image, use Docker Buildx:
122118

123-
1. Open your project in VS Code
124-
2. Press `F1` and select "Dev Containers: Reopen in Container"
125-
3. VS Code will pull the image and start the container
119+
```bash
120+
docker buildx build \
121+
--platform linux/amd64,linux/arm64 \
122+
-t ghcr.io/<USERNAME>/devcontainers/bun:bun<BUN_VERSION>-alpine \
123+
-t ghcr.io/<USERNAME>/devcontainers/bun:latest \
124+
--push \
125+
.devcontainer
126+
```
126127

127-
### Using Bun
128+
### Example with Specific Versions
128129

129130
```bash
130-
# Install dependencies
131-
bun install
132-
133-
# Run scripts
134-
bun run build
131+
docker buildx build \
132+
--platform linux/amd64,linux/arm64 \
133+
-t ghcr.io/myusername/devcontainers/bun:bun1.3.5-alpine \
134+
-t ghcr.io/myusername/devcontainers/bun:latest \
135+
--push \
136+
.devcontainer
137+
```
135138

136-
# Execute files
137-
bun run index.ts
139+
**Replace:**
140+
- `<USERNAME>` with your GitHub username or organization
141+
- `<BUN_VERSION>` with the Bun version (e.g., `1.3.5`)
138142

139-
# Start development server
140-
bun run dev
143+
**Note:** The `--push` flag requires you to be logged in to GitHub Container Registry:
144+
```bash
145+
echo $GITHUB_TOKEN | docker login ghcr.io -u <USERNAME> --password-stdin
141146
```
142147

143148
## License

‎claude-bun/.devcontainer/init-firewall.sh‎

100644100755
File mode changed.

‎claude-bun/README.md‎

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,18 @@ Claude Code development container based on the [official Anthropic devcontainer
1212
- **Session persistence** for command history and Claude configuration between restarts
1313
- **Multi-platform support** (linux/amd64, linux/arm64)
1414

15-
## Quick Start
15+
## Multi-platform Support
16+
17+
This image is built for multiple architectures:
18+
- `linux/amd64` (x86_64)
19+
- `linux/arm64` (ARM64/Apple Silicon)
20+
21+
## Image Tags
22+
23+
- `latest` — most recent build
24+
- `bun<BUN_VERSION>-slim` — version-specific tag (e.g., `bun1.3.5-slim`)
25+
26+
## Usage
1627

1728
### Using the pre-built image
1829

@@ -72,11 +83,6 @@ When executed with `--dangerously-skip-permissions`, devcontainers do **not prev
7283
| `devcontainer.json` | VS Code devcontainer settings |
7384
| `init-firewall.sh` | Firewall initialization script |
7485

75-
## Image Tags
76-
77-
- `ghcr.io/gatezh/devcontainers/claude-bun:latest` - Latest build
78-
- `ghcr.io/gatezh/devcontainers/claude-bun:bun1.3.5-slim` - Bun version specific tag
79-
8086
## Customization
8187

8288
### Adding VS Code extensions

0 commit comments

Comments
 (0)