container-superposition 0.1.6 → 0.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/scripts/init.js +7 -4
- package/dist/scripts/init.js.map +1 -1
- package/dist/tool/commands/adopt.d.ts.map +1 -1
- package/dist/tool/commands/adopt.js +1 -27
- package/dist/tool/commands/adopt.js.map +1 -1
- package/dist/tool/commands/doctor.d.ts +3 -0
- package/dist/tool/commands/doctor.d.ts.map +1 -1
- package/dist/tool/commands/doctor.js +932 -69
- package/dist/tool/commands/doctor.js.map +1 -1
- package/dist/tool/commands/explain.d.ts.map +1 -1
- package/dist/tool/commands/explain.js +9 -0
- package/dist/tool/commands/explain.js.map +1 -1
- package/dist/tool/questionnaire/composer.d.ts.map +1 -1
- package/dist/tool/questionnaire/composer.js +212 -11
- package/dist/tool/questionnaire/composer.js.map +1 -1
- package/dist/tool/schema/overlay-loader.d.ts.map +1 -1
- package/dist/tool/schema/overlay-loader.js +1 -0
- package/dist/tool/schema/overlay-loader.js.map +1 -1
- package/dist/tool/schema/project-config.d.ts +1 -1
- package/dist/tool/schema/project-config.d.ts.map +1 -1
- package/dist/tool/schema/project-config.js +94 -25
- package/dist/tool/schema/project-config.js.map +1 -1
- package/dist/tool/schema/types.d.ts +85 -11
- package/dist/tool/schema/types.d.ts.map +1 -1
- package/dist/tool/utils/merge.d.ts.map +1 -1
- package/dist/tool/utils/merge.js +9 -0
- package/dist/tool/utils/merge.js.map +1 -1
- package/docs/creating-overlays.md +151 -2
- package/docs/overlay-imports.md +125 -102
- package/docs/overlays.md +49 -6
- package/docs/quick-reference.md +99 -0
- package/docs/specs/003-mkdocs2-overlay/spec.md +114 -0
- package/docs/specs/004-doctor-fix/spec.md +70 -0
- package/docs/specs/005-cuda-overlay/spec.md +101 -0
- package/docs/specs/006-rocm-overlay/spec.md +109 -0
- package/overlays/.shared/README.md +80 -21
- package/overlays/.shared/compose/common-healthchecks.md +60 -0
- package/overlays/.shared/vscode/recommended-extensions.json +15 -11
- package/overlays/alertmanager/setup.sh +4 -19
- package/overlays/alertmanager/verify.sh +8 -9
- package/overlays/all/README.md +43 -0
- package/overlays/all/devcontainer.patch.json +6 -0
- package/overlays/all/overlay.yml +14 -0
- package/overlays/amp/setup.sh +5 -0
- package/overlays/bun/setup.sh +10 -1
- package/overlays/bun/verify.sh +6 -1
- package/overlays/claude-code/setup.sh +5 -0
- package/overlays/cloudflared/setup.sh +9 -12
- package/overlays/codex/README.md +9 -6
- package/overlays/codex/devcontainer.patch.json +7 -1
- package/overlays/codex/setup.sh +5 -0
- package/overlays/codex/verify.sh +8 -0
- package/overlays/commitlint/setup.sh +5 -0
- package/overlays/cuda/README.md +179 -0
- package/overlays/cuda/devcontainer.patch.json +7 -0
- package/overlays/cuda/overlay.yml +17 -0
- package/overlays/cuda/setup.sh +32 -0
- package/overlays/cuda/verify.sh +38 -0
- package/overlays/devcontainer-cli/README.md +50 -0
- package/overlays/devcontainer-cli/devcontainer.patch.json +13 -0
- package/overlays/devcontainer-cli/overlay.yml +16 -0
- package/overlays/devcontainer-cli/setup.sh +14 -0
- package/overlays/direnv/devcontainer.patch.json +6 -0
- package/overlays/direnv/setup.sh +7 -6
- package/overlays/dotnet/setup.sh +14 -7
- package/overlays/duckdb/devcontainer.patch.json +1 -2
- package/overlays/gcloud/devcontainer.patch.json +0 -6
- package/overlays/gcloud/setup.sh +51 -0
- package/overlays/gemini-cli/setup.sh +5 -0
- package/overlays/git-helpers/devcontainer.patch.json +2 -1
- package/overlays/go/setup.sh +15 -14
- package/overlays/jaeger/overlay.yml +2 -0
- package/overlays/just/setup.sh +5 -17
- package/overlays/keycloak/docker-compose.yml +6 -4
- package/overlays/keycloak/verify.sh +4 -3
- package/overlays/kind/devcontainer.patch.json +1 -2
- package/overlays/kind/setup.sh +8 -17
- package/overlays/minio/setup.sh +10 -18
- package/overlays/mkdocs/overlay.yml +2 -1
- package/overlays/mkdocs2/README.md +135 -0
- package/overlays/mkdocs2/devcontainer.patch.json +19 -0
- package/overlays/mkdocs2/overlay.yml +17 -0
- package/overlays/mkdocs2/setup.sh +67 -0
- package/overlays/mkdocs2/verify.sh +35 -0
- package/overlays/modern-cli-tools/devcontainer.patch.json +7 -1
- package/overlays/modern-cli-tools/setup.sh +21 -71
- package/overlays/mongodb/devcontainer.patch.json +0 -6
- package/overlays/mongodb/setup.sh +59 -0
- package/overlays/mysql/verify.sh +4 -3
- package/overlays/nats/.env.example +1 -1
- package/overlays/nats/README.md +1 -1
- package/overlays/nats/docker-compose.yml +1 -1
- package/overlays/ngrok/setup.sh +9 -6
- package/overlays/nodejs/setup.sh +5 -0
- package/overlays/openapi-tools/devcontainer.patch.json +1 -2
- package/overlays/openapi-tools/setup.sh +9 -8
- package/overlays/opencode/setup.sh +5 -0
- package/overlays/otel-collector/overlay.yml +2 -0
- package/overlays/otel-collector/setup.sh +3 -16
- package/overlays/otel-demo-nodejs/verify.sh +8 -9
- package/overlays/otel-demo-python/verify.sh +16 -10
- package/overlays/pandoc/README.md +22 -15
- package/overlays/pandoc/devcontainer.patch.json +6 -2
- package/overlays/pandoc/setup.sh +217 -18
- package/overlays/pandoc/verify.sh +16 -4
- package/overlays/playwright/devcontainer.patch.json +3 -1
- package/overlays/playwright/setup.sh +37 -0
- package/overlays/postgres/docker-compose.yml +6 -0
- package/overlays/powershell/setup.sh +49 -13
- package/overlays/pre-commit/setup.sh +12 -3
- package/overlays/prometheus/overlay.yml +2 -0
- package/overlays/promtail/verify.sh +16 -10
- package/overlays/pulumi/devcontainer.patch.json +1 -1
- package/overlays/python/setup.sh +28 -9
- package/overlays/python/verify.sh +4 -2
- package/overlays/redpanda/docker-compose.yml +3 -5
- package/overlays/rocm/README.md +227 -0
- package/overlays/rocm/devcontainer.patch.json +4 -0
- package/overlays/rocm/overlay.yml +17 -0
- package/overlays/rocm/setup.sh +45 -0
- package/overlays/rocm/verify.sh +47 -0
- package/overlays/rust/setup.sh +11 -18
- package/overlays/spec-kit/setup.sh +7 -3
- package/overlays/sqlite/setup.sh +14 -14
- package/overlays/sqlserver/docker-compose.yml +3 -3
- package/overlays/sqlserver/verify.sh +22 -5
- package/overlays/tempo/verify.sh +16 -10
- package/overlays/tilt/devcontainer.patch.json +1 -2
- package/overlays/tilt/setup.sh +14 -4
- package/overlays/windsurf-cli/setup.sh +27 -4
- package/overlays/windsurf-cli/verify.sh +13 -3
- package/package.json +2 -1
- package/templates/scripts/setup-utils.sh +228 -0
- package/tool/schema/config.schema.json +110 -8
- package/tool/schema/overlay-manifest.schema.json +5 -0
- package/overlays/.shared/compose/common-healthchecks.yml +0 -38
- /package/overlays/otel-demo-nodejs/{Dockerfile-otel-demo-nodejs → Dockerfile} +0 -0
- /package/overlays/otel-demo-nodejs/{package-otel-demo-nodejs.json → package.json} +0 -0
- /package/overlays/otel-demo-nodejs/{server-otel-demo-nodejs.js → server.js} +0 -0
- /package/overlays/otel-demo-nodejs/{tracing-otel-demo-nodejs.js → tracing.js} +0 -0
- /package/overlays/otel-demo-python/{Dockerfile-otel-demo-python → Dockerfile} +0 -0
- /package/overlays/otel-demo-python/{app-otel-demo-python.py → app.py} +0 -0
- /package/overlays/otel-demo-python/{requirements-otel-demo-python.txt → requirements.txt} +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "container-superposition",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.7",
|
|
4
4
|
"description": "Solution-ready devcontainer templates and features with guided initialization",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/scripts/init.js",
|
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
"init:build": "npm run build && node dist/scripts/init.js",
|
|
14
14
|
"test": "vitest run",
|
|
15
15
|
"test:watch": "vitest",
|
|
16
|
+
"test:integration": "INTEGRATION=true vitest run tool/__tests__/overlay-features-integration.test.ts",
|
|
16
17
|
"test:smoke": "bash scripts/test.sh",
|
|
17
18
|
"docs:generate": "tsx docs/generate-docs.ts && prettier --write docs/overlays.md",
|
|
18
19
|
"lint": "tsc --noEmit && npm run format:check",
|
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Shared setup utilities for container-superposition overlay scripts.
|
|
3
|
+
# Sourced automatically: source "$(dirname "${BASH_SOURCE[0]}")/setup-utils.sh"
|
|
4
|
+
#
|
|
5
|
+
# All setup scripts for selected overlays run in PARALLEL via postCreateCommand.
|
|
6
|
+
# Use the locking helpers below for any apt/dpkg operations.
|
|
7
|
+
|
|
8
|
+
# Suppress terminal-capability probes (OSC queries, colour-detection) and npm
|
|
9
|
+
# update notices that show up as garbage or noise in devcontainer build logs.
|
|
10
|
+
export NO_COLOR=1
|
|
11
|
+
export NPM_CONFIG_UPDATE_NOTIFIER=false
|
|
12
|
+
# TERM=dumb prevents most tools from querying cursor position or emitting ANSI
|
|
13
|
+
# escape sequences in non-interactive build logs.
|
|
14
|
+
export TERM=dumb
|
|
15
|
+
|
|
16
|
+
# ---------------------------------------------------------------------------
|
|
17
|
+
# Spinner helper
|
|
18
|
+
# ---------------------------------------------------------------------------
|
|
19
|
+
|
|
20
|
+
# Run a command silently while showing a spinner and a label.
|
|
21
|
+
# Stdout/stderr of the command are suppressed; only pass/fail is reported.
|
|
22
|
+
# Usage: run_spinner "Installing foo..." <command> [args...]
|
|
23
|
+
# Exit code: the exit code of <command>.
|
|
24
|
+
run_spinner() {
|
|
25
|
+
local label="$1"; shift
|
|
26
|
+
local rc
|
|
27
|
+
|
|
28
|
+
if [ -t 1 ]; then
|
|
29
|
+
# Interactive TTY: animated spinner with carriage-return overwriting.
|
|
30
|
+
local spin='⠋⠙⠹⠸⠼⠴⠦⠧⠇⠏'
|
|
31
|
+
local i=0
|
|
32
|
+
"$@" &>/dev/null &
|
|
33
|
+
local pid=$!
|
|
34
|
+
while kill -0 "$pid" 2>/dev/null; do
|
|
35
|
+
printf "\r %s %s" "${spin:$((i % ${#spin})):1}" "$label"
|
|
36
|
+
sleep 0.1
|
|
37
|
+
(( i++ )) || true
|
|
38
|
+
done
|
|
39
|
+
wait "$pid"; rc=$?
|
|
40
|
+
if [ "$rc" -eq 0 ]; then
|
|
41
|
+
printf "\r ✓ %s\n" "$label"
|
|
42
|
+
else
|
|
43
|
+
printf "\r ✗ %s (exit %d)\n" "$label" "$rc"
|
|
44
|
+
fi
|
|
45
|
+
else
|
|
46
|
+
# Non-TTY (devcontainer build log, CI): emit a start line immediately
|
|
47
|
+
# so the log shows progress, then a done line when the command finishes.
|
|
48
|
+
# No carriage-return tricks — plain newlines so each line is visible.
|
|
49
|
+
printf " ⋯ %s\n" "$label"
|
|
50
|
+
"$@" &>/dev/null; rc=$?
|
|
51
|
+
if [ "$rc" -eq 0 ]; then
|
|
52
|
+
printf " ✓ %s\n" "$label"
|
|
53
|
+
else
|
|
54
|
+
printf " ✗ %s (exit %d)\n" "$label" "$rc"
|
|
55
|
+
fi
|
|
56
|
+
fi
|
|
57
|
+
return $rc
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
# ---------------------------------------------------------------------------
|
|
61
|
+
# Node.js / npm helpers
|
|
62
|
+
# ---------------------------------------------------------------------------
|
|
63
|
+
|
|
64
|
+
# Ensure npm (and node) are on PATH by loading nvm if needed.
|
|
65
|
+
# The devcontainer node feature installs via nvm; postCreateCommand scripts
|
|
66
|
+
# run in a non-interactive shell that may not have nvm on PATH.
|
|
67
|
+
# Safe to call multiple times (idempotent).
|
|
68
|
+
# Usage: load_nvm
|
|
69
|
+
load_nvm() {
|
|
70
|
+
if command -v npm &>/dev/null; then
|
|
71
|
+
return 0 # already on PATH
|
|
72
|
+
fi
|
|
73
|
+
local nvm_dir="${NVM_DIR:-/usr/local/share/nvm}"
|
|
74
|
+
# shellcheck disable=SC1091
|
|
75
|
+
if [ -s "$nvm_dir/nvm.sh" ]; then
|
|
76
|
+
TERM=dumb \. "$nvm_dir/nvm.sh" --no-use 2>/dev/null || true
|
|
77
|
+
fi
|
|
78
|
+
# Fallback: add the nvm current symlink bin directory to PATH
|
|
79
|
+
if ! command -v npm &>/dev/null && [ -d "$nvm_dir/current/bin" ]; then
|
|
80
|
+
export PATH="$nvm_dir/current/bin:$PATH"
|
|
81
|
+
fi
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
# ---------------------------------------------------------------------------
|
|
85
|
+
# APT / DPKG helpers
|
|
86
|
+
# ---------------------------------------------------------------------------
|
|
87
|
+
|
|
88
|
+
# Advisory lock file shared across all parallel postCreateCommand scripts.
|
|
89
|
+
_CS_APT_LOCK=/tmp/.cs-apt.lock
|
|
90
|
+
|
|
91
|
+
# Acquire an exclusive flock-based lock for apt/dpkg operations.
|
|
92
|
+
# Blocks until the lock is available or 300 s elapses (hard failure).
|
|
93
|
+
# The kernel releases the lock automatically on process exit for any reason.
|
|
94
|
+
acquire_apt_lock() {
|
|
95
|
+
exec 9>"$_CS_APT_LOCK"
|
|
96
|
+
echo "⏳ Acquiring apt lock..."
|
|
97
|
+
flock -w 300 9 || {
|
|
98
|
+
echo "❌ Timed out waiting for apt lock after 300s"
|
|
99
|
+
return 1
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
# Release the lock acquired by acquire_apt_lock.
|
|
104
|
+
release_apt_lock() {
|
|
105
|
+
flock -u 9 2>/dev/null || true
|
|
106
|
+
exec 9>&- 2>/dev/null || true
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
# Run a command inside an apt lock, releasing it even on failure.
|
|
110
|
+
# Usage: with_apt_lock <command> [args...]
|
|
111
|
+
# Example: with_apt_lock sudo apt-get install -y ripgrep
|
|
112
|
+
with_apt_lock() {
|
|
113
|
+
acquire_apt_lock || return 1
|
|
114
|
+
"$@"
|
|
115
|
+
local rc=$?
|
|
116
|
+
release_apt_lock
|
|
117
|
+
return $rc
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
# Run apt-get update + apt-get install under a single held lock.
|
|
121
|
+
# Usage: apt_install <package> [packages...]
|
|
122
|
+
apt_install() {
|
|
123
|
+
acquire_apt_lock || return 1
|
|
124
|
+
# Pass DEBIAN_FRONTEND and TERM explicitly: sudo strips environment by default.
|
|
125
|
+
sudo DEBIAN_FRONTEND=noninteractive TERM=dumb apt-get update -qq
|
|
126
|
+
sudo DEBIAN_FRONTEND=noninteractive TERM=dumb apt-get install -y -qq "$@"
|
|
127
|
+
local rc=$?
|
|
128
|
+
release_apt_lock
|
|
129
|
+
return $rc
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
# @deprecated — kept for backward compat; delegates to acquire_apt_lock.
|
|
133
|
+
wait_for_apt_lock() {
|
|
134
|
+
acquire_apt_lock
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
# Add a third-party apt repository with a GPG key.
|
|
138
|
+
# Does NOT require the apt lock — only writes key/sources files.
|
|
139
|
+
# Caller is responsible for calling apt-get update afterward (inside a lock).
|
|
140
|
+
# Usage: add_apt_repo <key-url> <keyring-path> <repo-line> <sources-file>
|
|
141
|
+
add_apt_repo() {
|
|
142
|
+
local key_url="$1"
|
|
143
|
+
local keyring_path="$2"
|
|
144
|
+
local repo_line="$3"
|
|
145
|
+
local sources_file="$4"
|
|
146
|
+
|
|
147
|
+
sudo mkdir -p "$(dirname "$keyring_path")" "$(dirname "$sources_file")"
|
|
148
|
+
curl -fsSL "$key_url" | sudo gpg --dearmor -o "$keyring_path"
|
|
149
|
+
echo "$repo_line" | sudo tee "$sources_file" >/dev/null
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
# ---------------------------------------------------------------------------
|
|
153
|
+
# Idempotency helpers
|
|
154
|
+
# ---------------------------------------------------------------------------
|
|
155
|
+
|
|
156
|
+
# Returns 0 if the command exists on PATH.
|
|
157
|
+
command_exists() {
|
|
158
|
+
command -v "$1" >/dev/null 2>&1
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
# Returns 0 if an apt package is installed.
|
|
162
|
+
apt_package_installed() {
|
|
163
|
+
dpkg -s "$1" >/dev/null 2>&1
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
# ---------------------------------------------------------------------------
|
|
167
|
+
# Architecture detection
|
|
168
|
+
# ---------------------------------------------------------------------------
|
|
169
|
+
|
|
170
|
+
# Sets CS_ARCH to "amd64" or "arm64" based on uname -m.
|
|
171
|
+
# Usage:
|
|
172
|
+
# detect_arch # returns 1 on unknown arch
|
|
173
|
+
# detect_arch amd64 # falls back to amd64 on unknown arch
|
|
174
|
+
detect_arch() {
|
|
175
|
+
local fallback="${1:-}"
|
|
176
|
+
local raw
|
|
177
|
+
raw=$(uname -m)
|
|
178
|
+
case "$raw" in
|
|
179
|
+
x86_64) CS_ARCH="amd64" ;;
|
|
180
|
+
aarch64|arm64) CS_ARCH="arm64" ;;
|
|
181
|
+
*)
|
|
182
|
+
if [ -n "$fallback" ]; then
|
|
183
|
+
echo "⚠️ Unsupported architecture: $raw, falling back to $fallback"
|
|
184
|
+
CS_ARCH="$fallback"
|
|
185
|
+
else
|
|
186
|
+
echo "❌ Unsupported architecture: $raw"
|
|
187
|
+
return 1
|
|
188
|
+
fi
|
|
189
|
+
;;
|
|
190
|
+
esac
|
|
191
|
+
export CS_ARCH
|
|
192
|
+
}
|
|
193
|
+
|
|
194
|
+
# ---------------------------------------------------------------------------
|
|
195
|
+
# Binary installation helpers
|
|
196
|
+
# ---------------------------------------------------------------------------
|
|
197
|
+
|
|
198
|
+
# Download a single binary, install it to /usr/local/bin, clean up on failure.
|
|
199
|
+
# Usage: install_binary <url> <name> [mode]
|
|
200
|
+
install_binary() {
|
|
201
|
+
local url="$1"
|
|
202
|
+
local name="$2"
|
|
203
|
+
local mode="${3:-0755}"
|
|
204
|
+
local tmp
|
|
205
|
+
tmp=$(mktemp) || return 1
|
|
206
|
+
curl -fsSL "$url" -o "$tmp" || { rm -f "$tmp"; return 1; }
|
|
207
|
+
sudo install -m "$mode" "$tmp" "/usr/local/bin/$name"
|
|
208
|
+
local rc=$?
|
|
209
|
+
rm -f "$tmp"
|
|
210
|
+
return $rc
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
# Download a .tar.gz, extract a named binary, install to /usr/local/bin.
|
|
214
|
+
# Usage: install_binary_from_tar <url> <bin-in-archive> [dest-name] [mode]
|
|
215
|
+
install_binary_from_tar() {
|
|
216
|
+
local url="$1"
|
|
217
|
+
local bin_in_archive="$2"
|
|
218
|
+
local dest_name="${3:-$bin_in_archive}"
|
|
219
|
+
local mode="${4:-0755}"
|
|
220
|
+
local tmpdir
|
|
221
|
+
tmpdir=$(mktemp -d) || return 1
|
|
222
|
+
curl -fsSL "$url" -o "${tmpdir}/archive.tar.gz" || { rm -rf "$tmpdir"; return 1; }
|
|
223
|
+
tar -xzf "${tmpdir}/archive.tar.gz" -C "$tmpdir" "$bin_in_archive" || { rm -rf "$tmpdir"; return 1; }
|
|
224
|
+
sudo install -m "$mode" "${tmpdir}/${bin_in_archive}" "/usr/local/bin/${dest_name}"
|
|
225
|
+
local rc=$?
|
|
226
|
+
rm -rf "$tmpdir"
|
|
227
|
+
return $rc
|
|
228
|
+
}
|
|
@@ -34,6 +34,79 @@
|
|
|
34
34
|
},
|
|
35
35
|
"description": "Preset parameter choices keyed by parameter name"
|
|
36
36
|
},
|
|
37
|
+
"overlays": {
|
|
38
|
+
"type": "array",
|
|
39
|
+
"items": {
|
|
40
|
+
"type": "string",
|
|
41
|
+
"enum": [
|
|
42
|
+
"alertmanager",
|
|
43
|
+
"amp",
|
|
44
|
+
"aws-cli",
|
|
45
|
+
"azure-cli",
|
|
46
|
+
"bun",
|
|
47
|
+
"claude-code",
|
|
48
|
+
"cloudflared",
|
|
49
|
+
"codex",
|
|
50
|
+
"commitlint",
|
|
51
|
+
"direnv",
|
|
52
|
+
"docker-in-docker",
|
|
53
|
+
"docker-sock",
|
|
54
|
+
"dotnet",
|
|
55
|
+
"duckdb",
|
|
56
|
+
"gcloud",
|
|
57
|
+
"gemini-cli",
|
|
58
|
+
"git-helpers",
|
|
59
|
+
"go",
|
|
60
|
+
"grafana",
|
|
61
|
+
"grpc-tools",
|
|
62
|
+
"jaeger",
|
|
63
|
+
"java",
|
|
64
|
+
"jupyter",
|
|
65
|
+
"just",
|
|
66
|
+
"keycloak",
|
|
67
|
+
"kind",
|
|
68
|
+
"kubectl-helm",
|
|
69
|
+
"localstack",
|
|
70
|
+
"loki",
|
|
71
|
+
"mailpit",
|
|
72
|
+
"minio",
|
|
73
|
+
"mkdocs",
|
|
74
|
+
"modern-cli-tools",
|
|
75
|
+
"mongodb",
|
|
76
|
+
"mysql",
|
|
77
|
+
"nats",
|
|
78
|
+
"ngrok",
|
|
79
|
+
"nodejs",
|
|
80
|
+
"openapi-tools",
|
|
81
|
+
"opencode",
|
|
82
|
+
"otel-collector",
|
|
83
|
+
"otel-demo-nodejs",
|
|
84
|
+
"otel-demo-python",
|
|
85
|
+
"pandoc",
|
|
86
|
+
"playwright",
|
|
87
|
+
"postgres",
|
|
88
|
+
"powershell",
|
|
89
|
+
"pre-commit",
|
|
90
|
+
"prometheus",
|
|
91
|
+
"promtail",
|
|
92
|
+
"pulumi",
|
|
93
|
+
"python",
|
|
94
|
+
"rabbitmq",
|
|
95
|
+
"redis",
|
|
96
|
+
"redpanda",
|
|
97
|
+
"rust",
|
|
98
|
+
"spec-kit",
|
|
99
|
+
"sqlite",
|
|
100
|
+
"sqlserver",
|
|
101
|
+
"tempo",
|
|
102
|
+
"terraform",
|
|
103
|
+
"tilt",
|
|
104
|
+
"windsurf-cli"
|
|
105
|
+
]
|
|
106
|
+
},
|
|
107
|
+
"default": [],
|
|
108
|
+
"description": "Flat list of overlay IDs to include (preferred). Accepts any overlay regardless of category."
|
|
109
|
+
},
|
|
37
110
|
"language": {
|
|
38
111
|
"type": "array",
|
|
39
112
|
"items": {
|
|
@@ -47,11 +120,12 @@
|
|
|
47
120
|
"go",
|
|
48
121
|
"rust",
|
|
49
122
|
"bun",
|
|
123
|
+
"jupyter",
|
|
50
124
|
"powershell"
|
|
51
125
|
]
|
|
52
126
|
},
|
|
53
127
|
"default": [],
|
|
54
|
-
"description": "Language/framework overlays"
|
|
128
|
+
"description": "Deprecated: use 'overlays' instead. Language/framework overlays (kept for backward compatibility)."
|
|
55
129
|
},
|
|
56
130
|
"database": {
|
|
57
131
|
"type": "array",
|
|
@@ -64,6 +138,7 @@
|
|
|
64
138
|
"mysql",
|
|
65
139
|
"sqlserver",
|
|
66
140
|
"sqlite",
|
|
141
|
+
"duckdb",
|
|
67
142
|
"minio",
|
|
68
143
|
"rabbitmq",
|
|
69
144
|
"redpanda",
|
|
@@ -71,21 +146,31 @@
|
|
|
71
146
|
]
|
|
72
147
|
},
|
|
73
148
|
"default": [],
|
|
74
|
-
"description": "Database overlays"
|
|
149
|
+
"description": "Deprecated: use 'overlays' instead. Database overlays (kept for backward compatibility)."
|
|
75
150
|
},
|
|
76
151
|
"playwright": {
|
|
77
152
|
"type": "boolean",
|
|
78
153
|
"default": false,
|
|
79
|
-
"description": "Include Playwright for browser automation"
|
|
154
|
+
"description": "Deprecated: use 'overlays: [playwright]' instead. Include Playwright for browser automation (kept for backward compatibility)."
|
|
80
155
|
},
|
|
81
156
|
"cloudTools": {
|
|
82
157
|
"type": "array",
|
|
83
158
|
"items": {
|
|
84
159
|
"type": "string",
|
|
85
|
-
"enum": [
|
|
160
|
+
"enum": [
|
|
161
|
+
"azure-cli",
|
|
162
|
+
"aws-cli",
|
|
163
|
+
"gcloud",
|
|
164
|
+
"cloudflared",
|
|
165
|
+
"kubectl-helm",
|
|
166
|
+
"kind",
|
|
167
|
+
"localstack",
|
|
168
|
+
"terraform",
|
|
169
|
+
"pulumi"
|
|
170
|
+
]
|
|
86
171
|
},
|
|
87
172
|
"default": [],
|
|
88
|
-
"description": "Cloud/orchestration tools
|
|
173
|
+
"description": "Deprecated: use 'overlays' instead. Cloud/orchestration tools (kept for backward compatibility)."
|
|
89
174
|
},
|
|
90
175
|
"devTools": {
|
|
91
176
|
"type": "array",
|
|
@@ -97,13 +182,19 @@
|
|
|
97
182
|
"codex",
|
|
98
183
|
"playwright",
|
|
99
184
|
"git-helpers",
|
|
185
|
+
"grpc-tools",
|
|
186
|
+
"keycloak",
|
|
187
|
+
"mailpit",
|
|
100
188
|
"pre-commit",
|
|
101
189
|
"commitlint",
|
|
102
190
|
"just",
|
|
103
191
|
"direnv",
|
|
104
192
|
"modern-cli-tools",
|
|
105
193
|
"ngrok",
|
|
194
|
+
"openapi-tools",
|
|
195
|
+
"pandoc",
|
|
106
196
|
"spec-kit",
|
|
197
|
+
"tilt",
|
|
107
198
|
"claude-code",
|
|
108
199
|
"gemini-cli",
|
|
109
200
|
"amp",
|
|
@@ -112,16 +203,27 @@
|
|
|
112
203
|
]
|
|
113
204
|
},
|
|
114
205
|
"default": [],
|
|
115
|
-
"description": "Developer tooling overlays"
|
|
206
|
+
"description": "Deprecated: use 'overlays' instead. Developer tooling overlays (kept for backward compatibility)."
|
|
116
207
|
},
|
|
117
208
|
"observability": {
|
|
118
209
|
"type": "array",
|
|
119
210
|
"items": {
|
|
120
211
|
"type": "string",
|
|
121
|
-
"enum": [
|
|
212
|
+
"enum": [
|
|
213
|
+
"alertmanager",
|
|
214
|
+
"otel-collector",
|
|
215
|
+
"otel-demo-nodejs",
|
|
216
|
+
"otel-demo-python",
|
|
217
|
+
"jaeger",
|
|
218
|
+
"prometheus",
|
|
219
|
+
"promtail",
|
|
220
|
+
"grafana",
|
|
221
|
+
"loki",
|
|
222
|
+
"tempo"
|
|
223
|
+
]
|
|
122
224
|
},
|
|
123
225
|
"default": [],
|
|
124
|
-
"description": "Observability tools
|
|
226
|
+
"description": "Deprecated: use 'overlays' instead. Observability tools (kept for backward compatibility)."
|
|
125
227
|
},
|
|
126
228
|
"portOffset": {
|
|
127
229
|
"type": "number",
|
|
@@ -140,6 +140,11 @@
|
|
|
140
140
|
"type": "boolean",
|
|
141
141
|
"description": "Whether this overlay is excluded in minimal mode (true = extra/optional)",
|
|
142
142
|
"default": false
|
|
143
|
+
},
|
|
144
|
+
"hidden": {
|
|
145
|
+
"type": "boolean",
|
|
146
|
+
"description": "Whether this overlay is hidden from the interactive questionnaire (code-only use)",
|
|
147
|
+
"default": false
|
|
143
148
|
}
|
|
144
149
|
},
|
|
145
150
|
"additionalProperties": false
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
# Common Docker Compose Healthcheck Patterns
|
|
2
|
-
# These can be referenced by overlays to ensure consistent healthcheck configuration
|
|
3
|
-
|
|
4
|
-
healthchecks:
|
|
5
|
-
http:
|
|
6
|
-
test: ['CMD-SHELL', 'curl -f http://localhost:${PORT}/health || exit 1']
|
|
7
|
-
interval: 30s
|
|
8
|
-
timeout: 10s
|
|
9
|
-
retries: 3
|
|
10
|
-
start_period: 40s
|
|
11
|
-
|
|
12
|
-
postgres:
|
|
13
|
-
test: ['CMD-SHELL', 'pg_isready -U ${POSTGRES_USER:-postgres}']
|
|
14
|
-
interval: 10s
|
|
15
|
-
timeout: 5s
|
|
16
|
-
retries: 5
|
|
17
|
-
start_period: 10s
|
|
18
|
-
|
|
19
|
-
redis:
|
|
20
|
-
test: ['CMD', 'redis-cli', 'ping']
|
|
21
|
-
interval: 10s
|
|
22
|
-
timeout: 5s
|
|
23
|
-
retries: 5
|
|
24
|
-
start_period: 10s
|
|
25
|
-
|
|
26
|
-
mongodb:
|
|
27
|
-
test: ['CMD', 'mongosh', '--eval', "db.adminCommand('ping')"]
|
|
28
|
-
interval: 10s
|
|
29
|
-
timeout: 5s
|
|
30
|
-
retries: 5
|
|
31
|
-
start_period: 10s
|
|
32
|
-
|
|
33
|
-
mysql:
|
|
34
|
-
test: ['CMD', 'mysqladmin', 'ping', '-h', 'localhost']
|
|
35
|
-
interval: 10s
|
|
36
|
-
timeout: 5s
|
|
37
|
-
retries: 5
|
|
38
|
-
start_period: 10s
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|