container-superposition 0.1.1 → 0.1.4
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 +569 -8
- package/dist/scripts/init.js +436 -254
- package/dist/scripts/init.js.map +1 -1
- package/dist/tool/commands/doctor.d.ts +15 -0
- package/dist/tool/commands/doctor.d.ts.map +1 -0
- package/dist/tool/commands/doctor.js +862 -0
- package/dist/tool/commands/doctor.js.map +1 -0
- package/dist/tool/commands/explain.d.ts +13 -0
- package/dist/tool/commands/explain.d.ts.map +1 -0
- package/dist/tool/commands/explain.js +299 -0
- package/dist/tool/commands/explain.js.map +1 -0
- package/dist/tool/commands/list.d.ts +16 -0
- package/dist/tool/commands/list.d.ts.map +1 -0
- package/dist/tool/commands/list.js +121 -0
- package/dist/tool/commands/list.js.map +1 -0
- package/dist/tool/commands/plan.d.ts +67 -0
- package/dist/tool/commands/plan.d.ts.map +1 -0
- package/dist/tool/commands/plan.js +851 -0
- package/dist/tool/commands/plan.js.map +1 -0
- package/dist/tool/questionnaire/composer.d.ts +16 -2
- package/dist/tool/questionnaire/composer.d.ts.map +1 -1
- package/dist/tool/questionnaire/composer.js +411 -200
- package/dist/tool/questionnaire/composer.js.map +1 -1
- package/dist/tool/readme/markdown-parser.d.ts.map +1 -1
- package/dist/tool/readme/markdown-parser.js.map +1 -1
- package/dist/tool/readme/readme-generator.d.ts.map +1 -1
- package/dist/tool/readme/readme-generator.js +11 -6
- package/dist/tool/readme/readme-generator.js.map +1 -1
- package/dist/tool/schema/deployment-targets.d.ts +77 -0
- package/dist/tool/schema/deployment-targets.d.ts.map +1 -0
- package/dist/tool/schema/deployment-targets.js +91 -0
- package/dist/tool/schema/deployment-targets.js.map +1 -0
- package/dist/tool/schema/manifest-migrations.d.ts +51 -0
- package/dist/tool/schema/manifest-migrations.d.ts.map +1 -0
- package/dist/tool/schema/manifest-migrations.js +159 -0
- package/dist/tool/schema/manifest-migrations.js.map +1 -0
- package/dist/tool/schema/overlay-loader.d.ts +1 -1
- package/dist/tool/schema/overlay-loader.d.ts.map +1 -1
- package/dist/tool/schema/overlay-loader.js +42 -14
- package/dist/tool/schema/overlay-loader.js.map +1 -1
- package/dist/tool/schema/types.d.ts +62 -2
- package/dist/tool/schema/types.d.ts.map +1 -1
- package/dist/tool/utils/gitignore.d.ts +15 -0
- package/dist/tool/utils/gitignore.d.ts.map +1 -0
- package/dist/tool/utils/gitignore.js +41 -0
- package/dist/tool/utils/gitignore.js.map +1 -0
- package/dist/tool/utils/merge.d.ts +134 -0
- package/dist/tool/utils/merge.d.ts.map +1 -0
- package/dist/tool/utils/merge.js +277 -0
- package/dist/tool/utils/merge.js.map +1 -0
- package/dist/tool/utils/port-utils.d.ts +29 -0
- package/dist/tool/utils/port-utils.d.ts.map +1 -0
- package/dist/tool/utils/port-utils.js +128 -0
- package/dist/tool/utils/port-utils.js.map +1 -0
- package/dist/tool/utils/services-export.d.ts +14 -0
- package/dist/tool/utils/services-export.d.ts.map +1 -0
- package/dist/tool/utils/services-export.js +478 -0
- package/dist/tool/utils/services-export.js.map +1 -0
- package/dist/tool/utils/summary.d.ts +69 -0
- package/dist/tool/utils/summary.d.ts.map +1 -0
- package/dist/tool/utils/summary.js +260 -0
- package/dist/tool/utils/summary.js.map +1 -0
- package/dist/tool/utils/version.d.ts +9 -0
- package/dist/tool/utils/version.d.ts.map +1 -0
- package/dist/tool/utils/version.js +32 -0
- package/dist/tool/utils/version.js.map +1 -0
- package/docs/architecture.md +25 -21
- package/docs/deployment-targets.md +150 -0
- package/docs/discovery-commands.md +442 -0
- package/docs/merge-strategy.md +700 -0
- package/docs/minimal-and-editor.md +265 -0
- package/docs/overlay-imports.md +209 -0
- package/docs/overlay-manifest-refactoring.md +2 -2
- package/docs/overlay-metadata-archive.md +1 -1
- package/docs/overlays.md +139 -28
- package/docs/presets-architecture.md +3 -3
- package/docs/presets.md +1 -1
- package/docs/publishing.md +36 -35
- package/docs/team-workflow.md +540 -0
- package/overlays/.presets/data-engineering.yml +392 -0
- package/overlays/.presets/event-sourced-service.yml +262 -0
- package/overlays/.presets/frontend.yml +287 -0
- package/overlays/.presets/k8s-operator-dev.yml +462 -0
- package/overlays/{presets → .presets}/microservice.yml +32 -6
- package/overlays/.presets/web-api.yml +129 -0
- package/overlays/.registry/README.md +1 -1
- package/overlays/.registry/deployment-targets.yml +54 -0
- package/overlays/.shared/README.md +43 -0
- package/overlays/.shared/compose/common-healthchecks.yml +38 -0
- package/overlays/.shared/otel/instrumentation.env +20 -0
- package/overlays/.shared/otel/otel-base-config.yaml +30 -0
- package/overlays/.shared/vscode/recommended-extensions.json +14 -0
- package/overlays/README.md +1 -1
- package/overlays/cloudflared/README.md +190 -0
- package/overlays/cloudflared/devcontainer.patch.json +3 -0
- package/overlays/cloudflared/overlay.yml +15 -0
- package/overlays/cloudflared/setup.sh +49 -0
- package/overlays/cloudflared/verify.sh +21 -0
- package/overlays/codex/overlay.yml +1 -0
- package/overlays/direnv/README.md +6 -4
- package/overlays/direnv/setup.sh +0 -12
- package/overlays/duckdb/README.md +274 -0
- package/overlays/duckdb/devcontainer.patch.json +10 -0
- package/overlays/duckdb/overlay.yml +17 -0
- package/overlays/duckdb/setup.sh +45 -0
- package/overlays/duckdb/verify.sh +32 -0
- package/overlays/git-helpers/overlay.yml +1 -0
- package/overlays/grafana/README.md +5 -5
- package/overlays/grafana/dashboard-provider.yml +1 -1
- package/overlays/grafana/docker-compose.yml +2 -2
- package/overlays/grafana/overlay.yml +6 -1
- package/overlays/grpc-tools/README.md +242 -0
- package/overlays/grpc-tools/devcontainer.patch.json +14 -0
- package/overlays/grpc-tools/overlay.yml +14 -0
- package/overlays/grpc-tools/setup.sh +57 -0
- package/overlays/grpc-tools/verify.sh +47 -0
- package/overlays/jaeger/overlay.yml +16 -3
- package/overlays/jupyter/.env.example +6 -0
- package/overlays/jupyter/README.md +210 -0
- package/overlays/jupyter/devcontainer.patch.json +14 -0
- package/overlays/jupyter/docker-compose.yml +23 -0
- package/overlays/jupyter/overlay.yml +18 -0
- package/overlays/jupyter/verify.sh +35 -0
- package/overlays/keycloak/.env.example +5 -0
- package/overlays/keycloak/README.md +238 -0
- package/overlays/keycloak/devcontainer.patch.json +17 -0
- package/overlays/keycloak/docker-compose.yml +32 -0
- package/overlays/keycloak/overlay.yml +23 -0
- package/overlays/keycloak/verify.sh +54 -0
- package/overlays/kind/README.md +221 -0
- package/overlays/kind/devcontainer.patch.json +10 -0
- package/overlays/kind/overlay.yml +18 -0
- package/overlays/kind/setup.sh +43 -0
- package/overlays/kind/verify.sh +40 -0
- package/overlays/localstack/.env.example +6 -0
- package/overlays/localstack/README.md +188 -0
- package/overlays/localstack/devcontainer.patch.json +21 -0
- package/overlays/localstack/docker-compose.yml +25 -0
- package/overlays/localstack/overlay.yml +18 -0
- package/overlays/localstack/verify.sh +47 -0
- package/overlays/loki/overlay.yml +6 -1
- package/overlays/mailpit/.env.example +4 -0
- package/overlays/mailpit/README.md +191 -0
- package/overlays/mailpit/devcontainer.patch.json +20 -0
- package/overlays/mailpit/docker-compose.yml +17 -0
- package/overlays/mailpit/overlay.yml +26 -0
- package/overlays/mailpit/verify.sh +52 -0
- package/overlays/modern-cli-tools/overlay.yml +1 -0
- package/overlays/mongodb/overlay.yml +12 -2
- package/overlays/mysql/overlay.yml +12 -2
- package/overlays/nats/overlay.yml +12 -2
- package/overlays/ngrok/overlay.yml +2 -1
- package/overlays/openapi-tools/README.md +243 -0
- package/overlays/openapi-tools/devcontainer.patch.json +10 -0
- package/overlays/openapi-tools/overlay.yml +16 -0
- package/overlays/openapi-tools/setup.sh +45 -0
- package/overlays/openapi-tools/verify.sh +51 -0
- package/overlays/otel-collector/overlay.yml.example +26 -0
- package/overlays/postgres/overlay.yml +6 -1
- package/overlays/prometheus/overlay.yml +6 -1
- package/overlays/python/README.md +51 -35
- package/overlays/python/devcontainer.patch.json +7 -4
- package/overlays/python/setup.sh +50 -23
- package/overlays/python/verify.sh +29 -1
- package/overlays/rabbitmq/overlay.yml +12 -2
- package/overlays/redis/overlay.yml +6 -1
- package/overlays/tilt/README.md +259 -0
- package/overlays/tilt/devcontainer.patch.json +17 -0
- package/overlays/tilt/overlay.yml +19 -0
- package/overlays/tilt/setup.sh +25 -0
- package/overlays/tilt/verify.sh +24 -0
- package/package.json +8 -6
- package/tool/README.md +12 -16
- package/tool/schema/overlay-manifest.schema.json +64 -4
- package/tool/schema/superposition-manifest.schema.json +104 -0
- package/overlays/presets/web-api.yml +0 -109
- /package/overlays/{presets → .presets}/docs-site.yml +0 -0
- /package/overlays/{presets → .presets}/fullstack.yml +0 -0
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
# Minimal Mode and Editor Profiles
|
|
2
|
+
|
|
3
|
+
Container Superposition provides options to customize the generated development environment based on your needs and preferences.
|
|
4
|
+
|
|
5
|
+
## Minimal Mode
|
|
6
|
+
|
|
7
|
+
Use `--minimal` to generate lean configurations by excluding optional overlays.
|
|
8
|
+
|
|
9
|
+
### Usage
|
|
10
|
+
|
|
11
|
+
```bash
|
|
12
|
+
# Generate minimal configuration
|
|
13
|
+
container-superposition init --minimal
|
|
14
|
+
|
|
15
|
+
# With other options
|
|
16
|
+
container-superposition init --stack plain --language nodejs --minimal
|
|
17
|
+
|
|
18
|
+
# Compare: Normal vs Minimal
|
|
19
|
+
container-superposition init --language nodejs --dev-tools modern-cli-tools,git-helpers,codex
|
|
20
|
+
# ✓ Includes: nodejs, modern-cli-tools, git-helpers, codex
|
|
21
|
+
|
|
22
|
+
container-superposition init --language nodejs --dev-tools modern-cli-tools,git-helpers,codex --minimal
|
|
23
|
+
# ✓ Includes: nodejs (essential)
|
|
24
|
+
# ✗ Excludes: modern-cli-tools, git-helpers, codex (marked as optional)
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### What Gets Excluded
|
|
28
|
+
|
|
29
|
+
Overlays marked with `minimal: true` in their `overlay.yml` are excluded in minimal mode:
|
|
30
|
+
|
|
31
|
+
- **modern-cli-tools** — Enhanced CLI tools (jq, yq, ripgrep, fd, bat)
|
|
32
|
+
- **git-helpers** — Git LFS, GitHub CLI, GPG/SSH support
|
|
33
|
+
- **codex** — AI-powered coding assistant
|
|
34
|
+
|
|
35
|
+
Essential overlays (languages, databases, required tools) are always included.
|
|
36
|
+
|
|
37
|
+
### When to Use Minimal Mode
|
|
38
|
+
|
|
39
|
+
**CI/CD Environments:**
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
container-superposition init --minimal --stack compose --language nodejs --database postgres
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
**Resource-Constrained Codespaces:**
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
container-superposition init --minimal --target codespaces --language python
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
**Learning/Tutorials:**
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
container-superposition init --minimal --stack plain --language nodejs
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**Production-like Environments:**
|
|
58
|
+
|
|
59
|
+
```bash
|
|
60
|
+
container-superposition init --minimal --stack compose --language dotnet --database sqlserver
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
### Marking Overlays as Optional
|
|
64
|
+
|
|
65
|
+
When creating overlays, add `minimal: true` to mark them as optional:
|
|
66
|
+
|
|
67
|
+
```yaml
|
|
68
|
+
# overlays/modern-cli-tools/overlay.yml
|
|
69
|
+
id: modern-cli-tools
|
|
70
|
+
name: Modern CLI Tools
|
|
71
|
+
description: Enhanced command-line tools
|
|
72
|
+
category: dev
|
|
73
|
+
minimal: true # Excluded in minimal mode
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
## Editor Profiles
|
|
77
|
+
|
|
78
|
+
Use `--editor` to choose which editor customizations to include.
|
|
79
|
+
|
|
80
|
+
### Usage
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
# VS Code (default) - Include VS Code extensions and settings
|
|
84
|
+
container-superposition init --editor vscode
|
|
85
|
+
|
|
86
|
+
# None - CLI-only, no editor customizations
|
|
87
|
+
container-superposition init --editor none
|
|
88
|
+
|
|
89
|
+
# JetBrains - Skip VS Code customizations (reserved for future JetBrains support)
|
|
90
|
+
container-superposition init --editor jetbrains
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
### Available Profiles
|
|
94
|
+
|
|
95
|
+
#### vscode (Default)
|
|
96
|
+
|
|
97
|
+
Includes VS Code extensions and settings from overlays.
|
|
98
|
+
|
|
99
|
+
```json
|
|
100
|
+
{
|
|
101
|
+
"customizations": {
|
|
102
|
+
"vscode": {
|
|
103
|
+
"extensions": ["dbaeumer.vscode-eslint", "esbenp.prettier-vscode"],
|
|
104
|
+
"settings": {
|
|
105
|
+
"editor.defaultFormatter": "esbenp.prettier-vscode"
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
#### none
|
|
113
|
+
|
|
114
|
+
Removes all editor customizations. Useful for:
|
|
115
|
+
|
|
116
|
+
- CI/CD containers
|
|
117
|
+
- Server environments
|
|
118
|
+
- Terminal-only workflows
|
|
119
|
+
- Using different editors (vim, emacs, etc.)
|
|
120
|
+
|
|
121
|
+
```json
|
|
122
|
+
{
|
|
123
|
+
// No customizations field
|
|
124
|
+
}
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
#### jetbrains
|
|
128
|
+
|
|
129
|
+
Removes VS Code customizations. Reserved for future JetBrains-specific settings (Gateway, Fleet, etc.).
|
|
130
|
+
|
|
131
|
+
```json
|
|
132
|
+
{
|
|
133
|
+
// No vscode customizations
|
|
134
|
+
// Future: JetBrains-specific settings could be added here
|
|
135
|
+
}
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
### When to Use Editor Profiles
|
|
139
|
+
|
|
140
|
+
**Terminal Workflows:**
|
|
141
|
+
|
|
142
|
+
```bash
|
|
143
|
+
container-superposition init --editor none --language python
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
**JetBrains IDEs:**
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
container-superposition init --editor jetbrains --language java
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
**CI/CD (no editor needed):**
|
|
153
|
+
|
|
154
|
+
```bash
|
|
155
|
+
container-superposition init --editor none --minimal --language nodejs
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
## Combining Flags
|
|
159
|
+
|
|
160
|
+
Both flags can be used together with init or regen commands:
|
|
161
|
+
|
|
162
|
+
```bash
|
|
163
|
+
# Minimal, CLI-only configuration
|
|
164
|
+
container-superposition init --minimal --editor none --language nodejs
|
|
165
|
+
|
|
166
|
+
# Regenerate existing setup in minimal mode without editor customizations
|
|
167
|
+
container-superposition regen --minimal --editor none
|
|
168
|
+
|
|
169
|
+
# Resource-efficient Codespaces setup
|
|
170
|
+
container-superposition init --minimal --editor vscode --target codespaces --language python
|
|
171
|
+
|
|
172
|
+
# Lean JetBrains environment
|
|
173
|
+
container-superposition init --minimal --editor jetbrains --language java
|
|
174
|
+
```
|
|
175
|
+
|
|
176
|
+
## Regeneration Workflow
|
|
177
|
+
|
|
178
|
+
The `regen` command is particularly useful when you want to modify an existing setup:
|
|
179
|
+
|
|
180
|
+
```bash
|
|
181
|
+
# Step 1: Create initial setup with all extras
|
|
182
|
+
container-superposition init --language nodejs --dev-tools modern-cli-tools,git-helpers,codex
|
|
183
|
+
|
|
184
|
+
# Step 2: Later, regenerate without the extras
|
|
185
|
+
container-superposition regen --minimal
|
|
186
|
+
# Reads existing manifest, excludes optional overlays
|
|
187
|
+
|
|
188
|
+
# Step 3: Or regenerate for a different editor
|
|
189
|
+
container-superposition regen --editor jetbrains
|
|
190
|
+
# Removes VS Code customizations
|
|
191
|
+
|
|
192
|
+
# Step 4: Or both together
|
|
193
|
+
container-superposition regen --minimal --editor none
|
|
194
|
+
# Lean, CLI-only regeneration
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
## Examples
|
|
198
|
+
|
|
199
|
+
### Minimal Node.js for CI
|
|
200
|
+
|
|
201
|
+
```bash
|
|
202
|
+
container-superposition init \
|
|
203
|
+
--minimal \
|
|
204
|
+
--editor none \
|
|
205
|
+
--stack plain \
|
|
206
|
+
--language nodejs \
|
|
207
|
+
--output .devcontainer
|
|
208
|
+
```
|
|
209
|
+
|
|
210
|
+
**Result:** Bare-bones Node.js environment, no extras, no editor extensions.
|
|
211
|
+
|
|
212
|
+
### Full-Featured Local Development
|
|
213
|
+
|
|
214
|
+
```bash
|
|
215
|
+
container-superposition init \
|
|
216
|
+
--editor vscode \
|
|
217
|
+
--stack compose \
|
|
218
|
+
--language nodejs \
|
|
219
|
+
--database postgres \
|
|
220
|
+
--dev-tools docker-sock,git-helpers,modern-cli-tools,pre-commit \
|
|
221
|
+
--observability prometheus,grafana
|
|
222
|
+
```
|
|
223
|
+
|
|
224
|
+
**Result:** Complete development environment with all tools and VS Code extensions.
|
|
225
|
+
|
|
226
|
+
### Codespaces-Optimized Setup
|
|
227
|
+
|
|
228
|
+
```bash
|
|
229
|
+
container-superposition init \
|
|
230
|
+
--minimal \
|
|
231
|
+
--editor vscode \
|
|
232
|
+
--target codespaces \
|
|
233
|
+
--stack compose \
|
|
234
|
+
--language python \
|
|
235
|
+
--database postgres
|
|
236
|
+
```
|
|
237
|
+
|
|
238
|
+
**Result:** Lean Codespaces environment with essential tools and VS Code extensions.
|
|
239
|
+
|
|
240
|
+
## Manifest Support
|
|
241
|
+
|
|
242
|
+
Both settings are stored in `superposition.json`:
|
|
243
|
+
|
|
244
|
+
```json
|
|
245
|
+
{
|
|
246
|
+
"version": "0.1.0",
|
|
247
|
+
"generated": "2026-02-13T09:00:00.000Z",
|
|
248
|
+
"minimal": true,
|
|
249
|
+
"editor": "none",
|
|
250
|
+
"overlays": ["nodejs"]
|
|
251
|
+
}
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
Use `container-superposition regen` to regenerate from manifest:
|
|
255
|
+
|
|
256
|
+
```bash
|
|
257
|
+
# Regenerate with same settings
|
|
258
|
+
container-superposition regen
|
|
259
|
+
```
|
|
260
|
+
|
|
261
|
+
## See Also
|
|
262
|
+
|
|
263
|
+
- [CLI Reference](../README.md#cli-usage)
|
|
264
|
+
- [Overlay Authoring](creating-overlays.md)
|
|
265
|
+
- [Deployment Targets](deployment-targets.md)
|
|
@@ -0,0 +1,209 @@
|
|
|
1
|
+
# Overlay Imports
|
|
2
|
+
|
|
3
|
+
Overlays can import shared configuration fragments from `overlays/.shared/` to reduce duplication and ensure consistency across overlays.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Import functionality allows overlays to reference common configuration files instead of duplicating them in every overlay. This promotes DRY (Don't Repeat Yourself) principles and makes it easier to maintain consistent patterns.
|
|
8
|
+
|
|
9
|
+
## Shared Directory Structure
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
overlays/
|
|
13
|
+
├── .shared/
|
|
14
|
+
│ ├── otel/ # OpenTelemetry configurations
|
|
15
|
+
│ │ ├── otel-base-config.yaml # Base OTEL collector config
|
|
16
|
+
│ │ └── instrumentation.env # Common env vars for instrumentation
|
|
17
|
+
│ ├── compose/ # Docker Compose patterns
|
|
18
|
+
│ │ └── common-healthchecks.yml # Standard healthcheck configurations
|
|
19
|
+
│ └── vscode/ # VS Code extension sets
|
|
20
|
+
│ └── recommended-extensions.json # Commonly recommended extensions
|
|
21
|
+
├── prometheus/
|
|
22
|
+
│ ├── overlay.yml # Can import from .shared/
|
|
23
|
+
│ └── devcontainer.patch.json
|
|
24
|
+
└── jaeger/
|
|
25
|
+
├── overlay.yml # Can import from .shared/
|
|
26
|
+
└── devcontainer.patch.json
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
## Using Imports
|
|
30
|
+
|
|
31
|
+
Add the `imports` field to your `overlay.yml` manifest:
|
|
32
|
+
|
|
33
|
+
```yaml
|
|
34
|
+
id: prometheus
|
|
35
|
+
name: Prometheus
|
|
36
|
+
description: Metrics collection and monitoring
|
|
37
|
+
category: observability
|
|
38
|
+
supports:
|
|
39
|
+
- compose
|
|
40
|
+
requires: []
|
|
41
|
+
suggests:
|
|
42
|
+
- alertmanager
|
|
43
|
+
conflicts: []
|
|
44
|
+
tags:
|
|
45
|
+
- observability
|
|
46
|
+
- metrics
|
|
47
|
+
ports:
|
|
48
|
+
- 9090
|
|
49
|
+
imports:
|
|
50
|
+
- .shared/otel/instrumentation.env
|
|
51
|
+
- .shared/compose/common-healthchecks.yml
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
## Supported File Types
|
|
55
|
+
|
|
56
|
+
### JSON Files (`.json`)
|
|
57
|
+
|
|
58
|
+
Merged as devcontainer patches, just like `devcontainer.patch.json`.
|
|
59
|
+
|
|
60
|
+
**Example: `.shared/vscode/recommended-extensions.json`**
|
|
61
|
+
|
|
62
|
+
```json
|
|
63
|
+
{
|
|
64
|
+
"customizations": {
|
|
65
|
+
"vscode": {
|
|
66
|
+
"extensions": [
|
|
67
|
+
"streetsidesoftware.code-spell-checker",
|
|
68
|
+
"usernamehw.errorlens",
|
|
69
|
+
"editorconfig.editorconfig"
|
|
70
|
+
]
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### YAML Files (`.yaml`, `.yml`)
|
|
77
|
+
|
|
78
|
+
Loaded and merged as devcontainer patches. Useful for complex configurations.
|
|
79
|
+
|
|
80
|
+
**Example: `.shared/otel/otel-base-config.yaml`**
|
|
81
|
+
|
|
82
|
+
```yaml
|
|
83
|
+
receivers:
|
|
84
|
+
otlp:
|
|
85
|
+
protocols:
|
|
86
|
+
grpc:
|
|
87
|
+
endpoint: 0.0.0.0:4317
|
|
88
|
+
http:
|
|
89
|
+
endpoint: 0.0.0.0:4318
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### Environment Files (`.env`)
|
|
93
|
+
|
|
94
|
+
Merged into `.env.example` with a comment indicating the import source.
|
|
95
|
+
|
|
96
|
+
**Example: `.shared/otel/instrumentation.env`**
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
# OpenTelemetry Configuration
|
|
100
|
+
OTEL_SERVICE_NAME=my-service
|
|
101
|
+
OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4317
|
|
102
|
+
OTEL_TRACES_SAMPLER=always_on
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
## How Imports Work
|
|
106
|
+
|
|
107
|
+
1. **Resolution**: Imports are resolved relative to the `overlays/` directory
|
|
108
|
+
2. **Order**: Imports are applied in the order listed, then the overlay's own files
|
|
109
|
+
3. **Merging**:
|
|
110
|
+
- JSON/YAML: Deep merged into devcontainer configuration
|
|
111
|
+
- ENV: Concatenated into `.env.example` with source comments
|
|
112
|
+
4. **Validation**: Doctor command validates that all imports exist and are valid
|
|
113
|
+
|
|
114
|
+
## Benefits
|
|
115
|
+
|
|
116
|
+
### Reduced Duplication
|
|
117
|
+
|
|
118
|
+
Before imports:
|
|
119
|
+
|
|
120
|
+
```
|
|
121
|
+
prometheus/devcontainer.patch.json (200 lines with OTEL config)
|
|
122
|
+
jaeger/devcontainer.patch.json (200 lines with OTEL config)
|
|
123
|
+
grafana/devcontainer.patch.json (200 lines with OTEL config)
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
After imports:
|
|
127
|
+
|
|
128
|
+
```
|
|
129
|
+
.shared/otel/otel-base-config.yaml (50 lines, shared)
|
|
130
|
+
prometheus/overlay.yml (imports: [.shared/otel/otel-base-config.yaml])
|
|
131
|
+
jaeger/overlay.yml (imports: [.shared/otel/otel-base-config.yaml])
|
|
132
|
+
grafana/overlay.yml (imports: [.shared/otel/otel-base-config.yaml])
|
|
133
|
+
```
|
|
134
|
+
|
|
135
|
+
### Consistency
|
|
136
|
+
|
|
137
|
+
All overlays using the same shared config stay in sync automatically.
|
|
138
|
+
|
|
139
|
+
### Maintainability
|
|
140
|
+
|
|
141
|
+
Update shared configuration once, all importing overlays benefit.
|
|
142
|
+
|
|
143
|
+
## Validation
|
|
144
|
+
|
|
145
|
+
The `doctor` command validates imports:
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
container-superposition doctor
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Checks performed:
|
|
152
|
+
|
|
153
|
+
- Import files exist
|
|
154
|
+
- File types are supported (`.json`, `.yaml`, `.yml`, `.env`)
|
|
155
|
+
- No broken import references
|
|
156
|
+
|
|
157
|
+
## Creating Shared Configurations
|
|
158
|
+
|
|
159
|
+
1. **Identify common patterns** across overlays
|
|
160
|
+
2. **Extract to `.shared/` subdirectory** with descriptive path
|
|
161
|
+
3. **Update overlays** to import the shared file
|
|
162
|
+
4. **Test** that composition works correctly
|
|
163
|
+
5. **Document** the shared file's purpose in `.shared/README.md`
|
|
164
|
+
|
|
165
|
+
## Example: OTEL Instrumentation
|
|
166
|
+
|
|
167
|
+
Many observability overlays need OTEL instrumentation. Instead of duplicating these environment variables:
|
|
168
|
+
|
|
169
|
+
**Create:** `overlays/.shared/otel/instrumentation.env`
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
# OpenTelemetry SDK Configuration
|
|
173
|
+
OTEL_SERVICE_NAME=my-service
|
|
174
|
+
OTEL_EXPORTER_OTLP_ENDPOINT=http://otel-collector:4317
|
|
175
|
+
OTEL_EXPORTER_OTLP_PROTOCOL=grpc
|
|
176
|
+
OTEL_RESOURCE_ATTRIBUTES=deployment.environment=development
|
|
177
|
+
OTEL_TRACES_SAMPLER=always_on
|
|
178
|
+
OTEL_TRACES_EXPORTER=otlp
|
|
179
|
+
OTEL_METRICS_EXPORTER=otlp
|
|
180
|
+
OTEL_LOGS_EXPORTER=otlp
|
|
181
|
+
```
|
|
182
|
+
|
|
183
|
+
**Import in overlays:**
|
|
184
|
+
|
|
185
|
+
```yaml
|
|
186
|
+
# overlays/prometheus/overlay.yml
|
|
187
|
+
imports:
|
|
188
|
+
- .shared/otel/instrumentation.env
|
|
189
|
+
|
|
190
|
+
# overlays/jaeger/overlay.yml
|
|
191
|
+
imports:
|
|
192
|
+
- .shared/otel/instrumentation.env
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
Now all OTEL-compatible overlays share the same instrumentation configuration!
|
|
196
|
+
|
|
197
|
+
## Best Practices
|
|
198
|
+
|
|
199
|
+
1. **Keep shared files focused** - One concern per file
|
|
200
|
+
2. **Use descriptive paths** - `.shared/otel/instrumentation.env` not `.shared/env1.env`
|
|
201
|
+
3. **Document shared files** - Add comments explaining purpose and usage
|
|
202
|
+
4. **Version carefully** - Changes to shared files affect all importing overlays
|
|
203
|
+
5. **Test imports** - Verify overlay composition works after adding imports
|
|
204
|
+
|
|
205
|
+
## See Also
|
|
206
|
+
|
|
207
|
+
- [Creating Overlays](creating-overlays.md)
|
|
208
|
+
- [Overlay Metadata](overlay-metadata-archive.md)
|
|
209
|
+
- [Doctor Command](../README.md#doctor-command)
|
|
@@ -73,7 +73,7 @@ The overlay loader (`tool/schema/overlay-loader.ts`) discovers overlays by:
|
|
|
73
73
|
3. Validating manifest structure and fields
|
|
74
74
|
4. Grouping overlays by category
|
|
75
75
|
5. Loading base images/templates from `.registry/` files
|
|
76
|
-
6. Loading preset metadata from `overlays
|
|
76
|
+
6. Loading preset metadata from `overlays/.presets/*.yml`
|
|
77
77
|
|
|
78
78
|
### Discovery Process
|
|
79
79
|
|
|
@@ -92,7 +92,7 @@ The loader:
|
|
|
92
92
|
|
|
93
93
|
### Preset Handling
|
|
94
94
|
|
|
95
|
-
Presets are meta-overlays defined in `overlays
|
|
95
|
+
Presets are meta-overlays defined in `overlays/.presets/*.yml`. Each preset file contains:
|
|
96
96
|
|
|
97
97
|
- Metadata (id, name, description, tags, supports)
|
|
98
98
|
- Selection rules (required overlays, user choices)
|
|
@@ -10,7 +10,7 @@ This central `index.yml` file (592 lines) has been split into:
|
|
|
10
10
|
|
|
11
11
|
- **46 individual overlay manifests** - `overlays/*/overlay.yml`
|
|
12
12
|
- **Registry files** - `overlays/.registry/base-images.yml` and `base-templates.yml`
|
|
13
|
-
- **Preset definitions** - Individual YAML files in `overlays
|
|
13
|
+
- **Preset definitions** - Individual YAML files in `overlays/.presets/*.yml`
|
|
14
14
|
|
|
15
15
|
## New Structure
|
|
16
16
|
|