container-superposition 0.1.8 → 0.1.10

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.
Files changed (184) hide show
  1. package/README.md +3 -0
  2. package/dist/tool/cli/args.d.ts.map +1 -1
  3. package/dist/tool/cli/args.js +1 -1
  4. package/dist/tool/cli/args.js.map +1 -1
  5. package/dist/tool/commands/adopt.d.ts.map +1 -1
  6. package/dist/tool/commands/adopt.js +15 -21
  7. package/dist/tool/commands/adopt.js.map +1 -1
  8. package/dist/tool/commands/doctor.d.ts +1 -0
  9. package/dist/tool/commands/doctor.d.ts.map +1 -1
  10. package/dist/tool/commands/doctor.js +1370 -73
  11. package/dist/tool/commands/doctor.js.map +1 -1
  12. package/dist/tool/questionnaire/composer.d.ts +3 -1
  13. package/dist/tool/questionnaire/composer.d.ts.map +1 -1
  14. package/dist/tool/questionnaire/composer.js +273 -20
  15. package/dist/tool/questionnaire/composer.js.map +1 -1
  16. package/dist/tool/questionnaire/presets.d.ts.map +1 -1
  17. package/dist/tool/questionnaire/presets.js +1 -0
  18. package/dist/tool/questionnaire/presets.js.map +1 -1
  19. package/dist/tool/questionnaire/questionnaire.d.ts.map +1 -1
  20. package/dist/tool/questionnaire/questionnaire.js +3 -1
  21. package/dist/tool/questionnaire/questionnaire.js.map +1 -1
  22. package/dist/tool/schema/project-config.d.ts.map +1 -1
  23. package/dist/tool/schema/project-config.js +174 -1
  24. package/dist/tool/schema/project-config.js.map +1 -1
  25. package/dist/tool/schema/types.d.ts +53 -2
  26. package/dist/tool/schema/types.d.ts.map +1 -1
  27. package/docs/README.md +1 -0
  28. package/docs/overlays.md +188 -147
  29. package/docs/specs/001-verbose-plan-graph/spec.md +5 -12
  30. package/docs/specs/002-superposition-config-file/spec.md +5 -12
  31. package/docs/specs/003-mkdocs2-overlay/spec.md +2 -9
  32. package/docs/specs/004-doctor-fix/spec.md +1 -8
  33. package/docs/specs/005-cuda-overlay/spec.md +2 -9
  34. package/docs/specs/006-rocm-overlay/spec.md +3 -10
  35. package/docs/specs/007-target-aware-generation/spec.md +4 -11
  36. package/docs/specs/008-project-file-canonical/spec.md +7 -8
  37. package/docs/specs/009-project-env/spec.md +3 -10
  38. package/docs/specs/010-compose-env-materialization/spec.md +3 -10
  39. package/docs/specs/011-overlay-parameters/spec.md +2 -9
  40. package/docs/specs/012-ollama-cli-overlay/spec.md +47 -0
  41. package/docs/specs/013-doctor-dependency-check/spec.md +250 -0
  42. package/docs/specs/014-doctor-compose-port-cross-validation/spec.md +276 -0
  43. package/docs/specs/015-doctor-env-example-drift/spec.md +248 -0
  44. package/docs/specs/016-doctor-reproducibility-check/spec.md +276 -0
  45. package/docs/specs/017-doctor-dry-run/spec.md +276 -0
  46. package/docs/specs/{007-init-project-file → 018-init-project-file}/spec.md +2 -9
  47. package/docs/specs/019-project-mounts/spec.md +176 -0
  48. package/docs/specs/taxonomy.md +186 -0
  49. package/docs/superposition-yml.md +467 -0
  50. package/overlays/.presets/full-observability.yml +113 -0
  51. package/overlays/.presets/k8s-dev.yml +174 -0
  52. package/overlays/.presets/local-llm.yml +105 -0
  53. package/overlays/.presets/vector-ai.yml +150 -0
  54. package/overlays/.shared/vscode/js-ts-settings.json +19 -0
  55. package/overlays/.shared/vscode/markdown-extensions.json +8 -0
  56. package/overlays/alertmanager/devcontainer.patch.json +0 -1
  57. package/overlays/alertmanager/docker-compose.yml +8 -0
  58. package/overlays/alertmanager/overlay.yml +1 -0
  59. package/overlays/amp/devcontainer.patch.json +4 -1
  60. package/overlays/ansible/README.md +163 -0
  61. package/overlays/ansible/devcontainer.patch.json +14 -0
  62. package/overlays/ansible/overlay.yml +18 -0
  63. package/overlays/argocd/README.md +158 -0
  64. package/overlays/argocd/devcontainer.patch.json +9 -0
  65. package/overlays/argocd/overlay.yml +17 -0
  66. package/overlays/argocd/setup.sh +29 -0
  67. package/overlays/argocd/verify.sh +14 -0
  68. package/overlays/bun/devcontainer.patch.json +1 -10
  69. package/overlays/bun/overlay.yml +8 -1
  70. package/overlays/claude-code/devcontainer.patch.json +6 -1
  71. package/overlays/codex/devcontainer.patch.json +5 -0
  72. package/overlays/comfyui/docker-compose.yml +1 -0
  73. package/overlays/comfyui/overlay.yml +4 -0
  74. package/overlays/commitlint/devcontainer.patch.json +1 -6
  75. package/overlays/docker-sock/overlay.yml +1 -0
  76. package/overlays/dotnet/overlay.yml +4 -1
  77. package/overlays/fuseki/.env.example +5 -0
  78. package/overlays/fuseki/README.md +173 -0
  79. package/overlays/fuseki/devcontainer.patch.json +18 -0
  80. package/overlays/fuseki/docker-compose.yml +29 -0
  81. package/overlays/fuseki/overlay.yml +42 -0
  82. package/overlays/fuseki/verify.sh +58 -0
  83. package/overlays/gemini-cli/devcontainer.patch.json +4 -1
  84. package/overlays/go/overlay.yml +6 -1
  85. package/overlays/grafana/devcontainer.patch.json +0 -1
  86. package/overlays/grafana/docker-compose.yml +8 -2
  87. package/overlays/grafana/overlay.yml +6 -1
  88. package/overlays/jaeger/.env.example +11 -0
  89. package/overlays/jaeger/README.md +33 -4
  90. package/overlays/jaeger/devcontainer.patch.json +9 -1
  91. package/overlays/jaeger/docker-compose.yml +17 -0
  92. package/overlays/jaeger/overlay.yml +1 -12
  93. package/overlays/java/overlay.yml +6 -1
  94. package/overlays/jupyter/docker-compose.yml +1 -0
  95. package/overlays/jupyter/overlay.yml +1 -0
  96. package/overlays/keycloak/devcontainer.patch.json +0 -1
  97. package/overlays/keycloak/docker-compose.yml +1 -0
  98. package/overlays/keycloak/overlay.yml +15 -0
  99. package/overlays/localstack/docker-compose.yml +1 -0
  100. package/overlays/localstack/overlay.yml +19 -1
  101. package/overlays/loki/devcontainer.patch.json +0 -1
  102. package/overlays/loki/docker-compose.yml +8 -0
  103. package/overlays/loki/overlay.yml +1 -0
  104. package/overlays/mailpit/docker-compose.yml +1 -0
  105. package/overlays/mailpit/overlay.yml +1 -0
  106. package/overlays/minio/devcontainer.patch.json +1 -1
  107. package/overlays/minio/docker-compose.yml +1 -0
  108. package/overlays/minio/overlay.yml +23 -2
  109. package/overlays/mkdocs/devcontainer.patch.json +1 -5
  110. package/overlays/mkdocs/overlay.yml +3 -1
  111. package/overlays/mkdocs2/devcontainer.patch.json +1 -5
  112. package/overlays/mkdocs2/overlay.yml +2 -0
  113. package/overlays/mongodb/docker-compose.yml +2 -0
  114. package/overlays/mongodb/overlay.yml +26 -2
  115. package/overlays/mysql/docker-compose.yml +2 -0
  116. package/overlays/mysql/overlay.yml +36 -2
  117. package/overlays/nats/docker-compose.yml +1 -0
  118. package/overlays/nats/overlay.yml +18 -2
  119. package/overlays/nodejs/devcontainer.patch.json +1 -12
  120. package/overlays/nodejs/overlay.yml +8 -1
  121. package/overlays/ollama/README.md +4 -3
  122. package/overlays/ollama/docker-compose.yml +1 -0
  123. package/overlays/ollama/overlay.yml +6 -1
  124. package/overlays/ollama/verify.sh +5 -28
  125. package/overlays/ollama-cli/README.md +90 -0
  126. package/overlays/ollama-cli/devcontainer.patch.json +3 -0
  127. package/overlays/ollama-cli/overlay.yml +19 -0
  128. package/overlays/{ollama → ollama-cli}/setup.sh +7 -10
  129. package/overlays/ollama-cli/verify.sh +49 -0
  130. package/overlays/open-webui/docker-compose.yml +1 -0
  131. package/overlays/open-webui/overlay.yml +8 -1
  132. package/overlays/opencode/devcontainer.patch.json +4 -1
  133. package/overlays/otel-collector/README.md +4 -0
  134. package/overlays/otel-collector/devcontainer.patch.json +4 -1
  135. package/overlays/otel-collector/docker-compose.yml +8 -4
  136. package/overlays/otel-collector/overlay.yml +1 -0
  137. package/overlays/otel-demo-nodejs/devcontainer.patch.json +0 -1
  138. package/overlays/otel-demo-nodejs/docker-compose.yml +1 -0
  139. package/overlays/otel-demo-nodejs/overlay.yml +9 -1
  140. package/overlays/otel-demo-python/devcontainer.patch.json +0 -1
  141. package/overlays/otel-demo-python/docker-compose.yml +1 -0
  142. package/overlays/otel-demo-python/overlay.yml +6 -1
  143. package/overlays/pandoc/README.md +10 -0
  144. package/overlays/pandoc/devcontainer.patch.json +0 -5
  145. package/overlays/pandoc/overlay.yml +2 -0
  146. package/overlays/pandoc/setup.sh +10 -0
  147. package/overlays/pgvector/devcontainer.patch.json +11 -5
  148. package/overlays/pgvector/docker-compose.yml +1 -0
  149. package/overlays/pgvector/overlay.yml +3 -0
  150. package/overlays/playwright/devcontainer.patch.json +0 -5
  151. package/overlays/playwright/overlay.yml +2 -1
  152. package/overlays/postgres/docker-compose.yml +1 -0
  153. package/overlays/postgres/overlay.yml +4 -1
  154. package/overlays/pre-commit/devcontainer.patch.json +1 -7
  155. package/overlays/prometheus/devcontainer.patch.json +0 -1
  156. package/overlays/prometheus/docker-compose.yml +8 -0
  157. package/overlays/prometheus/overlay.yml +1 -0
  158. package/overlays/promtail/devcontainer.patch.json +1 -2
  159. package/overlays/promtail/docker-compose.yml +8 -0
  160. package/overlays/promtail/overlay.yml +1 -0
  161. package/overlays/qdrant/docker-compose.yml +1 -0
  162. package/overlays/qdrant/overlay.yml +5 -1
  163. package/overlays/rabbitmq/docker-compose.yml +1 -0
  164. package/overlays/rabbitmq/overlay.yml +25 -2
  165. package/overlays/redis/docker-compose.yml +7 -0
  166. package/overlays/redis/overlay.yml +15 -1
  167. package/overlays/redpanda/docker-compose.yml +1 -0
  168. package/overlays/redpanda/overlay.yml +15 -3
  169. package/overlays/rocm/overlay.yml +2 -1
  170. package/overlays/rust/overlay.yml +3 -1
  171. package/overlays/sqlserver/docker-compose.yml +1 -0
  172. package/overlays/sqlserver/overlay.yml +17 -0
  173. package/overlays/task/README.md +47 -0
  174. package/overlays/task/devcontainer.patch.json +9 -0
  175. package/overlays/task/overlay.yml +16 -0
  176. package/overlays/task/setup.sh +29 -0
  177. package/overlays/task/verify.sh +14 -0
  178. package/overlays/tempo/devcontainer.patch.json +0 -1
  179. package/overlays/tempo/docker-compose.yml +8 -0
  180. package/overlays/tempo/overlay.yml +1 -0
  181. package/overlays/windsurf-cli/devcontainer.patch.json +4 -1
  182. package/package.json +1 -1
  183. package/tool/schema/config.schema.json +74 -1
  184. package/overlays/.shared/otel/otel-base-config.yaml +0 -30
