Commit b345208
Flatten to single-image Coder workspace template
Shift away from the nested "outer workspace runs @devcontainers/cli
inside a devcontainer with its own sub-agent" model toward a flat
one-container-per-workspace design. The workspace container IS the dev
environment: one coder_agent, one HOME, one IDE target. Dev tooling is
baked into stack-specific images at build time instead of installed at
devcontainer-create time.
Also repositions the repo from a devcontainer-features collection to a
Coder workspace template. Renamed on GitHub to SoureCode/coder-workspaces.
## Workspace images
- src/base/Dockerfile — shared foundation: debian:trixie-slim + systemd
+ dockerd (sysbox-runc runtime) + coder user + dev-kit scripts
(nvm, claude-code, rtk, context-mode, web-shell, home-persist).
- src/node/Dockerfile — FROM :base; named variant, no additions yet.
- src/cpp/Dockerfile — FROM :base + llvm/cmake/sccache + CC/CXX env.
- .github/workflows/publish-workspaces.yml — matrix build publishing
ghcr.io/sourecode/coder-workspace:{base,node,cpp} (multi-arch).
## Scripts
Moved src/<feature>/ → scripts/<name>/. Dropped devcontainer-feature.json
files (no longer publishing features). Dropped "feature installer" /
"<tool> feature:" wording in comments and error messages. Scripts are now
bind-mounted into each Dockerfile at build via --mount=type=bind so their
source never enters an image layer.
Renamed manifest directory /etc/devcontainer-persist.d → /etc/home-persist.d
across scripts, resolver, docs, main.tf. Dropped the build-time \$PATHS
block from home-persist/install.sh (replaced by the runtime Coder parameter
below).
## main.tf rewrite
- data "coder_parameter" "workspace_image" dropdown (base/node/cpp).
- data "coder_parameter" "home_persist_paths" for per-workspace extra
persistence paths; lifecycle_init writes /etc/home-persist.d/user.json
from it before running home-persist-resolve.
- Dropped coder_devcontainer + subagent plumbing; every IDE module
(code-server, jetbrains, git-clone) attaches to coder_agent.main.id.
- Inlined terraform/web-shell module as a coder_app resource —
scripts/web-shell/install.sh already installs + supervises via systemd,
the module was duplicating that work and conflicting at runtime.
- Dropped DEVCONTAINER_* env, rebuild_no_cache parameter + script.
- coder_script.lifecycle_init orchestrates home-persist-resolve +
context-mode/rtk post-create hooks on start with start_blocks_login=true.
- Git identity (coder_env.git_*) + SSH signing (coder_script) moved from
the old subagent onto coder_agent.main.
## Removed
- Dockerfile.workspace (Ubuntu noble, nested dockerd, @devcontainers/cli)
— fully ported into src/base/Dockerfile (Debian trixie, same patterns).
- Dockerfile.devcontainer-base + publish-devcontainer-base.yml.
- publish-features.yml — features no longer published to GHCR.
- docs/migration-guide.md — devcontainer-migration-oriented, obsolete.
- terraform/web-shell/ — duplicated scripts/web-shell/install.sh.
- scripts/web-shell/README.md — feature-marketing doc, content in README.
## Docs
README rewritten as a Coder workspace template with per-stack image
matrix, sysbox host setup, push-to-Coder flow, troubleshooting.
docs/persistence.md updated for the flat model (coder_script-driven
resolver instead of onCreateCommand, new home_persist_paths parameter).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>1 parent 8f75d5f commit b345208
36 files changed
Lines changed: 735 additions & 1678 deletions
File tree
- .github/workflows
- docs
- scripts
- claude-code
- cmake
- context-mode
- home-persist
- llvm
- nvm
- rtk
- sccache
- web-shell
- src
- base
- claude-code
- cmake
- context-mode
- cpp
- home-persist
- llvm
- node
- nvm
- rtk
- sccache
- web-shell
- terraform/web-shell
This file was deleted.
This file was deleted.
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
| 1 | + | |
| 2 | + | |
| 3 | + | |
| 4 | + | |
| 5 | + | |
| 6 | + | |
| 7 | + | |
| 8 | + | |
| 9 | + | |
| 10 | + | |
| 11 | + | |
| 12 | + | |
| 13 | + | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
| 36 | + | |
| 37 | + | |
| 38 | + | |
| 39 | + | |
| 40 | + | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
| 44 | + | |
| 45 | + | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
This file was deleted.
This file was deleted.
0 commit comments