container-superposition 0.1.1
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/README.md +843 -0
- package/dist/scripts/init.d.ts +3 -0
- package/dist/scripts/init.d.ts.map +1 -0
- package/dist/scripts/init.js +1190 -0
- package/dist/scripts/init.js.map +1 -0
- package/dist/scripts/migrate-to-manifests.d.ts +12 -0
- package/dist/scripts/migrate-to-manifests.d.ts.map +1 -0
- package/dist/scripts/migrate-to-manifests.js +230 -0
- package/dist/scripts/migrate-to-manifests.js.map +1 -0
- package/dist/tool/questionnaire/composer.d.ts +6 -0
- package/dist/tool/questionnaire/composer.d.ts.map +1 -0
- package/dist/tool/questionnaire/composer.js +1232 -0
- package/dist/tool/questionnaire/composer.js.map +1 -0
- package/dist/tool/readme/markdown-parser.d.ts +30 -0
- package/dist/tool/readme/markdown-parser.d.ts.map +1 -0
- package/dist/tool/readme/markdown-parser.js +139 -0
- package/dist/tool/readme/markdown-parser.js.map +1 -0
- package/dist/tool/readme/readme-generator.d.ts +9 -0
- package/dist/tool/readme/readme-generator.d.ts.map +1 -0
- package/dist/tool/readme/readme-generator.js +422 -0
- package/dist/tool/readme/readme-generator.js.map +1 -0
- package/dist/tool/schema/custom-loader.d.ts +17 -0
- package/dist/tool/schema/custom-loader.d.ts.map +1 -0
- package/dist/tool/schema/custom-loader.js +149 -0
- package/dist/tool/schema/custom-loader.js.map +1 -0
- package/dist/tool/schema/overlay-loader.d.ts +47 -0
- package/dist/tool/schema/overlay-loader.d.ts.map +1 -0
- package/dist/tool/schema/overlay-loader.js +252 -0
- package/dist/tool/schema/overlay-loader.js.map +1 -0
- package/dist/tool/schema/types.d.ts +212 -0
- package/dist/tool/schema/types.d.ts.map +1 -0
- package/dist/tool/schema/types.js +5 -0
- package/dist/tool/schema/types.js.map +1 -0
- package/docs/README.md +308 -0
- package/docs/architecture.md +233 -0
- package/docs/creating-overlays.md +549 -0
- package/docs/custom-patches.md +540 -0
- package/docs/dependencies.md +279 -0
- package/docs/examples/custom-patches-example.md +85 -0
- package/docs/examples.md +576 -0
- package/docs/messaging-comparison.md +265 -0
- package/docs/messaging-quick-start.md +385 -0
- package/docs/observability-workflow.md +537 -0
- package/docs/overlay-manifest-refactoring.md +214 -0
- package/docs/overlay-metadata-archive.md +54 -0
- package/docs/overlays.md +523 -0
- package/docs/presets-architecture.md +498 -0
- package/docs/presets.md +366 -0
- package/docs/publishing.md +476 -0
- package/docs/quick-reference.md +326 -0
- package/docs/ux.md +170 -0
- package/features/README.md +85 -0
- package/features/cross-distro-packages/README.md +146 -0
- package/features/cross-distro-packages/devcontainer-feature.json +20 -0
- package/features/cross-distro-packages/install.sh +58 -0
- package/features/local-secrets-manager/devcontainer-feature.json +18 -0
- package/features/local-secrets-manager/install.sh +127 -0
- package/features/project-scaffolder/devcontainer-feature.json +24 -0
- package/features/project-scaffolder/install.sh +100 -0
- package/features/team-conventions/devcontainer-feature.json +24 -0
- package/features/team-conventions/install.sh +93 -0
- package/overlays/.registry/README.md +14 -0
- package/overlays/.registry/base-images.yml +26 -0
- package/overlays/.registry/base-templates.yml +7 -0
- package/overlays/README.md +155 -0
- package/overlays/alertmanager/.env.example +5 -0
- package/overlays/alertmanager/README.md +465 -0
- package/overlays/alertmanager/alert-rules.yml +56 -0
- package/overlays/alertmanager/alertmanager.yml +42 -0
- package/overlays/alertmanager/devcontainer.patch.json +12 -0
- package/overlays/alertmanager/docker-compose.yml +20 -0
- package/overlays/alertmanager/overlay.yml +17 -0
- package/overlays/alertmanager/setup.sh +53 -0
- package/overlays/alertmanager/verify.sh +31 -0
- package/overlays/aws-cli/README.md +473 -0
- package/overlays/aws-cli/devcontainer.patch.json +13 -0
- package/overlays/aws-cli/overlay.yml +13 -0
- package/overlays/azure-cli/README.md +551 -0
- package/overlays/azure-cli/devcontainer.patch.json +8 -0
- package/overlays/azure-cli/overlay.yml +13 -0
- package/overlays/bun/README.md +312 -0
- package/overlays/bun/devcontainer.patch.json +41 -0
- package/overlays/bun/overlay.yml +16 -0
- package/overlays/bun/setup.sh +79 -0
- package/overlays/bun/verify.sh +30 -0
- package/overlays/codex/README.md +128 -0
- package/overlays/codex/devcontainer.patch.json +3 -0
- package/overlays/codex/overlay.yml +14 -0
- package/overlays/codex/setup.sh +24 -0
- package/overlays/codex/verify.sh +30 -0
- package/overlays/commitlint/README.md +333 -0
- package/overlays/commitlint/devcontainer.patch.json +8 -0
- package/overlays/commitlint/overlay.yml +16 -0
- package/overlays/commitlint/setup.sh +234 -0
- package/overlays/direnv/README.md +504 -0
- package/overlays/direnv/devcontainer.patch.json +6 -0
- package/overlays/direnv/overlay.yml +13 -0
- package/overlays/direnv/setup.sh +139 -0
- package/overlays/docker-in-docker/README.md +534 -0
- package/overlays/docker-in-docker/devcontainer.patch.json +10 -0
- package/overlays/docker-in-docker/overlay.yml +13 -0
- package/overlays/docker-sock/README.md +256 -0
- package/overlays/docker-sock/devcontainer.patch.json +9 -0
- package/overlays/docker-sock/docker-compose.yml +8 -0
- package/overlays/docker-sock/overlay.yml +13 -0
- package/overlays/dotnet/README.md +147 -0
- package/overlays/dotnet/devcontainer.patch.json +51 -0
- package/overlays/dotnet/global-tools.txt +24 -0
- package/overlays/dotnet/overlay.yml +13 -0
- package/overlays/dotnet/setup.sh +51 -0
- package/overlays/dotnet/verify.sh +26 -0
- package/overlays/gcloud/README.md +269 -0
- package/overlays/gcloud/devcontainer.patch.json +14 -0
- package/overlays/gcloud/overlay.yml +14 -0
- package/overlays/gcloud/verify.sh +52 -0
- package/overlays/git-helpers/README.md +168 -0
- package/overlays/git-helpers/devcontainer.patch.json +33 -0
- package/overlays/git-helpers/overlay.yml +15 -0
- package/overlays/git-helpers/setup.sh +91 -0
- package/overlays/go/README.md +293 -0
- package/overlays/go/devcontainer.patch.json +43 -0
- package/overlays/go/overlay.yml +15 -0
- package/overlays/go/setup.sh +33 -0
- package/overlays/go/verify.sh +40 -0
- package/overlays/grafana/.env.example +9 -0
- package/overlays/grafana/README.md +462 -0
- package/overlays/grafana/dashboard-provider.yml +11 -0
- package/overlays/grafana/dashboards/observability-overview.json +263 -0
- package/overlays/grafana/devcontainer.patch.json +12 -0
- package/overlays/grafana/docker-compose.yml +27 -0
- package/overlays/grafana/grafana-datasources.yml +57 -0
- package/overlays/grafana/overlay.yml +21 -0
- package/overlays/grafana/verify.sh +34 -0
- package/overlays/jaeger/.env.example +7 -0
- package/overlays/jaeger/README.md +867 -0
- package/overlays/jaeger/devcontainer.patch.json +12 -0
- package/overlays/jaeger/docker-compose.yml +17 -0
- package/overlays/jaeger/overlay.yml +19 -0
- package/overlays/java/README.md +267 -0
- package/overlays/java/devcontainer.patch.json +44 -0
- package/overlays/java/overlay.yml +16 -0
- package/overlays/java/setup.sh +41 -0
- package/overlays/java/verify.sh +42 -0
- package/overlays/just/README.md +443 -0
- package/overlays/just/devcontainer.patch.json +3 -0
- package/overlays/just/overlay.yml +13 -0
- package/overlays/just/setup.sh +182 -0
- package/overlays/kubectl-helm/README.md +660 -0
- package/overlays/kubectl-helm/devcontainer.patch.json +10 -0
- package/overlays/kubectl-helm/overlay.yml +13 -0
- package/overlays/loki/.env.example +5 -0
- package/overlays/loki/README.md +1156 -0
- package/overlays/loki/devcontainer.patch.json +12 -0
- package/overlays/loki/docker-compose.yml +18 -0
- package/overlays/loki/loki-config.yaml +45 -0
- package/overlays/loki/overlay.yml +17 -0
- package/overlays/minio/.env.example +9 -0
- package/overlays/minio/README.md +639 -0
- package/overlays/minio/devcontainer.patch.json +30 -0
- package/overlays/minio/docker-compose.yml +28 -0
- package/overlays/minio/overlay.yml +18 -0
- package/overlays/minio/setup.sh +61 -0
- package/overlays/minio/verify.sh +64 -0
- package/overlays/mkdocs/README.md +309 -0
- package/overlays/mkdocs/devcontainer.patch.json +24 -0
- package/overlays/mkdocs/overlay.yml +15 -0
- package/overlays/modern-cli-tools/README.md +556 -0
- package/overlays/modern-cli-tools/devcontainer.patch.json +3 -0
- package/overlays/modern-cli-tools/overlay.yml +13 -0
- package/overlays/modern-cli-tools/setup.sh +153 -0
- package/overlays/mongodb/.env.example +9 -0
- package/overlays/mongodb/README.md +481 -0
- package/overlays/mongodb/devcontainer.patch.json +32 -0
- package/overlays/mongodb/docker-compose.yml +44 -0
- package/overlays/mongodb/overlay.yml +17 -0
- package/overlays/mongodb/verify.sh +48 -0
- package/overlays/mysql/.env.example +11 -0
- package/overlays/mysql/README.md +542 -0
- package/overlays/mysql/devcontainer.patch.json +34 -0
- package/overlays/mysql/docker-compose.yml +55 -0
- package/overlays/mysql/overlay.yml +16 -0
- package/overlays/mysql/verify.sh +48 -0
- package/overlays/nats/.env.example +5 -0
- package/overlays/nats/README.md +762 -0
- package/overlays/nats/devcontainer.patch.json +24 -0
- package/overlays/nats/docker-compose.yml +31 -0
- package/overlays/nats/overlay.yml +18 -0
- package/overlays/nats/verify.sh +50 -0
- package/overlays/ngrok/README.md +503 -0
- package/overlays/ngrok/devcontainer.patch.json +3 -0
- package/overlays/ngrok/overlay.yml +14 -0
- package/overlays/ngrok/setup.sh +125 -0
- package/overlays/nodejs/README.md +192 -0
- package/overlays/nodejs/devcontainer.patch.json +49 -0
- package/overlays/nodejs/global-packages.txt +16 -0
- package/overlays/nodejs/overlay.yml +14 -0
- package/overlays/nodejs/setup.sh +46 -0
- package/overlays/nodejs/verify.sh +32 -0
- package/overlays/otel-collector/.env.example +9 -0
- package/overlays/otel-collector/README.md +1257 -0
- package/overlays/otel-collector/devcontainer.patch.json +28 -0
- package/overlays/otel-collector/docker-compose.yml +22 -0
- package/overlays/otel-collector/otel-collector-config.yaml +68 -0
- package/overlays/otel-collector/overlay.yml +21 -0
- package/overlays/otel-collector/setup.sh +49 -0
- package/overlays/otel-demo-nodejs/.env.example +2 -0
- package/overlays/otel-demo-nodejs/Dockerfile-otel-demo-nodejs +17 -0
- package/overlays/otel-demo-nodejs/README.md +409 -0
- package/overlays/otel-demo-nodejs/devcontainer.patch.json +12 -0
- package/overlays/otel-demo-nodejs/docker-compose.yml +19 -0
- package/overlays/otel-demo-nodejs/overlay.yml +23 -0
- package/overlays/otel-demo-nodejs/package-otel-demo-nodejs.json +20 -0
- package/overlays/otel-demo-nodejs/server-otel-demo-nodejs.js +259 -0
- package/overlays/otel-demo-nodejs/tracing-otel-demo-nodejs.js +57 -0
- package/overlays/otel-demo-nodejs/verify.sh +31 -0
- package/overlays/otel-demo-python/.env.example +2 -0
- package/overlays/otel-demo-python/Dockerfile-otel-demo-python +16 -0
- package/overlays/otel-demo-python/README.md +82 -0
- package/overlays/otel-demo-python/app-otel-demo-python.py +208 -0
- package/overlays/otel-demo-python/devcontainer.patch.json +12 -0
- package/overlays/otel-demo-python/docker-compose.yml +19 -0
- package/overlays/otel-demo-python/overlay.yml +23 -0
- package/overlays/otel-demo-python/requirements-otel-demo-python.txt +4 -0
- package/overlays/otel-demo-python/verify.sh +31 -0
- package/overlays/playwright/README.md +629 -0
- package/overlays/playwright/devcontainer.patch.json +9 -0
- package/overlays/playwright/overlay.yml +13 -0
- package/overlays/postgres/.env.example +6 -0
- package/overlays/postgres/README.md +602 -0
- package/overlays/postgres/devcontainer.patch.json +21 -0
- package/overlays/postgres/docker-compose.yml +22 -0
- package/overlays/postgres/overlay.yml +15 -0
- package/overlays/postgres/verify.sh +45 -0
- package/overlays/powershell/README.md +314 -0
- package/overlays/powershell/devcontainer.patch.json +22 -0
- package/overlays/powershell/overlay.yml +13 -0
- package/overlays/powershell/setup.sh +29 -0
- package/overlays/powershell/verify.sh +38 -0
- package/overlays/pre-commit/README.md +263 -0
- package/overlays/pre-commit/devcontainer.patch.json +9 -0
- package/overlays/pre-commit/overlay.yml +16 -0
- package/overlays/pre-commit/setup.sh +129 -0
- package/overlays/presets/docs-site.yml +118 -0
- package/overlays/presets/fullstack.yml +181 -0
- package/overlays/presets/microservice.yml +118 -0
- package/overlays/presets/web-api.yml +109 -0
- package/overlays/prometheus/.env.example +5 -0
- package/overlays/prometheus/README.md +1246 -0
- package/overlays/prometheus/devcontainer.patch.json +12 -0
- package/overlays/prometheus/docker-compose.yml +22 -0
- package/overlays/prometheus/overlay.yml +17 -0
- package/overlays/prometheus/prometheus.yml +12 -0
- package/overlays/prometheus/verify.sh +34 -0
- package/overlays/promtail/.env.example +2 -0
- package/overlays/promtail/README.md +357 -0
- package/overlays/promtail/devcontainer.patch.json +5 -0
- package/overlays/promtail/docker-compose.yml +16 -0
- package/overlays/promtail/overlay.yml +17 -0
- package/overlays/promtail/promtail-config.yaml +60 -0
- package/overlays/promtail/verify.sh +31 -0
- package/overlays/pulumi/README.md +472 -0
- package/overlays/pulumi/devcontainer.patch.json +13 -0
- package/overlays/pulumi/overlay.yml +14 -0
- package/overlays/pulumi/verify.sh +31 -0
- package/overlays/python/README.md +919 -0
- package/overlays/python/devcontainer.patch.json +41 -0
- package/overlays/python/overlay.yml +12 -0
- package/overlays/python/requirements-overlay.txt +13 -0
- package/overlays/python/setup.sh +47 -0
- package/overlays/python/verify.sh +32 -0
- package/overlays/rabbitmq/.env.example +7 -0
- package/overlays/rabbitmq/README.md +680 -0
- package/overlays/rabbitmq/devcontainer.patch.json +28 -0
- package/overlays/rabbitmq/docker-compose.yml +30 -0
- package/overlays/rabbitmq/overlay.yml +18 -0
- package/overlays/rabbitmq/verify.sh +41 -0
- package/overlays/redis/.env.example +4 -0
- package/overlays/redis/README.md +776 -0
- package/overlays/redis/devcontainer.patch.json +21 -0
- package/overlays/redis/docker-compose.yml +21 -0
- package/overlays/redis/overlay.yml +15 -0
- package/overlays/redis/verify.sh +41 -0
- package/overlays/redpanda/.env.example +10 -0
- package/overlays/redpanda/README.md +703 -0
- package/overlays/redpanda/devcontainer.patch.json +37 -0
- package/overlays/redpanda/docker-compose.yml +67 -0
- package/overlays/redpanda/overlay.yml +21 -0
- package/overlays/redpanda/verify.sh +48 -0
- package/overlays/rust/README.md +299 -0
- package/overlays/rust/devcontainer.patch.json +39 -0
- package/overlays/rust/overlay.yml +15 -0
- package/overlays/rust/setup.sh +36 -0
- package/overlays/rust/verify.sh +51 -0
- package/overlays/sqlite/README.md +584 -0
- package/overlays/sqlite/devcontainer.patch.json +14 -0
- package/overlays/sqlite/overlay.yml +15 -0
- package/overlays/sqlite/setup.sh +27 -0
- package/overlays/sqlite/verify.sh +43 -0
- package/overlays/sqlserver/.env.example +6 -0
- package/overlays/sqlserver/README.md +592 -0
- package/overlays/sqlserver/devcontainer.patch.json +22 -0
- package/overlays/sqlserver/docker-compose.yml +32 -0
- package/overlays/sqlserver/overlay.yml +17 -0
- package/overlays/sqlserver/verify.sh +30 -0
- package/overlays/tempo/.env.example +5 -0
- package/overlays/tempo/README.md +273 -0
- package/overlays/tempo/devcontainer.patch.json +12 -0
- package/overlays/tempo/docker-compose.yml +20 -0
- package/overlays/tempo/overlay.yml +20 -0
- package/overlays/tempo/tempo-config.yaml +32 -0
- package/overlays/tempo/verify.sh +31 -0
- package/overlays/terraform/README.md +389 -0
- package/overlays/terraform/devcontainer.patch.json +15 -0
- package/overlays/terraform/overlay.yml +14 -0
- package/overlays/terraform/verify.sh +63 -0
- package/package.json +74 -0
- package/templates/README.md +285 -0
- package/templates/compose/.devcontainer/devcontainer.json +46 -0
- package/templates/compose/.devcontainer/docker-compose.yml +12 -0
- package/templates/compose/README.md +20 -0
- package/templates/plain/.devcontainer/devcontainer.json +35 -0
- package/templates/plain/README.md +21 -0
- package/tool/README.md +281 -0
- package/tool/schema/base-images.schema.json +43 -0
- package/tool/schema/base-templates.schema.json +34 -0
- package/tool/schema/config.schema.json +71 -0
- package/tool/schema/overlay-manifest.schema.json +86 -0
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# ngrok setup script
|
|
3
|
+
|
|
4
|
+
set -e
|
|
5
|
+
|
|
6
|
+
echo "🌐 Setting up ngrok..."
|
|
7
|
+
|
|
8
|
+
# Install ngrok using official apt repository (provides signed packages)
|
|
9
|
+
echo "📦 Installing ngrok from official repository..."
|
|
10
|
+
|
|
11
|
+
# Add ngrok's GPG key and repository
|
|
12
|
+
curl -sSL https://ngrok-agent.s3.amazonaws.com/ngrok.asc \
|
|
13
|
+
| sudo tee /etc/apt/trusted.gpg.d/ngrok.asc >/dev/null
|
|
14
|
+
|
|
15
|
+
echo "deb https://ngrok-agent.s3.amazonaws.com buster main" \
|
|
16
|
+
| sudo tee /etc/apt/sources.list.d/ngrok.list
|
|
17
|
+
|
|
18
|
+
# Update and install
|
|
19
|
+
sudo apt-get update -qq
|
|
20
|
+
sudo apt-get install -y ngrok
|
|
21
|
+
|
|
22
|
+
# Verify installation
|
|
23
|
+
if command -v ngrok &> /dev/null; then
|
|
24
|
+
echo "✓ ngrok installed: $(ngrok version)"
|
|
25
|
+
else
|
|
26
|
+
echo "✗ ngrok installation failed"
|
|
27
|
+
exit 1
|
|
28
|
+
fi
|
|
29
|
+
|
|
30
|
+
# Create sample ngrok configuration
|
|
31
|
+
mkdir -p "$HOME/.config/ngrok"
|
|
32
|
+
if [ ! -f "$HOME/.config/ngrok/ngrok.yml" ]; then
|
|
33
|
+
cat > "$HOME/.config/ngrok/ngrok.yml" << 'EOF'
|
|
34
|
+
# ngrok configuration file
|
|
35
|
+
# Visit https://dashboard.ngrok.com/get-started/your-authtoken to get your authtoken
|
|
36
|
+
# Then run: ngrok config add-authtoken YOUR_TOKEN
|
|
37
|
+
|
|
38
|
+
version: "2"
|
|
39
|
+
|
|
40
|
+
# Uncomment and set your authtoken
|
|
41
|
+
# authtoken: YOUR_AUTHTOKEN_HERE
|
|
42
|
+
|
|
43
|
+
# Region (us, eu, ap, au, sa, jp, in)
|
|
44
|
+
region: us
|
|
45
|
+
|
|
46
|
+
# Console UI settings
|
|
47
|
+
console_ui: true
|
|
48
|
+
console_ui_color: transparent
|
|
49
|
+
|
|
50
|
+
# Log settings
|
|
51
|
+
log_level: info
|
|
52
|
+
log_format: json
|
|
53
|
+
log: /tmp/ngrok.log
|
|
54
|
+
|
|
55
|
+
# Tunnel definitions
|
|
56
|
+
tunnels:
|
|
57
|
+
# HTTP tunnel example
|
|
58
|
+
web:
|
|
59
|
+
proto: http
|
|
60
|
+
addr: 3000
|
|
61
|
+
# Optional: custom subdomain (requires paid plan)
|
|
62
|
+
# subdomain: myapp
|
|
63
|
+
# Optional: custom domain (requires paid plan)
|
|
64
|
+
# hostname: myapp.example.com
|
|
65
|
+
# Optional: basic auth
|
|
66
|
+
# auth: "user:password"
|
|
67
|
+
# Optional: inspect traffic
|
|
68
|
+
inspect: true
|
|
69
|
+
|
|
70
|
+
# HTTPS tunnel example
|
|
71
|
+
api:
|
|
72
|
+
proto: http
|
|
73
|
+
addr: 8080
|
|
74
|
+
inspect: true
|
|
75
|
+
|
|
76
|
+
# TCP tunnel example (databases, SSH, etc.)
|
|
77
|
+
database:
|
|
78
|
+
proto: tcp
|
|
79
|
+
addr: 5432
|
|
80
|
+
|
|
81
|
+
# TLS tunnel example
|
|
82
|
+
secure:
|
|
83
|
+
proto: tls
|
|
84
|
+
addr: 443
|
|
85
|
+
|
|
86
|
+
# Webhook endpoints for event notifications (requires paid plan)
|
|
87
|
+
# webhooks:
|
|
88
|
+
# - name: "webhook-handler"
|
|
89
|
+
# url: "https://example.com/ngrok-events"
|
|
90
|
+
# events:
|
|
91
|
+
# - "tunnel_started"
|
|
92
|
+
# - "tunnel_stopped"
|
|
93
|
+
EOF
|
|
94
|
+
echo "✓ Sample ngrok.yml created at ~/.config/ngrok/ngrok.yml"
|
|
95
|
+
fi
|
|
96
|
+
|
|
97
|
+
# Create sample helper scripts
|
|
98
|
+
mkdir -p "$HOME/.local/bin" 2>/dev/null || true
|
|
99
|
+
|
|
100
|
+
cat > "$HOME/.local/bin/ngrok-web" << 'EOF'
|
|
101
|
+
#!/bin/bash
|
|
102
|
+
# Quick script to expose local web server
|
|
103
|
+
|
|
104
|
+
PORT=${1:-3000}
|
|
105
|
+
echo "🌐 Exposing localhost:${PORT} via ngrok..."
|
|
106
|
+
ngrok http ${PORT}
|
|
107
|
+
EOF
|
|
108
|
+
|
|
109
|
+
chmod +x "$HOME/.local/bin/ngrok-web" 2>/dev/null || true
|
|
110
|
+
|
|
111
|
+
echo "✓ ngrok setup complete"
|
|
112
|
+
echo ""
|
|
113
|
+
echo "⚠️ IMPORTANT: Authenticate ngrok before use"
|
|
114
|
+
echo " 1. Sign up at https://dashboard.ngrok.com/signup"
|
|
115
|
+
echo " 2. Get your authtoken from https://dashboard.ngrok.com/get-started/your-authtoken"
|
|
116
|
+
echo " 3. Run: ngrok config add-authtoken YOUR_TOKEN"
|
|
117
|
+
echo ""
|
|
118
|
+
echo "💡 Quick start:"
|
|
119
|
+
echo " ngrok http 3000 # Expose localhost:3000"
|
|
120
|
+
echo " ngrok http 8080 --subdomain myapp # Custom subdomain (paid)"
|
|
121
|
+
echo " ngrok tcp 22 # Expose SSH"
|
|
122
|
+
echo " ngrok start web # Start named tunnel from config"
|
|
123
|
+
echo ""
|
|
124
|
+
echo "📚 Configuration: ~/.config/ngrok/ngrok.yml"
|
|
125
|
+
echo "🔍 Web interface: http://localhost:4040"
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
# Node.js Overlay
|
|
2
|
+
|
|
3
|
+
Adds Node.js LTS with TypeScript, modern tooling, and customizable global packages.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Node.js LTS** (currently 20.x)
|
|
8
|
+
- **Package Managers:** npm (built-in), pnpm (via global-packages.txt)
|
|
9
|
+
- **VS Code Extensions:**
|
|
10
|
+
- ESLint (dbaeumer.vscode-eslint)
|
|
11
|
+
- Prettier (esbenp.prettier-vscode)
|
|
12
|
+
- npm Intellisense (christian-kohler.npm-intellisense)
|
|
13
|
+
- **Automatic install:** Runs `npm install` on container creation
|
|
14
|
+
- **Global Packages:** Configured via `global-packages.txt`
|
|
15
|
+
|
|
16
|
+
## Customizing Global Packages
|
|
17
|
+
|
|
18
|
+
The overlay includes a customizable `global-packages.txt` file in `.devcontainer/`:
|
|
19
|
+
|
|
20
|
+
**`.devcontainer/global-packages.txt`:**
|
|
21
|
+
|
|
22
|
+
```
|
|
23
|
+
# Node.js Global Packages
|
|
24
|
+
# Format: one package per line, with optional version
|
|
25
|
+
# Example: typescript@5.3.0
|
|
26
|
+
|
|
27
|
+
# pnpm - Fast package manager
|
|
28
|
+
pnpm
|
|
29
|
+
|
|
30
|
+
# Add your custom global packages here
|
|
31
|
+
typescript
|
|
32
|
+
ts-node
|
|
33
|
+
nodemon
|
|
34
|
+
eslint
|
|
35
|
+
prettier
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### Version Pinning
|
|
39
|
+
|
|
40
|
+
Pin specific versions using `@`:
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
typescript@5.3.0
|
|
44
|
+
pnpm@8.10.0
|
|
45
|
+
eslint@8.50.0
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
**Rebuild container** after editing to install new packages.
|
|
49
|
+
|
|
50
|
+
## Common Global Packages
|
|
51
|
+
|
|
52
|
+
### Development Tools
|
|
53
|
+
|
|
54
|
+
- `pnpm` - Fast, disk-efficient package manager
|
|
55
|
+
- `typescript` - TypeScript compiler
|
|
56
|
+
- `ts-node` - TypeScript execution engine
|
|
57
|
+
- `tsx` - Modern TypeScript runner
|
|
58
|
+
|
|
59
|
+
### Process Management
|
|
60
|
+
|
|
61
|
+
- `nodemon` - Auto-restart on file changes
|
|
62
|
+
- `pm2` - Production process manager
|
|
63
|
+
- `concurrently` - Run multiple commands
|
|
64
|
+
|
|
65
|
+
### Code Quality
|
|
66
|
+
|
|
67
|
+
- `eslint` - JavaScript linter
|
|
68
|
+
- `prettier` - Code formatter
|
|
69
|
+
- `@biomejs/biome` - All-in-one toolchain
|
|
70
|
+
|
|
71
|
+
### Build & Bundle
|
|
72
|
+
|
|
73
|
+
- `vite` - Modern build tool
|
|
74
|
+
- `esbuild` - Fast bundler
|
|
75
|
+
- `webpack-cli` - Webpack command line
|
|
76
|
+
|
|
77
|
+
### Testing
|
|
78
|
+
|
|
79
|
+
- `vitest` - Fast test runner
|
|
80
|
+
- `jest` - Testing framework
|
|
81
|
+
|
|
82
|
+
## Project Structure
|
|
83
|
+
|
|
84
|
+
Works with:
|
|
85
|
+
|
|
86
|
+
- **package.json** - Project dependencies
|
|
87
|
+
- **package-lock.json** (npm)
|
|
88
|
+
- **pnpm-lock.yaml** (pnpm)
|
|
89
|
+
- **yarn.lock** (yarn)
|
|
90
|
+
|
|
91
|
+
## Automatic Setup
|
|
92
|
+
|
|
93
|
+
On container creation:
|
|
94
|
+
|
|
95
|
+
1. ✅ Installs global packages from `global-packages.txt`
|
|
96
|
+
2. ✅ Runs `npm install` (if package.json exists)
|
|
97
|
+
3. ✅ Verifies installations
|
|
98
|
+
|
|
99
|
+
## Common Workflows
|
|
100
|
+
|
|
101
|
+
### Using pnpm
|
|
102
|
+
|
|
103
|
+
```bash
|
|
104
|
+
pnpm install # Install dependencies
|
|
105
|
+
pnpm add express # Add dependency
|
|
106
|
+
pnpm run dev # Run dev script
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
### TypeScript Development
|
|
110
|
+
|
|
111
|
+
```bash
|
|
112
|
+
# Global tools approach
|
|
113
|
+
npm install -g typescript ts-node
|
|
114
|
+
tsc --init
|
|
115
|
+
ts-node src/index.ts
|
|
116
|
+
|
|
117
|
+
# Local tools approach (recommended)
|
|
118
|
+
npm install --save-dev typescript ts-node
|
|
119
|
+
npx tsc --init
|
|
120
|
+
npx ts-node src/index.ts
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
### Running Multiple Processes
|
|
124
|
+
|
|
125
|
+
With `concurrently` installed globally:
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
concurrently "npm run api" "npm run web"
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
## Package Manager Choice
|
|
132
|
+
|
|
133
|
+
### npm (Default)
|
|
134
|
+
|
|
135
|
+
- ✅ Built-in, no setup
|
|
136
|
+
- ✅ Widely compatible
|
|
137
|
+
- ❌ Slower, larger node_modules
|
|
138
|
+
|
|
139
|
+
### pnpm (Recommended)
|
|
140
|
+
|
|
141
|
+
- ✅ Fast, efficient disk usage
|
|
142
|
+
- ✅ Strict dependency resolution
|
|
143
|
+
- ✅ Workspace support
|
|
144
|
+
- ⚠️ Some compatibility edge cases
|
|
145
|
+
|
|
146
|
+
### yarn
|
|
147
|
+
|
|
148
|
+
- Add to `global-packages.txt`: `yarn`
|
|
149
|
+
|
|
150
|
+
## Best Practices
|
|
151
|
+
|
|
152
|
+
1. **Prefer local over global** - Use `devDependencies` in package.json
|
|
153
|
+
2. **Lock file** - Commit package-lock.json / pnpm-lock.yaml
|
|
154
|
+
3. **Use `.nvmrc`** or `engines` in package.json for Node version
|
|
155
|
+
4. **scripts in package.json** - Better than global commands
|
|
156
|
+
|
|
157
|
+
## Troubleshooting
|
|
158
|
+
|
|
159
|
+
### Package not found after adding to global-packages.txt
|
|
160
|
+
|
|
161
|
+
Rebuild the container:
|
|
162
|
+
|
|
163
|
+
- **VS Code:** `Cmd+Shift+P` → "Dev Containers: Rebuild Container"
|
|
164
|
+
|
|
165
|
+
### pnpm vs npm conflict
|
|
166
|
+
|
|
167
|
+
Choose one and stick with it. Delete the other's lock file.
|
|
168
|
+
|
|
169
|
+
### Node version mismatch
|
|
170
|
+
|
|
171
|
+
Check `.nvmrc` or `package.json` engines field matches container Node version.
|
|
172
|
+
|
|
173
|
+
### Want to use different Node version?
|
|
174
|
+
|
|
175
|
+
Update `devcontainer.patch.json`:
|
|
176
|
+
|
|
177
|
+
```json
|
|
178
|
+
{
|
|
179
|
+
"features": {
|
|
180
|
+
"ghcr.io/devcontainers/features/node:1": {
|
|
181
|
+
"version": "18" // or "20", "21", etc.
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
## Related Overlays
|
|
188
|
+
|
|
189
|
+
- **postgres** - PostgreSQL for Node.js apps
|
|
190
|
+
- **redis** - Session storage, caching
|
|
191
|
+
- **playwright** - E2E testing
|
|
192
|
+
- **codex** - Alternative with pnpm + .codex mount
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
|
|
3
|
+
"features": {
|
|
4
|
+
"./features/cross-distro-packages": {
|
|
5
|
+
"apt": "build-essential",
|
|
6
|
+
"apk": "build-base"
|
|
7
|
+
},
|
|
8
|
+
"ghcr.io/devcontainers/features/node:1": {
|
|
9
|
+
"version": "lts",
|
|
10
|
+
"nodeGypDependencies": true,
|
|
11
|
+
"installYarnUsingApt": true
|
|
12
|
+
}
|
|
13
|
+
},
|
|
14
|
+
"customizations": {
|
|
15
|
+
"vscode": {
|
|
16
|
+
"extensions": [
|
|
17
|
+
"dbaeumer.vscode-eslint",
|
|
18
|
+
"esbenp.prettier-vscode",
|
|
19
|
+
"christian-kohler.npm-intellisense"
|
|
20
|
+
],
|
|
21
|
+
"settings": {
|
|
22
|
+
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
|
23
|
+
"editor.codeActionsOnSave": {
|
|
24
|
+
"source.fixAll.eslint": "explicit"
|
|
25
|
+
},
|
|
26
|
+
"[typescript]": {
|
|
27
|
+
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
|
28
|
+
},
|
|
29
|
+
"[javascript]": {
|
|
30
|
+
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
},
|
|
35
|
+
"remoteEnv": {
|
|
36
|
+
"PATH": "${containerEnv:HOME}/.local/share/pnpm:${containerEnv:HOME}/.npm-global/bin:${containerEnv:PATH}"
|
|
37
|
+
},
|
|
38
|
+
"forwardPorts": [3000, 8080],
|
|
39
|
+
"portsAttributes": {
|
|
40
|
+
"3000": {
|
|
41
|
+
"label": "Dev Server",
|
|
42
|
+
"onAutoForward": "openBrowser"
|
|
43
|
+
},
|
|
44
|
+
"8080": {
|
|
45
|
+
"label": "Web App",
|
|
46
|
+
"onAutoForward": "notify"
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Node.js Global Packages
|
|
2
|
+
# Customize this file to add or remove globally installed npm packages
|
|
3
|
+
# Format: one package per line, with optional version
|
|
4
|
+
# Example: typescript@5.3.0
|
|
5
|
+
|
|
6
|
+
# pnpm - Fast, disk space efficient package manager
|
|
7
|
+
pnpm
|
|
8
|
+
|
|
9
|
+
# Add your custom global packages here
|
|
10
|
+
# Common examples:
|
|
11
|
+
# typescript
|
|
12
|
+
# ts-node
|
|
13
|
+
# nodemon
|
|
14
|
+
# pm2
|
|
15
|
+
# eslint
|
|
16
|
+
# prettier
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Node.js setup script - Install global npm packages
|
|
3
|
+
|
|
4
|
+
set -e
|
|
5
|
+
|
|
6
|
+
# Extract overlay name from script filename (setup-<overlay>.sh -> <overlay>)
|
|
7
|
+
OVERLAY_NAME=$(basename "$0" | sed 's/setup-//;s/\.sh$//')
|
|
8
|
+
|
|
9
|
+
echo "📦 Installing Node.js global packages..."
|
|
10
|
+
|
|
11
|
+
# Read packages from configuration file if it exists
|
|
12
|
+
if [ -f ".devcontainer/global-packages-${OVERLAY_NAME}.txt" ]; then
|
|
13
|
+
echo "📦 Installing packages from global-packages-${OVERLAY_NAME}.txt..."
|
|
14
|
+
|
|
15
|
+
packages=()
|
|
16
|
+
while IFS= read -r line || [ -n "$line" ]; do
|
|
17
|
+
# Skip comments and empty lines
|
|
18
|
+
[[ "$line" =~ ^#.*$ ]] && continue
|
|
19
|
+
[[ -z "$line" ]] && continue
|
|
20
|
+
|
|
21
|
+
packages+=("$line")
|
|
22
|
+
done < ".devcontainer/global-packages-${OVERLAY_NAME}.txt"
|
|
23
|
+
|
|
24
|
+
if [ ${#packages[@]} -gt 0 ]; then
|
|
25
|
+
echo " Installing: ${packages[*]}"
|
|
26
|
+
npm install -g "${packages[@]}"
|
|
27
|
+
fi
|
|
28
|
+
else
|
|
29
|
+
# Fallback to pnpm only
|
|
30
|
+
echo "📦 Installing pnpm (default)..."
|
|
31
|
+
npm install -g pnpm
|
|
32
|
+
fi
|
|
33
|
+
|
|
34
|
+
# Verify pnpm installation (if included)
|
|
35
|
+
if command -v pnpm &> /dev/null; then
|
|
36
|
+
echo "✓ pnpm installed successfully: $(pnpm --version)"
|
|
37
|
+
fi
|
|
38
|
+
|
|
39
|
+
# Install project dependencies if package.json exists
|
|
40
|
+
if [ -f "package.json" ]; then
|
|
41
|
+
echo "📦 Installing project dependencies..."
|
|
42
|
+
npm install || true
|
|
43
|
+
echo "✓ Project dependencies installed"
|
|
44
|
+
fi
|
|
45
|
+
|
|
46
|
+
echo "✓ Node.js setup complete"
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Verification script for Node.js overlay
|
|
3
|
+
# Confirms Node.js and npm are installed
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
echo "🔍 Verifying Node.js overlay..."
|
|
8
|
+
echo ""
|
|
9
|
+
|
|
10
|
+
# Check node is installed
|
|
11
|
+
echo "1️⃣ Checking Node.js..."
|
|
12
|
+
if command -v node &> /dev/null; then
|
|
13
|
+
node --version
|
|
14
|
+
echo " ✅ Node.js found"
|
|
15
|
+
else
|
|
16
|
+
echo " ❌ Node.js not found"
|
|
17
|
+
exit 1
|
|
18
|
+
fi
|
|
19
|
+
|
|
20
|
+
# Check npm is installed
|
|
21
|
+
echo ""
|
|
22
|
+
echo "2️⃣ Checking npm..."
|
|
23
|
+
if command -v npm &> /dev/null; then
|
|
24
|
+
npm --version
|
|
25
|
+
echo " ✅ npm found"
|
|
26
|
+
else
|
|
27
|
+
echo " ❌ npm not found"
|
|
28
|
+
exit 1
|
|
29
|
+
fi
|
|
30
|
+
|
|
31
|
+
echo ""
|
|
32
|
+
echo "✅ Node.js overlay verification complete"
|