@@ -0,0 +1,58 @@
1
+ #!/bin/bash
2
+ # Verification script for Apache Jena Fuseki overlay
3
+ # Confirms Fuseki is running and responding to requests
4
+
5
+ set -e
6
+
7
+ FUSEKI_HOST="${FUSEKI_HOST:-fuseki}"
8
+ FUSEKI_PORT="${FUSEKI_PORT:-3030}"
9
+ FUSEKI_URL="http://${FUSEKI_HOST}:${FUSEKI_PORT}"
10
+
11
+ echo "Verifying Apache Jena Fuseki overlay..."
12
+ echo ""
13
+
14
+ # Check curl is available
15
+ echo "1. Checking curl availability..."
16
+ if command -v curl &> /dev/null; then
17
+ echo " curl found"
18
+ else
19
+ echo " curl not found - cannot verify Fuseki service"
20
+ exit 1
21
+ fi
22
+
23
+ # Check Fuseki ping endpoint
24
+ echo ""
25
+ echo "2. Checking Fuseki service at ${FUSEKI_URL}/\$/ping..."
26
+ FUSEKI_READY=false
27
+ for i in {1..15}; do
28
+ if curl -sf "${FUSEKI_URL}/\$/ping" &> /dev/null; then
29
+ echo " Fuseki service is ready"
30
+ FUSEKI_READY=true
31
+ break
32
+ fi
33
+ sleep 2
34
+ done
35
+
36
+ if [ "$FUSEKI_READY" = false ]; then
37
+ echo " Fuseki service not ready after 30 seconds"
38
+ exit 1
39
+ fi
40
+
41
+ # Check dataset exists
42
+ DATASET="${FUSEKI_DATASET:-ds}"
43
+ ADMIN_PASSWORD="${FUSEKI_ADMIN_PASSWORD:-admin}"
44
+ echo ""
45
+ echo "3. Checking dataset '${DATASET}' exists..."
46
+ HTTP_STATUS=$(curl -s -o /dev/null -w "%{http_code}" \
47
+ -u "admin:${ADMIN_PASSWORD}" \
48
+ "${FUSEKI_URL}/\$/datasets/${DATASET}")
49
+
50
+ if [ "$HTTP_STATUS" = "200" ]; then
51
+ echo " Dataset '${DATASET}' found"
52
+ else
53
+ echo " Dataset '${DATASET}' not found (HTTP ${HTTP_STATUS}) - it may still be initializing"
54
+ fi
55
+
56
+ echo ""
57
+ echo "Apache Jena Fuseki overlay verification complete"
58
+ echo "Admin UI: ${FUSEKI_URL}"
@@ -1,3 +1,6 @@
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
+ "postCreateCommand": {
4
+ "setup-gemini-cli": "bash .devcontainer/scripts/setup-gemini-cli.sh"
5
+ }
3
6
  }
