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
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Google Cloud CLI setup script
|
|
3
|
+
|
|
4
|
+
set -e
|
|
5
|
+
|
|
6
|
+
echo "☁️ Setting up Google Cloud CLI..."
|
|
7
|
+
|
|
8
|
+
# Source shared setup utilities
|
|
9
|
+
# shellcheck source=setup-utils.sh
|
|
10
|
+
source "$(dirname "${BASH_SOURCE[0]}")/setup-utils.sh"
|
|
11
|
+
|
|
12
|
+
if command -v apk >/dev/null 2>&1; then
|
|
13
|
+
# Alpine Linux — no official gcloud apt repo; install via tarball
|
|
14
|
+
apk add --no-cache python3 curl
|
|
15
|
+
curl -sSL https://sdk.cloud.google.com | CLOUDSDK_CORE_DISABLE_PROMPTS=1 bash -s -- --disable-prompts --install-dir=/usr/local
|
|
16
|
+
ln -sf /usr/local/google-cloud-sdk/bin/gcloud /usr/local/bin/gcloud
|
|
17
|
+
ln -sf /usr/local/google-cloud-sdk/bin/gsutil /usr/local/bin/gsutil
|
|
18
|
+
elif command -v apt-get >/dev/null 2>&1; then
|
|
19
|
+
# Debian/Ubuntu — add Google Cloud apt repo using modern signed-by method
|
|
20
|
+
# The Google Cloud key is already in binary (non-armored) format — write directly.
|
|
21
|
+
sudo mkdir -p /usr/share/keyrings /etc/apt/sources.list.d
|
|
22
|
+
curl -fsSL "https://packages.cloud.google.com/apt/doc/apt-key.gpg" \
|
|
23
|
+
| sudo tee /usr/share/keyrings/cloud.google.gpg >/dev/null
|
|
24
|
+
echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" \
|
|
25
|
+
| sudo tee /etc/apt/sources.list.d/google-cloud-sdk.list >/dev/null
|
|
26
|
+
|
|
27
|
+
# Single lock acquisition: install prereqs + add repo + install gcloud in one pass
|
|
28
|
+
acquire_apt_lock
|
|
29
|
+
# Pass env vars explicitly — sudo strips them by default.
|
|
30
|
+
sudo DEBIAN_FRONTEND=noninteractive TERM=dumb apt-get update -qq
|
|
31
|
+
sudo DEBIAN_FRONTEND=noninteractive TERM=dumb apt-get install -y -qq --no-install-recommends apt-transport-https ca-certificates gnupg curl
|
|
32
|
+
# apt index already fresh — install gcloud packages without a second apt-get update
|
|
33
|
+
sudo DEBIAN_FRONTEND=noninteractive TERM=dumb apt-get install -y -qq --no-install-recommends \
|
|
34
|
+
google-cloud-cli \
|
|
35
|
+
google-cloud-cli-gke-gcloud-auth-plugin
|
|
36
|
+
sudo apt-get clean
|
|
37
|
+
sudo rm -rf /var/lib/apt/lists/*
|
|
38
|
+
release_apt_lock
|
|
39
|
+
else
|
|
40
|
+
echo "⚠️ Unsupported package manager, skipping gcloud installation"
|
|
41
|
+
exit 0
|
|
42
|
+
fi
|
|
43
|
+
|
|
44
|
+
if command -v gcloud >/dev/null 2>&1; then
|
|
45
|
+
echo "✓ gcloud installed: $(gcloud --version | head -1)"
|
|
46
|
+
else
|
|
47
|
+
echo "✗ gcloud installation failed"
|
|
48
|
+
exit 1
|
|
49
|
+
fi
|
|
50
|
+
|
|
51
|
+
echo "✓ gcloud setup complete"
|
|
@@ -3,6 +3,11 @@
|
|
|
3
3
|
|
|
4
4
|
set -e
|
|
5
5
|
|
|
6
|
+
# Source shared setup utilities (provides load_nvm)
|
|
7
|
+
# shellcheck source=setup-utils.sh
|
|
8
|
+
source "$(dirname "${BASH_SOURCE[0]}")/setup-utils.sh"
|
|
9
|
+
load_nvm
|
|
10
|
+
|
|
6
11
|
echo "📦 Installing Google Gemini CLI..."
|
|
7
12
|
|
|
8
13
|
# Install @google/gemini-cli globally
|
package/overlays/go/setup.sh
CHANGED
|
@@ -3,25 +3,26 @@
|
|
|
3
3
|
|
|
4
4
|
set -e
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
# Source shared setup utilities
|
|
7
|
+
# shellcheck source=setup-utils.sh
|
|
8
|
+
source "$(dirname "${BASH_SOURCE[0]}")/setup-utils.sh"
|
|
7
9
|
|
|
8
|
-
|
|
10
|
+
echo "🔧 Setting up Go development environment..."
|
|
9
11
|
echo "📦 Installing Go development tools..."
|
|
10
12
|
|
|
11
|
-
|
|
12
|
-
go install
|
|
13
|
-
|
|
14
|
-
# delve (Debugger)
|
|
15
|
-
go install github.com/go-delve/delve/cmd/dlv@latest || echo "⚠️ delve installation failed"
|
|
13
|
+
run_spinner "gopls (language server)" go install golang.org/x/tools/gopls@latest
|
|
14
|
+
run_spinner "delve (debugger)" go install github.com/go-delve/delve/cmd/dlv@latest
|
|
16
15
|
|
|
17
|
-
# golangci-lint
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
16
|
+
# golangci-lint — use official installer to avoid gold linker issues on arm64
|
|
17
|
+
if ! command -v golangci-lint &>/dev/null; then
|
|
18
|
+
run_spinner "golangci-lint" \
|
|
19
|
+
bash -c 'curl -sSfL https://raw.githubusercontent.com/golangci/golangci-lint/master/install.sh | sh -s -- -b "$(go env GOPATH)/bin"'
|
|
20
|
+
else
|
|
21
|
+
echo " ℹ️ golangci-lint already installed: $(golangci-lint version --short 2>/dev/null || true)"
|
|
22
|
+
fi
|
|
22
23
|
|
|
23
|
-
|
|
24
|
-
go install honnef.co/go/tools/cmd/staticcheck@latest
|
|
24
|
+
run_spinner "gofumpt (formatter)" go install mvdan.cc/gofumpt@latest
|
|
25
|
+
run_spinner "staticcheck (analyzer)" go install honnef.co/go/tools/cmd/staticcheck@latest
|
|
25
26
|
|
|
26
27
|
# Install project dependencies if go.mod exists
|
|
27
28
|
if [ -f "go.mod" ]; then
|
package/overlays/just/setup.sh
CHANGED
|
@@ -9,31 +9,19 @@ echo "⚡ Setting up just task runner..."
|
|
|
9
9
|
JUST_VERSION="1.25.2"
|
|
10
10
|
ARCH=$(uname -m)
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
if [ "$ARCH" = "x86_64" ]; then
|
|
14
|
-
ARCH="x86_64"
|
|
15
|
-
CHECKSUM="6804798c3744fd1ce563840ee9fe14ae53c74b3cc7b8536da3f87751d7f85501"
|
|
16
|
-
elif [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then
|
|
12
|
+
if [ "$ARCH" = "aarch64" ] || [ "$ARCH" = "arm64" ]; then
|
|
17
13
|
ARCH="aarch64"
|
|
18
|
-
|
|
14
|
+
elif [ "$ARCH" = "x86_64" ]; then
|
|
15
|
+
ARCH="x86_64"
|
|
19
16
|
else
|
|
20
|
-
echo "⚠️ Unsupported architecture: $ARCH"
|
|
17
|
+
echo "⚠️ Unsupported architecture: $ARCH, falling back to x86_64"
|
|
21
18
|
ARCH="x86_64"
|
|
22
|
-
CHECKSUM="6804798c3744fd1ce563840ee9fe14ae53c74b3cc7b8536da3f87751d7f85501"
|
|
23
19
|
fi
|
|
24
20
|
|
|
25
21
|
echo "📦 Downloading just v${JUST_VERSION} for ${ARCH}..."
|
|
26
|
-
curl -
|
|
22
|
+
curl -fsSL "https://github.com/casey/just/releases/download/${JUST_VERSION}/just-${JUST_VERSION}-${ARCH}-unknown-linux-musl.tar.gz" \
|
|
27
23
|
-o /tmp/just.tar.gz
|
|
28
24
|
|
|
29
|
-
# Verify checksum
|
|
30
|
-
echo "🔐 Verifying checksum..."
|
|
31
|
-
echo "${CHECKSUM} /tmp/just.tar.gz" | sha256sum -c - || {
|
|
32
|
-
echo "✗ Checksum verification failed"
|
|
33
|
-
rm /tmp/just.tar.gz
|
|
34
|
-
exit 1
|
|
35
|
-
}
|
|
36
|
-
|
|
37
25
|
# Extract and install
|
|
38
26
|
tar -xzf /tmp/just.tar.gz -C /tmp
|
|
39
27
|
sudo mv /tmp/just /usr/local/bin/
|
|
@@ -15,18 +15,20 @@ services:
|
|
|
15
15
|
KC_HTTP_PORT: 8180
|
|
16
16
|
KC_HOSTNAME_STRICT: 'false'
|
|
17
17
|
KC_HTTP_ENABLED: 'true'
|
|
18
|
+
KC_HEALTH_ENABLED: 'true'
|
|
18
19
|
ports:
|
|
19
20
|
- '${KEYCLOAK_PORT:-8180}:8180'
|
|
20
21
|
depends_on:
|
|
21
|
-
|
|
22
|
+
postgres:
|
|
23
|
+
condition: service_healthy
|
|
22
24
|
networks:
|
|
23
25
|
- devnet
|
|
24
26
|
healthcheck:
|
|
25
|
-
test: ['CMD-SHELL', 'curl -sf http://localhost:
|
|
27
|
+
test: ['CMD-SHELL', 'curl -sf http://localhost:9000/health/ready || exit 1']
|
|
26
28
|
interval: 15s
|
|
27
29
|
timeout: 10s
|
|
28
|
-
retries:
|
|
29
|
-
start_period:
|
|
30
|
+
retries: 15
|
|
31
|
+
start_period: 90s
|
|
30
32
|
|
|
31
33
|
networks:
|
|
32
34
|
devnet:
|
|
@@ -20,10 +20,11 @@ echo ""
|
|
|
20
20
|
echo "2️⃣ Checking Keycloak service..."
|
|
21
21
|
KEYCLOAK_HOST="${KEYCLOAK_HOST:-keycloak}"
|
|
22
22
|
KEYCLOAK_PORT="${KEYCLOAK_PORT:-8180}"
|
|
23
|
+
KEYCLOAK_MGMT_PORT="${KEYCLOAK_MGMT_PORT:-9000}"
|
|
23
24
|
KEYCLOAK_READY=false
|
|
24
25
|
|
|
25
|
-
for i in {1..
|
|
26
|
-
if curl -sf "http://${KEYCLOAK_HOST}:${
|
|
26
|
+
for i in {1..80}; do
|
|
27
|
+
if curl -sf "http://${KEYCLOAK_HOST}:${KEYCLOAK_MGMT_PORT}/health/ready" &> /dev/null; then
|
|
27
28
|
echo " ✅ Keycloak service is ready"
|
|
28
29
|
KEYCLOAK_READY=true
|
|
29
30
|
break
|
|
@@ -32,7 +33,7 @@ for i in {1..40}; do
|
|
|
32
33
|
done
|
|
33
34
|
|
|
34
35
|
if [ "$KEYCLOAK_READY" = false ]; then
|
|
35
|
-
echo " ❌ Keycloak service not ready after
|
|
36
|
+
echo " ❌ Keycloak service not ready after 4 minutes"
|
|
36
37
|
echo " ℹ️ Keycloak can take a while to start on first run"
|
|
37
38
|
exit 1
|
|
38
39
|
fi
|
package/overlays/kind/setup.sh
CHANGED
|
@@ -5,28 +5,19 @@ set -e
|
|
|
5
5
|
|
|
6
6
|
echo "🔧 Setting up kind (Kubernetes in Docker)..."
|
|
7
7
|
|
|
8
|
-
#
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
;;
|
|
14
|
-
aarch64|arm64)
|
|
15
|
-
KIND_ARCH="arm64"
|
|
16
|
-
;;
|
|
17
|
-
*)
|
|
18
|
-
echo "❌ Unsupported architecture: $ARCH"
|
|
19
|
-
exit 1
|
|
20
|
-
;;
|
|
21
|
-
esac
|
|
8
|
+
# Source shared setup utilities
|
|
9
|
+
# shellcheck source=setup-utils.sh
|
|
10
|
+
source "$(dirname "${BASH_SOURCE[0]}")/setup-utils.sh"
|
|
11
|
+
|
|
12
|
+
detect_arch
|
|
22
13
|
|
|
23
14
|
# Install kind
|
|
24
15
|
KIND_VERSION="${KIND_VERSION:-v0.22.0}"
|
|
25
16
|
echo "📦 Installing kind ${KIND_VERSION}..."
|
|
26
17
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
18
|
+
install_binary \
|
|
19
|
+
"https://kind.sigs.k8s.io/dl/${KIND_VERSION}/kind-linux-${CS_ARCH}" \
|
|
20
|
+
"kind"
|
|
30
21
|
|
|
31
22
|
# Verify installation
|
|
32
23
|
if command -v kind &> /dev/null; then
|
package/overlays/minio/setup.sh
CHANGED
|
@@ -7,25 +7,17 @@ echo "🔧 Setting up MinIO client..."
|
|
|
7
7
|
|
|
8
8
|
# Install MinIO client (mc)
|
|
9
9
|
echo "📦 Installing MinIO client (mc)..."
|
|
10
|
+
# Source shared setup utilities
|
|
11
|
+
# shellcheck source=setup-utils.sh
|
|
12
|
+
source "$(dirname "${BASH_SOURCE[0]}")/setup-utils.sh"
|
|
13
|
+
|
|
10
14
|
if ! command -v mc &> /dev/null; then
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
wget -q "${MC_URL}" -O /tmp/mc
|
|
18
|
-
|
|
19
|
-
# Verify checksum
|
|
20
|
-
echo " Verifying checksum..."
|
|
21
|
-
echo "${MC_CHECKSUM} /tmp/mc" | sha256sum -c - || {
|
|
22
|
-
echo " ❌ Checksum verification failed!"
|
|
23
|
-
rm -f /tmp/mc
|
|
24
|
-
exit 1
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
sudo install /tmp/mc /usr/local/bin/
|
|
28
|
-
rm /tmp/mc
|
|
15
|
+
MC_VERSION="${MC_VERSION:-RELEASE.2024-11-17T19-35-25Z}"
|
|
16
|
+
detect_arch
|
|
17
|
+
echo " Downloading MinIO client version ${MC_VERSION} for ${CS_ARCH}..."
|
|
18
|
+
install_binary \
|
|
19
|
+
"https://dl.min.io/client/mc/release/linux-${CS_ARCH}/archive/mc.${MC_VERSION}" \
|
|
20
|
+
"mc"
|
|
29
21
|
echo " ✅ MinIO client installed (${MC_VERSION})"
|
|
30
22
|
else
|
|
31
23
|
echo " ✅ MinIO client already installed"
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
# MkDocs 2 Overlay
|
|
2
|
+
|
|
3
|
+
MkDocs 2.0 pre-release from [encode/mkdocs](https://github.com/encode/mkdocs) — a smart, simple website design tool by Tom Christie.
|
|
4
|
+
|
|
5
|
+
> **Pre-release notice:** MkDocs 2.0 is installed from the `encode/mkdocs` git repository. There is no PyPI release yet. This is a complete rewrite of the original MkDocs project — it is **not** backward-compatible with MkDocs 1.x.
|
|
6
|
+
|
|
7
|
+
## Features
|
|
8
|
+
|
|
9
|
+
- **MkDocs 2.0** — complete rewrite with modern architecture
|
|
10
|
+
- **TOML configuration** — uses `mkdocs.toml` instead of `mkdocs.yml`
|
|
11
|
+
- **Built-in theming** — custom theme system (does not use Material for MkDocs)
|
|
12
|
+
- **GitHub Flavored Markdown** — native GFM support
|
|
13
|
+
- **pymdown-extensions** — extended Markdown syntax included
|
|
14
|
+
- **Python dependency** — automatically includes the Python overlay (required)
|
|
15
|
+
- **VS Code Extensions:**
|
|
16
|
+
- Markdown All in One
|
|
17
|
+
- Markdown Lint
|
|
18
|
+
- Markdown Mermaid
|
|
19
|
+
- **Port forwarding:** 8000 (MkDocs dev server, auto-opens in browser)
|
|
20
|
+
|
|
21
|
+
## How It Works
|
|
22
|
+
|
|
23
|
+
The overlay's `setup.sh` script installs MkDocs 2.0 directly from the
|
|
24
|
+
[encode/mkdocs](https://github.com/encode/mkdocs) GitHub repository via
|
|
25
|
+
`pip install git+https://github.com/encode/mkdocs.git` into the workspace
|
|
26
|
+
virtual environment (`.venv`) created by the Python overlay.
|
|
27
|
+
|
|
28
|
+
## Dependencies
|
|
29
|
+
|
|
30
|
+
- Requires: **python** overlay (automatically selected)
|
|
31
|
+
- Conflicts: **mkdocs** overlay — only one MkDocs variant can be active at a time
|
|
32
|
+
|
|
33
|
+
## Quick Start
|
|
34
|
+
|
|
35
|
+
### New Documentation Site
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
# Create a README.md and start the dev server
|
|
39
|
+
echo "# My Docs" > README.md
|
|
40
|
+
mkdocs serve
|
|
41
|
+
# Opens at http://localhost:8000
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Build Static Site
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
mkdocs build
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Configuration
|
|
51
|
+
|
|
52
|
+
MkDocs 2.0 uses `mkdocs.toml` (not the 1.x `mkdocs.yml`):
|
|
53
|
+
|
|
54
|
+
```toml
|
|
55
|
+
[mkdocs]
|
|
56
|
+
nav = [
|
|
57
|
+
{path = "README.md", title = "Introduction"},
|
|
58
|
+
{path = "guide.md", title = "Guide"},
|
|
59
|
+
{path = "CREDITS.md", title = "Credits"},
|
|
60
|
+
]
|
|
61
|
+
|
|
62
|
+
[loaders]
|
|
63
|
+
theme = "pkg://mkdocs/default"
|
|
64
|
+
docs = "dir://docs"
|
|
65
|
+
|
|
66
|
+
[context]
|
|
67
|
+
title = "Documentation"
|
|
68
|
+
favicon = "📘"
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Page Structure
|
|
72
|
+
|
|
73
|
+
Use either `README.md` or `index.md` for the homepage. Place additional pages in a `docs/` directory:
|
|
74
|
+
|
|
75
|
+
```
|
|
76
|
+
my-project/
|
|
77
|
+
├── mkdocs.toml
|
|
78
|
+
├── README.md
|
|
79
|
+
├── docs/
|
|
80
|
+
│ ├── guide.md
|
|
81
|
+
│ └── reference.md
|
|
82
|
+
└── site/ # Built output (git-ignored)
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Key Differences from MkDocs 1.x
|
|
86
|
+
|
|
87
|
+
| Feature | MkDocs 1.x (`mkdocs` overlay) | MkDocs 2.0 (`mkdocs2` overlay) |
|
|
88
|
+
| -------------- | ----------------------------- | ------------------------------ |
|
|
89
|
+
| Config file | `mkdocs.yml` | `mkdocs.toml` |
|
|
90
|
+
| Theme | Material for MkDocs | Built-in themes |
|
|
91
|
+
| Plugin system | `mkdocs-plugins` ecosystem | New architecture |
|
|
92
|
+
| Install source | PyPI / devcontainer feature | `encode/mkdocs` git repo |
|
|
93
|
+
| Markdown | Standard + extensions | GitHub Flavored Markdown |
|
|
94
|
+
| Status | Stable (1.6.1) | Pre-release (2.0) |
|
|
95
|
+
|
|
96
|
+
## Common Commands
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
# Start live-reloading dev server
|
|
100
|
+
mkdocs serve
|
|
101
|
+
|
|
102
|
+
# Build static site
|
|
103
|
+
mkdocs build
|
|
104
|
+
|
|
105
|
+
# Serve on a different port
|
|
106
|
+
mkdocs serve --dev-addr 0.0.0.0:8001
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Troubleshooting
|
|
110
|
+
|
|
111
|
+
### `mkdocs: command not found`
|
|
112
|
+
|
|
113
|
+
The Python virtual environment may not be activated. Activate it manually:
|
|
114
|
+
|
|
115
|
+
```bash
|
|
116
|
+
source .venv/bin/activate
|
|
117
|
+
mkdocs --version
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Port 8000 already in use
|
|
121
|
+
|
|
122
|
+
Use a different port: `mkdocs serve --dev-addr 0.0.0.0:8001`
|
|
123
|
+
|
|
124
|
+
## References
|
|
125
|
+
|
|
126
|
+
- [encode/mkdocs on GitHub](https://github.com/encode/mkdocs)
|
|
127
|
+
- [MkDocs 2.0 writing guide](https://github.com/encode/mkdocs/blob/main/docs/writing.md)
|
|
128
|
+
- [MkDocs 2.0 navigation docs](https://github.com/encode/mkdocs/blob/main/docs/navigation.md)
|
|
129
|
+
- [MkDocs 2.0 styling docs](https://github.com/encode/mkdocs/blob/main/docs/styling.md)
|
|
130
|
+
|
|
131
|
+
**Related Overlays:**
|
|
132
|
+
|
|
133
|
+
- `python` — required Python runtime
|
|
134
|
+
- `mkdocs` — legacy MkDocs 1.x overlay (conflicts with this overlay)
|
|
135
|
+
- `pandoc` — convert Markdown to PDF
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
|
|
3
|
+
"customizations": {
|
|
4
|
+
"vscode": {
|
|
5
|
+
"extensions": [
|
|
6
|
+
"yzhang.markdown-all-in-one",
|
|
7
|
+
"DavidAnson.vscode-markdownlint",
|
|
8
|
+
"bierner.markdown-mermaid"
|
|
9
|
+
]
|
|
10
|
+
}
|
|
11
|
+
},
|
|
12
|
+
"forwardPorts": [8000],
|
|
13
|
+
"portsAttributes": {
|
|
14
|
+
"8000": {
|
|
15
|
+
"label": "MkDocs Server",
|
|
16
|
+
"onAutoForward": "openBrowser"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
id: mkdocs2
|
|
2
|
+
name: MkDocs 2
|
|
3
|
+
description: MkDocs 2.0 pre-release (encode/mkdocs) — smart, simple website design tool
|
|
4
|
+
category: dev
|
|
5
|
+
supports: []
|
|
6
|
+
requires:
|
|
7
|
+
- python
|
|
8
|
+
suggests: []
|
|
9
|
+
conflicts:
|
|
10
|
+
- mkdocs
|
|
11
|
+
tags:
|
|
12
|
+
- dev
|
|
13
|
+
- documentation
|
|
14
|
+
- mkdocs
|
|
15
|
+
- python
|
|
16
|
+
ports:
|
|
17
|
+
- 8000
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# mkdocs2 setup script — install MkDocs 2.0 pre-release from encode/mkdocs
|
|
3
|
+
|
|
4
|
+
set -e
|
|
5
|
+
|
|
6
|
+
echo "📚 Setting up MkDocs 2.0 (encode/mkdocs)..."
|
|
7
|
+
|
|
8
|
+
# Always install into the workspace virtual environment.
|
|
9
|
+
# The Python overlay is declared as a hard dependency (requires: [python]) so
|
|
10
|
+
# its setup script should have run first; but if the .venv doesn't exist yet
|
|
11
|
+
# (e.g., ordering edge-case) we create it here so this script is self-contained.
|
|
12
|
+
VENV_DIR="${PWD}/.venv"
|
|
13
|
+
|
|
14
|
+
# Helper: validate that the venv's Python interpreter is actually executable.
|
|
15
|
+
venv_is_valid() {
|
|
16
|
+
"${VENV_DIR}/bin/python" -c "import sys" &>/dev/null
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
if [ -d "${VENV_DIR}" ]; then
|
|
20
|
+
if venv_is_valid; then
|
|
21
|
+
echo " Using virtual environment: ${VENV_DIR}"
|
|
22
|
+
else
|
|
23
|
+
echo "⚠️ Existing .venv is invalid (stale interpreter or broken site-packages), recreating..."
|
|
24
|
+
rm -rf "${VENV_DIR}"
|
|
25
|
+
fi
|
|
26
|
+
else
|
|
27
|
+
# Also handle the case where the directory listing showed site-packages exists
|
|
28
|
+
# but venv_is_valid failed — this handles partial/corrupted venvs
|
|
29
|
+
: # nothing to do, venv doesn't exist yet
|
|
30
|
+
fi
|
|
31
|
+
|
|
32
|
+
# If the venv directory exists but python fails with EEXIST on site-packages,
|
|
33
|
+
# it is a leftover from a previous interrupted run — recreate it.
|
|
34
|
+
if [ -d "${VENV_DIR}" ] && ! "${VENV_DIR}/bin/python" -m pip --version &>/dev/null; then
|
|
35
|
+
echo "⚠️ Existing .venv has broken pip, recreating..."
|
|
36
|
+
rm -rf "${VENV_DIR}"
|
|
37
|
+
fi
|
|
38
|
+
|
|
39
|
+
if [ ! -d "${VENV_DIR}" ]; then
|
|
40
|
+
echo "📦 Creating virtual environment at .venv..."
|
|
41
|
+
if ! command -v python3 &>/dev/null; then
|
|
42
|
+
echo "❌ python3 is not available. Please ensure the python overlay is included."
|
|
43
|
+
exit 1
|
|
44
|
+
fi
|
|
45
|
+
python3 -m venv "${VENV_DIR}"
|
|
46
|
+
echo "✓ Virtual environment created"
|
|
47
|
+
fi
|
|
48
|
+
|
|
49
|
+
# Use the venv's Python directly to invoke pip — this is more robust than
|
|
50
|
+
# calling the pip wrapper script, whose shebang can point to a stale path.
|
|
51
|
+
PYTHON="${VENV_DIR}/bin/python"
|
|
52
|
+
|
|
53
|
+
echo "📦 Installing MkDocs 2.0 from encode/mkdocs..."
|
|
54
|
+
"${PYTHON}" -m pip install -q --no-cache-dir \
|
|
55
|
+
"mkdocs @ git+https://github.com/encode/mkdocs.git"
|
|
56
|
+
|
|
57
|
+
MKDOCS_BIN="${VENV_DIR}/bin/mkdocs"
|
|
58
|
+
if [ -x "${MKDOCS_BIN}" ]; then
|
|
59
|
+
echo "✓ $( "${MKDOCS_BIN}" --version 2>/dev/null || echo 'mkdocs 2.0' )"
|
|
60
|
+
else
|
|
61
|
+
echo "✗ mkdocs not found in ${VENV_DIR}/bin after installation"
|
|
62
|
+
exit 1
|
|
63
|
+
fi
|
|
64
|
+
|
|
65
|
+
echo "✅ MkDocs 2.0 setup complete"
|
|
66
|
+
echo "ℹ️ Start dev server: mkdocs serve"
|
|
67
|
+
echo "ℹ️ Build static site: mkdocs build"
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# mkdocs2 overlay verification script
|
|
3
|
+
|
|
4
|
+
echo "🔍 Verifying MkDocs 2.0 overlay setup..."
|
|
5
|
+
|
|
6
|
+
ALL_CHECKS_PASSED=true
|
|
7
|
+
|
|
8
|
+
# mkdocs may be installed inside .venv (Python overlay) or on the system PATH
|
|
9
|
+
MKDOCS_BIN="mkdocs"
|
|
10
|
+
if [ -f "${PWD}/.venv/bin/mkdocs" ]; then
|
|
11
|
+
MKDOCS_BIN="${PWD}/.venv/bin/mkdocs"
|
|
12
|
+
fi
|
|
13
|
+
|
|
14
|
+
# Check mkdocs is available
|
|
15
|
+
if ! command -v "${MKDOCS_BIN}" &>/dev/null && [ ! -x "${MKDOCS_BIN}" ]; then
|
|
16
|
+
echo "✗ mkdocs not found"
|
|
17
|
+
ALL_CHECKS_PASSED=false
|
|
18
|
+
else
|
|
19
|
+
VERSION=$("${MKDOCS_BIN}" --version 2>/dev/null || echo "unknown")
|
|
20
|
+
echo "✓ mkdocs is installed: ${VERSION}"
|
|
21
|
+
fi
|
|
22
|
+
|
|
23
|
+
if [ "${ALL_CHECKS_PASSED}" = true ]; then
|
|
24
|
+
echo ""
|
|
25
|
+
echo "✅ MkDocs 2.0 overlay verification complete!"
|
|
26
|
+
echo ""
|
|
27
|
+
echo "💡 Tips:"
|
|
28
|
+
echo " - Start dev server: mkdocs serve"
|
|
29
|
+
echo " - Build static site: mkdocs build"
|
|
30
|
+
echo " - New project: mkdocs new ."
|
|
31
|
+
else
|
|
32
|
+
echo ""
|
|
33
|
+
echo "✗ MkDocs 2.0 overlay verification failed"
|
|
34
|
+
exit 1
|
|
35
|
+
fi
|
|
@@ -1,3 +1,9 @@
|
|
|
1
1
|
{
|
|
2
|
-
"$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json"
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
|
|
3
|
+
"features": {
|
|
4
|
+
"./features/cross-distro-packages": {
|
|
5
|
+
"apt": "jq ripgrep fd-find bat",
|
|
6
|
+
"apk": "jq ripgrep fd bat"
|
|
7
|
+
}
|
|
8
|
+
}
|
|
3
9
|
}
|