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
37 changes: 31 additions & 6 deletions roles/devcontainer_sync/defaults/main.yml
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ devcontainer_defaults:
container_env: {}
remote_env: {}
features: {}
mcp: {}
vscode_extensions:
- EditorConfig.EditorConfig
- redhat.vscode-yaml
Expand All @@ -38,12 +39,15 @@ devcontainer_defaults:
mounts: []
run_args: []
plugins:
- codex
- claude
- opencode
- smarttree
- contextmode

devcontainer_plugins:
opencode:
vscode_extensions:
- ankurmathur.opencode-provider-bridge
install_steps:
- curl -fsSL https://opencode.ai/install | bash
post_create_commands:
Expand All @@ -52,10 +56,31 @@ devcontainer_plugins:
- ln -sfn /opt/opencode-config $HOME/.config/opencode
mounts:
- source=opencode-config,target=/opt/opencode-config,type=volume

smarttree:
install_steps:
- curl -sSL https://raw.githubusercontent.com/8b-is/smart-tree/main/scripts/install.sh | bash
mcp:
servers:
smart-tree:
type: stdio
command: st
args:
- "--mcp"

contextmode:
install_steps:
- curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/$(curl -s https://api.github.com/repos/nvm-sh/nvm/releases/latest | jq -r '.tag_name')/install.sh" | bash
- bash -c "source ~/.nvm/nvm.sh && nvm install 24"
- npm install context-mode
- mkdir -p "${containerWorkspaceFolder}"/.github/hooks
- wget https://raw.githubusercontent.com/mksglu/context-mode/refs/heads/main/configs/vscode-copilot/hooks.json -O .github/hooks/context-mode.json
mcp:
servers:
context-mode:
command: "context-mode"

claude:
vscode_extensions:
- Anthropic.claude-code
install_steps:
- curl -fsSL https://claude.ai/install.sh | bash
post_create_commands:
Expand All @@ -72,8 +97,6 @@ devcontainer_plugins:
- source=claude-scope-project-${localWorkspaceFolderBasename},target=${containerWorkspaceFolder}/.claude,type=volume

codex:
vscode_extensions:
- openai.chatgpt
install_steps:
- curl -fsSL https://chatgpt.com/codex/install.sh | CODEX_NON_INTERACTIVE=1 sh
post_create_commands:
Expand Down Expand Up @@ -168,7 +191,9 @@ devcontainer_plugins:
typescript:
install_steps:
- sudo apt update && sudo apt install -y npm --no-install-recommends
- npm install || true
- curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.5/install.sh | bash
- bash -c "source ~/.nvm/nvm.sh && nvm install 24"
- if [ -f "${containerWorkspaceFolder}/package.json" ]; then npm install; fi

github:
install_steps:
Expand Down
6 changes: 6 additions & 0 deletions roles/devcontainer_sync/tasks/sync_devcontainer.yml
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,7 @@
- devcontainer.container_env is mapping
- devcontainer.remote_env is mapping
- devcontainer.features is mapping
- devcontainer.mcp is mapping
- devcontainer.vscode_settings is mapping
- devcontainer.vscode_extensions is sequence
- devcontainer.vscode_extensions is not string
Expand Down Expand Up @@ -157,6 +158,11 @@
{'settings': devcontainer.vscode_settings}
if devcontainer.vscode_settings
else {}
)
| combine(
{'mcp': devcontainer.mcp}
if devcontainer.mcp
else {}
),
},
'containerEnv': devcontainer.container_env,
Expand Down
23 changes: 17 additions & 6 deletions tests/cloud-example/.devcontainer/devcontainer.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,23 @@
"github.vscode-github-actions",
"4ops.terraform",
"redhat.vscode-yaml",
"openai.chatgpt",
"Anthropic.claude-code",
"ankurmathur.opencode-provider-bridge",
"ms-kubernetes-tools.vscode-kubernetes-tools"
]
],
"mcp": {
"servers": {
"context-mode": {
"command": "context-mode"
},
"smart-tree": {
"args": [
"--mcp"
],
"command": "st",
"type": "stdio"
}
}
}
}
},
"features": {
Expand All @@ -36,14 +49,12 @@
},
"image": "mcr.microsoft.com/devcontainers/base:resolute",
"mounts": [
"source=codex-config,target=/opt/.codex,type=volume",
"source=agents-config,target=/opt/.agents,type=volume",
"source=claude-code-config,target=/opt/claude-code-config,type=volume",
"source=claude-scope-project-${localWorkspaceFolderBasename},target=${containerWorkspaceFolder}/.claude,type=volume",
"source=opencode-config,target=/opt/opencode-config,type=volume",
"source=devcontainer-cache-terraform,target=/opt/devcontainer-cache/terraform,type=volume",
"source=devcontainer-history-${localWorkspaceFolderBasename},target=/commandhistory,type=volume"
],
"name": "cloud-example",
"postCreateCommand": "sudo chown $USER:$USER /opt/.codex && ln -sfn /opt/.codex $HOME/.codex && sudo chown $USER:$USER /opt/.agents && ln -sfn /opt/.agents $HOME/.agents && sudo chown $USER:$USER ${containerWorkspaceFolder}/.claude && sudo chown $USER:$USER /opt/claude-code-config && mkdir -p /opt/claude-code-config/.claude && touch /opt/claude-code-config/.claude.json && ln -sfn /opt/claude-code-config/.claude.json $HOME/.claude.json && ln -sfn /opt/claude-code-config/.claude $HOME/.claude && echo \"export CLAUDE_CODE_DISABLE_CRON=1\" >> ~/.bashrc && sudo chown $USER:$USER /opt/opencode-config && ln -sfn /opt/opencode-config $HOME/.config/opencode && sudo mkdir -p /opt/devcontainer-cache/terraform && sudo chown -R $USER:$USER /opt/devcontainer-cache/terraform && sudo mkdir -p /commandhistory && sudo touch /commandhistory/.bash_history && sudo chown -R $USER:$USER /commandhistory && bash \"${containerWorkspaceFolder}/.devcontainer/install.sh\""
"postCreateCommand": "sudo chown $USER:$USER ${containerWorkspaceFolder}/.claude && sudo chown $USER:$USER /opt/claude-code-config && mkdir -p /opt/claude-code-config/.claude && touch /opt/claude-code-config/.claude.json && ln -sfn /opt/claude-code-config/.claude.json $HOME/.claude.json && ln -sfn /opt/claude-code-config/.claude $HOME/.claude && echo \"export CLAUDE_CODE_DISABLE_CRON=1\" >> ~/.bashrc && sudo chown $USER:$USER /opt/opencode-config && mkdir -p $HOME/.config && ln -sfn /opt/opencode-config $HOME/.config/opencode && sudo mkdir -p /opt/devcontainer-cache/terraform && sudo chown -R $USER:$USER /opt/devcontainer-cache/terraform && sudo mkdir -p /commandhistory && sudo touch /commandhistory/.bash_history && sudo chown -R $USER:$USER /commandhistory && bash \"${containerWorkspaceFolder}/.devcontainer/install.sh\""
}
14 changes: 12 additions & 2 deletions tests/cloud-example/.devcontainer/install.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,12 +11,22 @@ sudo ln -sf /usr/share/zoneinfo/America/Chicago /etc/localtime && sudo dpkg-reco

echo alias tf=terraform > ~/.bash_aliases

curl -fsSL https://chatgpt.com/codex/install.sh | CODEX_NON_INTERACTIVE=1 sh

curl -fsSL https://claude.ai/install.sh | bash

curl -fsSL https://opencode.ai/install | bash

curl -sSL https://raw.githubusercontent.com/8b-is/smart-tree/main/scripts/install.sh | bash

curl -o- "https://raw.githubusercontent.com/nvm-sh/nvm/$(curl -s https://api.github.com/repos/nvm-sh/nvm/releases/latest | jq -r '.tag_name')/install.sh" | bash

bash -c "source ~/.nvm/nvm.sh && nvm install 24"

npm install context-mode

mkdir -p "${containerWorkspaceFolder}"/.github/hooks

wget https://raw.githubusercontent.com/mksglu/context-mode/refs/heads/main/configs/vscode-copilot/hooks.json -O .github/hooks/context-mode.json

mkdir -p ~/.ssh

printf 'Host *\n User ec2-user\n IdentityFile %s/.ssh/id_rsa\n StrictHostKeyChecking no\n' "${containerWorkspaceFolder}" > ~/.ssh/config
Expand Down
Loading