@@ -5,7 +5,12 @@ category: language
5
5
  supports: []
6
6
  requires: []
7
7
  suggests: []
8
- conflicts: []
8
+ conflicts:
9
+ - mysql
10
+ - redpanda
11
+ - mongodb
12
+ - otel-demo-nodejs
13
+ - otel-demo-python
9
14
  tags:
10
15
  - language
11
16
  - go
@@ -1,7 +1,6 @@
1
1
  {
2
2
  "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
3
3
  "runServices": ["grafana"],
4
- "_serviceOrder": 3,
5
4
  "forwardPorts": [3000],
6
5
  "portsAttributes": {
7
6
  "3000": {
@@ -2,6 +2,7 @@ version: '3.8'
2
2
  services:
3
3
  grafana:
4
4
  image: grafana/grafana:${GRAFANA_VERSION:-latest}
5
+ restart: unless-stopped
5
6
  environment:
6
7
  - GF_SECURITY_ADMIN_USER=${GRAFANA_ADMIN_USER:-admin}
7
8
  - GF_SECURITY_ADMIN_PASSWORD=${GRAFANA_ADMIN_PASSWORD:-admin}
@@ -15,13 +16,18 @@ services:
15
16
  - '${GRAFANA_PORT:-3000}:3000'
16
17
  depends_on:
17
18
  - prometheus
18
- - loki
19
- - jaeger
20
19
  networks:
21
20
  - devnet
21
+ healthcheck:
22
+ test: ['CMD', 'wget', '-qO-', 'http://localhost:3000/api/health']
23
+ interval: 10s
24
+ timeout: 5s
25
+ retries: 5
26
+ start_period: 20s
22
27
 
23
28
  volumes:
24
29
  grafana_data:
25
30
 
26
31
  networks:
27
32
  devnet:
33
+ name: devnet
@@ -11,7 +11,11 @@ suggests:
11
11
  - jaeger
12
12
  - tempo
13
13
  - promtail
14
- conflicts: []
14
+ conflicts:
15
+ - open-webui
16
+ - nodejs
17
+ - bun
18
+ - rust
15
19
  tags:
16
20
  - observability
17
21
  - ui
@@ -24,3 +28,4 @@ ports:
24
28
  path: /
25
29
  onAutoForward: openBrowser
26
30
  order: 3
31
+ serviceOrder: 3
@@ -5,3 +5,14 @@ JAEGER_VERSION=latest
5
5
  JAEGER_UI_PORT=16686
6
6
  JAEGER_OTLP_GRPC_PORT=4317
7
7
  JAEGER_OTLP_HTTP_PORT=4318
8
+
9
+ # OpenTelemetry SDK defaults for apps running in the devcontainer
10
+ # These are pre-set in the devcontainer via remoteEnv; see devcontainer.patch.json
11
+ # Customize after generation by editing remoteEnv in .devcontainer/devcontainer.json
12
+ OTEL_SERVICE_NAME=my-service
13
+ OTEL_SERVICE_VERSION=0.1.0
14
+ OTEL_EXPORTER_OTLP_ENDPOINT=http://jaeger:4317
15
+ OTEL_EXPORTER_OTLP_PROTOCOL=grpc
16
+ OTEL_RESOURCE_ATTRIBUTES=deployment.environment=development
17
+ OTEL_TRACES_SAMPLER=always_on
18
+ OTEL_TRACES_EXPORTER=otlp
@@ -33,10 +33,35 @@ graph TD
33
33
  ### Ports
34
34
 
35
35
  - `16686` - Jaeger UI (web interface)
36
- - `4317` - OTLP gRPC receiver (when used without otel-collector)
37
- - `4318` - OTLP HTTP receiver (when used without otel-collector)
36
+ - `4317` - OTLP gRPC receiver (internal Docker network only; not published to host)
37
+ - `4318` - OTLP HTTP receiver (internal Docker network only; not published to host)
38
38
 
39
- ⚠️ **Note:** When using with **otel-collector**, OTLP ports (4317/4318) are not exposed to avoid conflicts. Send telemetry to otel-collector, which forwards to Jaeger.
39
+ ⚠️ **Note:** When using with **otel-collector**, send telemetry to `otel-collector:4317` instead the collector forwards to Jaeger internally.
40
+
41
+ ### Pre-configured OpenTelemetry Environment
42
+
43
+ The devcontainer is pre-configured with OTEL environment variables so that any properly-instrumented app running inside the devcontainer sends traces to Jaeger automatically:
44
+
45
+ | Variable | Default value | Purpose |
46
+ | ----------------------------- | ------------------------------------ | -------------------------------------- |
47
+ | `OTEL_SERVICE_NAME` | `my-service` | Service name shown in Jaeger UI |
48
+ | `OTEL_SERVICE_VERSION` | `0.1.0` | Service version in resource attributes |
49
+ | `OTEL_EXPORTER_OTLP_ENDPOINT` | `http://jaeger:4317` | OTLP gRPC endpoint (Docker network) |
50
+ | `OTEL_EXPORTER_OTLP_PROTOCOL` | `grpc` | Transport protocol |
51
+ | `OTEL_RESOURCE_ATTRIBUTES` | `deployment.environment=development` | Additional resource metadata |
52
+ | `OTEL_TRACES_SAMPLER` | `always_on` | Capture every trace in development |
53
+ | `OTEL_TRACES_EXPORTER` | `otlp` | Export traces via OTLP |
54
+
55
+ These values are set via `remoteEnv` in `devcontainer.json`. To override them for your project, edit `.devcontainer/devcontainer.json` after generation and update the `remoteEnv` block, then rebuild the container:
56
+
57
+ ```json
58
+ "remoteEnv": {
59
+ "OTEL_SERVICE_NAME": "my-app",
60
+ "OTEL_SERVICE_VERSION": "1.0.0"
61
+ }
62
+ ```
63
+
64
+ When the **otel-collector** overlay is also selected, `OTEL_EXPORTER_OTLP_ENDPOINT` is automatically set to `http://otel-collector:4317` (otel-collector overlay is applied after jaeger and overrides this value).
40
65
 
41
66
  ### Environment Variables
42
67
 
@@ -74,12 +99,16 @@ container-superposition --port-offset 100
74
99
 
75
100
  ## Accessing Jaeger UI
76
101
 
77
- Once your devcontainer starts, open your browser to:
102
+ Once your devcontainer starts, VS Code automatically opens <http://localhost:16686> in your browser (via `onAutoForward: openBrowser`). You can also open it manually:
78
103
 
79
104
  ```
80
105
  http://localhost:16686
81
106
  ```
82
107
 
108
+ Port `16686` is published by the `jaeger` Docker Compose service to your local machine, so it is accessible both from the host and from within the devcontainer via `http://jaeger:16686`.
109
+
110
+ The `devcontainer` service has `depends_on: jaeger: condition: service_healthy`, so Docker Compose waits for Jaeger to pass its healthcheck before starting the devcontainer. This ensures the UI is reachable by the time VS Code opens the browser.
111
+
83
112
  ### UI Features
84
113
 
85
114
  **1. Search Traces**
@@ -1,12 +1,20 @@
1
1
  {
2
2
  "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
3
3
  "runServices": ["jaeger"],
4
- "_serviceOrder": 1,
5
4
  "forwardPorts": [16686],
6
5
  "portsAttributes": {
7
6
  "16686": {
8
7
  "label": "Jaeger UI",
9
8
  "onAutoForward": "openBrowser"
10
9
  }
10
+ },
11
+ "remoteEnv": {
12
+ "OTEL_SERVICE_NAME": "my-service",
13
+ "OTEL_SERVICE_VERSION": "0.1.0",
14
+ "OTEL_EXPORTER_OTLP_ENDPOINT": "http://jaeger:4317",
15
+ "OTEL_EXPORTER_OTLP_PROTOCOL": "grpc",
16
+ "OTEL_RESOURCE_ATTRIBUTES": "deployment.environment=development",
17
+ "OTEL_TRACES_SAMPLER": "always_on",
18
+ "OTEL_TRACES_EXPORTER": "otlp"
11
19
  }
12
20
  }
@@ -2,6 +2,7 @@ version: '3.8'
2
2
  services:
3
3
  jaeger:
4
4
  image: jaegertracing/all-in-one:${JAEGER_VERSION:-latest}
5
+ restart: unless-stopped
5
6
  environment:
6
7
  - COLLECTOR_OTLP_ENABLED=true
7
8
  ports:
@@ -12,6 +13,22 @@ services:
12
13
  # Apps should send telemetry to otel-collector, which forwards to Jaeger if both are used
13
14
  networks:
14
15
  - devnet
16
+ healthcheck:
17
+ test:
18
+ [
19
+ 'CMD-SHELL',
20
+ 'wget --no-verbose --tries=1 --spider http://localhost:14269/ || exit 1',
21
+ ]
22
+ interval: 5s
23
+ timeout: 5s
24
+ retries: 10
25
+ start_period: 10s
26
+
27
+ devcontainer:
28
+ depends_on:
29
+ jaeger:
30
+ condition: service_healthy
15
31
 
16
32
  networks:
17
33
  devnet:
34
+ name: devnet
@@ -19,16 +19,5 @@ ports:
19
19
  description: Jaeger UI
20
20
  path: /
21
21
  onAutoForward: openBrowser
22
- - port: 14250
23
- service: jaeger
24
- protocol: grpc
25
- description: Jaeger gRPC receiver
26
- onAutoForward: ignore
27
- - port: 14268
28
- service: jaeger
29
- protocol: http
30
- description: Jaeger HTTP receiver
31
- onAutoForward: ignore
32
22
  order: 1
33
- imports:
34
- - .shared/otel/instrumentation.env
23
+ serviceOrder: 1
@@ -5,7 +5,12 @@ category: language
5
5
  supports: []
6
6
  requires: []
7
7
  suggests: []
8
- conflicts: []
8
+ conflicts:
9
+ - mysql
10
+ - redpanda
11
+ - mongodb
12
+ - otel-demo-nodejs
13
+ - otel-demo-python
9
14
  tags:
10
15
  - language
11
16
  - java
@@ -21,3 +21,4 @@ volumes:
21
21
 
22
22
  networks:
23
23
  devnet:
24
+ name: devnet
@@ -8,6 +8,7 @@ requires:
8
8
  - python
9
9
  suggests: []
10
10
  conflicts: []
11
+ serviceOrder: 3
11
12
  tags:
12
13
  - language
13
14
  - jupyter
@@ -1,7 +1,6 @@
1
1
  {
2
2
  "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
3
3
  "runServices": ["keycloak"],
4
- "_serviceOrder": 10,
5
4
  "forwardPorts": [8180],
6
5
  "portsAttributes": {
7
6
  "8180": {
@@ -32,3 +32,4 @@ services:
32
32
 
33
33
  networks:
34
34
  devnet:
35
+ name: devnet
@@ -8,6 +8,7 @@ requires:
8
8
  - postgres
9
9
  suggests: []
10
10
  conflicts: []
11
+ serviceOrder: 2
11
12
  tags:
12
13
  - dev
13
14
  - auth
@@ -21,3 +22,17 @@ ports:
21
22
  description: Keycloak admin console and auth endpoints
22
23
  path: /
23
24
  onAutoForward: openBrowser
25
+ parameters:
26
+ KEYCLOAK_VERSION:
27
+ description: Keycloak image version tag
28
+ default: '26.0'
29
+ KEYCLOAK_PORT:
30
+ description: Host port mapped to Keycloak HTTP (8180 inside container)
31
+ default: '8180'
32
+ KEYCLOAK_ADMIN:
33
+ description: Keycloak initial admin username
34
+ default: admin
35
+ KEYCLOAK_ADMIN_PASSWORD:
36
+ description: Keycloak initial admin password
37
+ default: admin
38
+ sensitive: true
@@ -23,3 +23,4 @@ volumes:
23
23
 
24
24
  networks:
25
25
  devnet:
26
+ name: devnet
@@ -7,7 +7,25 @@ supports:
7
7
  requires: []
8
8
  suggests:
9
9
  - aws-cli
10
- conflicts: []
10
+ conflicts:
11
+ - minio
12
+ serviceOrder: 0
13
+ parameters:
14
+ LOCALSTACK_VERSION:
15
+ description: LocalStack image version tag
16
+ default: latest
17
+ LOCALSTACK_EDGE_PORT:
18
+ description: Host port mapped to LocalStack edge (4566 inside container)
19
+ default: '4566'
20
+ LOCALSTACK_S3_PORT:
21
+ description: Host port mapped to LocalStack S3 legacy endpoint (4571 inside container)
22
+ default: '4571'
23
+ LOCALSTACK_SERVICES:
24
+ description: Comma-separated list of AWS services to enable
25
+ default: s3,sqs,sns,dynamodb,lambda,cloudformation
26
+ LOCALSTACK_DEBUG:
27
+ description: Enable LocalStack debug logging (0 or 1)
28
+ default: '0'
11
29
  tags:
12
30
  - cloud
13
31
  - aws
@@ -1,7 +1,6 @@
1
1
  {
2
2
  "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
3
3
  "runServices": ["loki"],
4
- "_serviceOrder": 1,
5
4
  "forwardPorts": [3100],
6
5
  "portsAttributes": {
7
6
  "3100": {
@@ -2,6 +2,7 @@ version: '3.8'
2
2
  services:
3
3
  loki:
4
4
  image: grafana/loki:${LOKI_VERSION:-latest}
5
+ restart: unless-stopped
5
6
  command: -config.file=/etc/loki/loki-config.yaml
6
7
  volumes:
7
8
  - ./loki-config-loki.yaml:/etc/loki/loki-config.yaml
@@ -10,9 +11,16 @@ services:
10
11
  - '${LOKI_PORT:-3100}:3100'
11
12
  networks:
12
13
  - devnet
14
+ healthcheck:
15
+ test: ['CMD', 'wget', '-qO-', 'http://localhost:3100/ready']
16
+ interval: 10s
17
+ timeout: 5s
18
+ retries: 5
19
+ start_period: 15s
13
20
 
14
21
  volumes:
15
22
  loki_data:
16
23
 
17
24
  networks:
18
25
  devnet:
26
+ name: devnet
@@ -20,3 +20,4 @@ ports:
20
20
  path: /
21
21
  onAutoForward: notify
22
22
  order: 1
23
+ serviceOrder: 1
@@ -15,3 +15,4 @@ services:
15
15
 
16
16
  networks:
17
17
  devnet:
18
+ name: devnet
@@ -7,6 +7,7 @@ supports:
7
7
  requires: []
8
8
  suggests: []
9
9
  conflicts: []
10
+ serviceOrder: 0
10
11
  tags:
11
12
  - dev
12
13
  - email
@@ -24,7 +24,7 @@
24
24
  "MINIO_ROOT_PASSWORD": "minioadmin",
25
25
  "AWS_ACCESS_KEY_ID": "minioadmin",
26
26
  "AWS_SECRET_ACCESS_KEY": "minioadmin",
27
- "AWS_REGION": "us-east-1",
27
+ "AWS_DEFAULT_REGION": "us-east-1",
28
28
  "S3_ENDPOINT": "http://minio:9000"
29
29
  }
30
30
  }
@@ -26,3 +26,4 @@ volumes:
26
26
 
27
27
  networks:
28
28
  devnet:
29
+ name: devnet
@@ -5,8 +5,29 @@ category: database
5
5
  supports:
6
6
  - compose
7
7
  requires: []
8
- suggests: []
9
- conflicts: []
8
+ suggests:
9
+ - prometheus
10
+ - grafana
11
+ conflicts:
12
+ - localstack
13
+ serviceOrder: 0
14
+ parameters:
15
+ MINIO_VERSION:
16
+ description: MinIO image version tag
17
+ default: latest
18
+ MINIO_API_PORT:
19
+ description: Host port mapped to MinIO S3 API (9000 inside container)
20
+ default: '9000'
21
+ MINIO_CONSOLE_PORT:
22
+ description: Host port mapped to MinIO web console (9001 inside container)
23
+ default: '9001'
24
+ MINIO_ROOT_USER:
25
+ description: MinIO root username (access key)
26
+ default: minioadmin
27
+ MINIO_ROOT_PASSWORD:
28
+ description: MinIO root password (secret key)
29
+ default: minioadmin
30
+ sensitive: true
10
31
  tags:
11
32
  - database
12
33
  - storage
@@ -7,11 +7,7 @@
7
7
  },
8
8
  "customizations": {
9
9
  "vscode": {
10
- "extensions": [
11
- "yzhang.markdown-all-in-one",
12
- "DavidAnson.vscode-markdownlint",
13
- "bierner.markdown-mermaid"
14
- ]
10
+ "extensions": ["bierner.markdown-mermaid"]
15
11
  }
16
12
  },
17
13
  "forwardPorts": [8000],
@@ -1,7 +1,7 @@
1
1
  id: mkdocs
2
2
  name: MkDocs
3
3
  description: Material for MkDocs - professional documentation generator
4
- category: language
4
+ category: dev
5
5
  supports: []
6
6
  requires:
7
7
  - python
@@ -12,5 +12,7 @@ tags:
12
12
  - documentation
13
13
  - mkdocs
14
14
  - python
15
+ imports:
16
+ - .shared/vscode/markdown-extensions.json
15
17
  ports:
16
18
  - 8000
@@ -2,11 +2,7 @@
2
2
  "$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
3
3
  "customizations": {
4
4
  "vscode": {
5
- "extensions": [
6
- "yzhang.markdown-all-in-one",
7
- "DavidAnson.vscode-markdownlint",
8
- "bierner.markdown-mermaid"
9
- ]
5
+ "extensions": ["bierner.markdown-mermaid"]
10
6
  }
11
7
  },
12
8
  "forwardPorts": [8000],
@@ -13,5 +13,7 @@ tags:
13
13
  - documentation
14
14
  - mkdocs
15
15
  - python
16
+ imports:
17
+ - .shared/vscode/markdown-extensions.json
16
18
  ports:
17
19
  - 8000
@@ -19,6 +19,7 @@ services:
19
19
  interval: 10s
20
20
  timeout: 5s
21
21
  retries: 5
22
+ start_period: 20s
22
23
 
23
24
  mongo-express:
24
25
  image: mongo-express:${MONGO_EXPRESS_VERSION:-latest}
@@ -42,3 +43,4 @@ volumes:
42
43
 
43
44
  networks:
44
45
  devnet:
46
+ name: devnet
@@ -5,8 +5,32 @@ category: database
5
5
  supports:
6
6
  - compose
7
7
  requires: []
8
- suggests: []
9
- conflicts: []
8
+ suggests:
9
+ - prometheus
10
+ - grafana
11
+ conflicts:
12
+ - redpanda
13
+ - otel-demo-python
14
+ - go
15
+ - java
16
+ serviceOrder: 0
17
+ parameters:
18
+ MONGODB_VERSION:
19
+ description: MongoDB image version tag
20
+ default: '8'
21
+ MONGODB_PORT:
22
+ description: Host port mapped to MongoDB (27017 inside container)
23
+ default: '27017'
24
+ MONGO_EXPRESS_PORT:
25
+ description: Host port mapped to Mongo Express (8081 inside container)
26
+ default: '8081'
27
+ MONGODB_USER:
28
+ description: MongoDB root username
29
+ default: root
30
+ MONGODB_PASSWORD:
31
+ description: MongoDB root password
32
+ default: example
33
+ sensitive: true
10
34
  tags:
11
35
  - database
12
36
  - nosql
@@ -30,6 +30,7 @@ services:
30
30
  interval: 10s
31
31
  timeout: 5s
32
32
  retries: 5
33
+ start_period: 30s
33
34
 
34
35
  phpmyadmin:
35
36
  image: phpmyadmin:${PHPMYADMIN_VERSION:-latest}
@@ -53,3 +54,4 @@ volumes:
53
54
 
54
55
  networks:
55
56
  devnet:
57
+ name: devnet
@@ -5,8 +5,42 @@ category: database
5
5
  supports:
6
6
  - compose
7
7
  requires: []
8
- suggests: []
9
- conflicts: []
8
+ suggests:
9
+ - prometheus
10
+ - grafana
11
+ conflicts:
12
+ - redpanda
13
+ - nodejs
14
+ - bun
15
+ - go
16
+ - java
17
+ - dotnet
18
+ - otel-demo-nodejs
19
+ serviceOrder: 0
20
+ parameters:
21
+ MYSQL_VERSION:
22
+ description: MySQL image version tag
23
+ default: '8'
24
+ MYSQL_PORT:
25
+ description: Host port mapped to MySQL (3306 inside container)
26
+ default: '3306'
27
+ PHPMYADMIN_PORT:
28
+ description: Host port mapped to phpMyAdmin (80 inside container)
29
+ default: '8080'
30
+ MYSQL_DATABASE:
31
+ description: Name of the database to create
32
+ default: devdb
33
+ MYSQL_USER:
34
+ description: MySQL user name
35
+ default: devuser
36
+ MYSQL_PASSWORD:
37
+ description: MySQL user password
38
+ default: devpassword
39
+ sensitive: true
40
+ MYSQL_ROOT_PASSWORD:
41
+ description: MySQL root password
42
+ default: rootpassword
43
+ sensitive: true
10
44
  tags:
11
45
  - database
12
46
  - sql
@@ -29,3 +29,4 @@ volumes:
29
29
 
30
30
  networks:
31
31
  devnet:
32
+ name: devnet