Skip to content

devcontainer: add prebuild-based dev environment + CI#88

Merged
bilby91 merged 2 commits into
mainfrom
devcontainer-setup
Jun 12, 2026
Merged

devcontainer: add prebuild-based dev environment + CI#88
bilby91 merged 2 commits into
mainfrom
devcontainer-setup

Conversation

@bilby91

@bilby91 bilby91 commented Jun 12, 2026

Copy link
Copy Markdown
Member

Sets up a devcontainer for this repo using the same strategy as crunchloop/dap — a two-file build split where CI prebuilds a multi-arch toolchain image and the runtime config just pulls it.

Build

  • devcontainer-build.json — heavy image built in CI: base:debian + Go 1.26, Node 22 (for Claude Code), github-cli, docker-in-docker, vscode-server, make, plus local features.
  • devcontainer.json + docker-compose.yml — runtime config pulls ghcr.io/crunchloop/devcontainer/devcontainer:latest; privileged for docker-in-docker so go test -tags=integration ./test/integration/... can drive docker compose.
  • post-create.sh — persists Claude config across rebuilds + go mod download.

Local features (published like dap's)

  • golangci-lint — pinned to v2.5.0, matching the Makefile and ci.yml lint job.
  • claude-code — Claude Code CLI (npm-based).

CI

  • devcontainer-cache.yml — multi-arch (amd64/arm64) prebuild on pushes to main touching .devcontainer/**, merged into a :latest manifest on GHCR.
  • devcontainer-release.yml — publishes the local features (manual dispatch).

Repo-specific departures from dap

  • docker-in-docker instead of backing services — this repo's only runtime dependency is Docker itself (for the integration suite), not postgres/rabbitmq/etc.
  • Dropped dap's ECR pull-through-cache invalidation job — that used dap's AWS role and tenant infra.

Notes

  • The Apple container backend (runtime/applecontainer) is darwin/arm64-only and is not built in this Linux container, matching the Linux CI jobs (make bridge no-ops). Use a native macOS checkout for that backend.
  • The prebuild image won't exist until devcontainer-cache.yml runs on main (or via workflow_dispatch); until then "Reopen in Container" can't pull :latest.

🤖 Generated with Claude Code

Mirrors the crunchloop/dap devcontainer strategy: a two-file build split
where CI prebuilds a multi-arch toolchain image and the runtime config
just pulls it.

- devcontainer-build.json: base:debian + Go 1.26, Node 22, github-cli,
  docker-in-docker, and local golangci-lint (v2.5.0, pinned to Makefile)
  and claude-code features.
- devcontainer.json + docker-compose.yml: pull the prebuilt image; dind
  (privileged) so the integration suite can drive docker compose.
- post-create.sh: persist Claude config across rebuilds + go mod download.
- devcontainer-cache.yml: multi-arch (amd64/arm64) prebuild on main,
  merged into a :latest manifest on GHCR.
- devcontainer-release.yml: publish local features.

The Apple container backend stays darwin/arm64-only and is not built in
this Linux container, matching the Linux CI jobs.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jun 12, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@bilby91, we couldn't start this review because you've reached your PR review rate limit.

More reviews will be available in 2 hours, 21 minutes, and 46 seconds. Learn how PR review limits work.

Your organization has run out of usage credits. Purchase more credits in the billing tab to continue.

⌛ How to resolve this issue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans include higher PR review limits than trial, open-source, and free plans. In all cases, reviews become available again over time. During sustained high-volume PR review activity, CodeRabbit may temporarily slow when the next review becomes available.

Please see our Fair Usage Limits Policy for further information.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: c89e00ec-374d-4bbf-b28d-54ffd33e1cb8

📥 Commits

Reviewing files that changed from the base of the PR and between fdd8054 and 1fc9d59.

📒 Files selected for processing (9)
  • .devcontainer/README.md
  • .devcontainer/devcontainer-build.json
  • .devcontainer/devcontainer.json
  • .devcontainer/docker-compose.yml
  • .devcontainer/features/golangci-lint/devcontainer-feature.json
  • .devcontainer/features/golangci-lint/install.sh
  • .devcontainer/post-create.sh
  • .github/workflows/devcontainer-cache.yml
  • .github/workflows/devcontainer-release.yml
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch devcontainer-setup

Comment @coderabbitai help to get the list of available commands and usage tips.

Drop node, vscode-server, and the claude-code feature, plus all vscode
customizations and the claude-config volume/symlink plumbing that only
existed for Claude Code. The image is now base + Go, github-cli,
docker-in-docker, make, and the golangci-lint local feature.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@bilby91 bilby91 merged commit ae4dd61 into main Jun 12, 2026
5 of 6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants