container-superposition 0.1.1 → 0.1.3
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 +206 -1
- package/dist/scripts/init.js +235 -179
- 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 +211 -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 +16 -0
- package/dist/tool/commands/plan.d.ts.map +1 -0
- package/dist/tool/commands/plan.js +329 -0
- package/dist/tool/commands/plan.js.map +1 -0
- package/dist/tool/questionnaire/composer.d.ts +6 -1
- package/dist/tool/questionnaire/composer.d.ts.map +1 -1
- package/dist/tool/questionnaire/composer.js +300 -202
- 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 +44 -2
- package/dist/tool/schema/types.d.ts.map +1 -1
- 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/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 +91 -23
- 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/.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/codex/overlay.yml +1 -0
- 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/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/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/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/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/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 → .presets}/docs-site.yml +0 -0
- /package/overlays/{presets → .presets}/fullstack.yml +0 -0
- /package/overlays/{presets → .presets}/microservice.yml +0 -0
- /package/overlays/{presets → .presets}/web-api.yml +0 -0
package/README.md
CHANGED
|
@@ -1,5 +1,9 @@
|
|
|
1
1
|
# container-superposition
|
|
2
2
|
|
|
3
|
+
[](https://github.com/veggerby/container-superposition/actions/workflows/validate-overlays.yml)
|
|
4
|
+
[](https://github.com/veggerby/container-superposition/actions/workflows/build-devcontainers.yml)
|
|
5
|
+
[](https://www.npmjs.com/package/container-superposition)
|
|
6
|
+
|
|
3
7
|
Composable devcontainer scaffolds that collapse into working environments.
|
|
4
8
|
|
|
5
9
|
## 🎯 Purpose
|
|
@@ -253,9 +257,110 @@ npm run init
|
|
|
253
257
|
|
|
254
258
|
- **`init`** - Initialize a new devcontainer configuration (default command)
|
|
255
259
|
- **`regen`** - Regenerate devcontainer from existing manifest
|
|
256
|
-
- **`list`** - List all available overlays and presets
|
|
260
|
+
- **`list`** - List all available overlays and presets with filtering options
|
|
261
|
+
- **`explain`** - Show detailed information about a specific overlay
|
|
262
|
+
- **`plan`** - Preview what will be generated before creating devcontainer
|
|
257
263
|
- **`doctor`** - Check environment and validate configuration
|
|
258
264
|
|
|
265
|
+
#### Discovery Commands
|
|
266
|
+
|
|
267
|
+
**List available overlays:**
|
|
268
|
+
|
|
269
|
+
```bash
|
|
270
|
+
# List all overlays grouped by category
|
|
271
|
+
npx container-superposition list
|
|
272
|
+
|
|
273
|
+
# Filter by category
|
|
274
|
+
npx container-superposition list --category database
|
|
275
|
+
|
|
276
|
+
# Filter by tags
|
|
277
|
+
npx container-superposition list --tags observability
|
|
278
|
+
|
|
279
|
+
# Filter by stack support
|
|
280
|
+
npx container-superposition list --supports compose
|
|
281
|
+
|
|
282
|
+
# JSON output for scripting
|
|
283
|
+
npx container-superposition list --json
|
|
284
|
+
```
|
|
285
|
+
|
|
286
|
+
**Explain an overlay in detail:**
|
|
287
|
+
|
|
288
|
+
```bash
|
|
289
|
+
# Show detailed information about an overlay
|
|
290
|
+
npx container-superposition explain postgres
|
|
291
|
+
|
|
292
|
+
# JSON output
|
|
293
|
+
npx container-superposition explain nodejs --json
|
|
294
|
+
```
|
|
295
|
+
|
|
296
|
+
**Plan before generating:**
|
|
297
|
+
|
|
298
|
+
```bash
|
|
299
|
+
# Preview what will be created
|
|
300
|
+
npx container-superposition plan --stack compose --overlays postgres,grafana
|
|
301
|
+
|
|
302
|
+
# Include port offset
|
|
303
|
+
npx container-superposition plan --stack compose --overlays postgres,redis --port-offset 100
|
|
304
|
+
|
|
305
|
+
# JSON output
|
|
306
|
+
npx container-superposition plan --stack compose --overlays nodejs,postgres --json
|
|
307
|
+
```
|
|
308
|
+
|
|
309
|
+
The `plan` command shows:
|
|
310
|
+
|
|
311
|
+
- Selected overlays and auto-added dependencies
|
|
312
|
+
- Port mappings (with offset applied)
|
|
313
|
+
- Files that will be created/modified
|
|
314
|
+
- Conflict detection
|
|
315
|
+
|
|
316
|
+
#### Environment Validation
|
|
317
|
+
|
|
318
|
+
The `doctor` command provides comprehensive environment diagnostics:
|
|
319
|
+
|
|
320
|
+
```bash
|
|
321
|
+
# Check environment and configuration
|
|
322
|
+
npx container-superposition doctor
|
|
323
|
+
|
|
324
|
+
# Check specific devcontainer
|
|
325
|
+
npx container-superposition doctor --output /path/to/.devcontainer
|
|
326
|
+
|
|
327
|
+
# Get JSON output for CI/CD
|
|
328
|
+
npx container-superposition doctor --json
|
|
329
|
+
|
|
330
|
+
# Apply automatic fixes (where possible)
|
|
331
|
+
npx container-superposition doctor --fix
|
|
332
|
+
```
|
|
333
|
+
|
|
334
|
+
**Doctor checks:**
|
|
335
|
+
|
|
336
|
+
- ✅ Node.js version compatibility (>= 18)
|
|
337
|
+
- ✅ Docker daemon connectivity
|
|
338
|
+
- ✅ Docker Compose v2 availability (when using compose stack)
|
|
339
|
+
- ✅ Overlay integrity (valid manifests, required files)
|
|
340
|
+
- ✅ Manifest compatibility
|
|
341
|
+
- ⚠️ Port conflicts (best-effort detection)
|
|
342
|
+
|
|
343
|
+
**Example output:**
|
|
344
|
+
|
|
345
|
+
```
|
|
346
|
+
🔍 Running diagnostics...
|
|
347
|
+
|
|
348
|
+
Environment:
|
|
349
|
+
✓ Node.js version: v20.10.0 (>= 18.0.0 required)
|
|
350
|
+
✓ Docker daemon: Docker version 24.0.5
|
|
351
|
+
✓ Docker Compose: v2.23.0 (v2 required)
|
|
352
|
+
|
|
353
|
+
Overlays:
|
|
354
|
+
✓ All 46 overlays valid
|
|
355
|
+
|
|
356
|
+
Manifest:
|
|
357
|
+
✓ Manifest version: Format version 0.1.0
|
|
358
|
+
✓ DevContainer config: devcontainer.json valid
|
|
359
|
+
|
|
360
|
+
Summary:
|
|
361
|
+
✓ 51 passed
|
|
362
|
+
```
|
|
363
|
+
|
|
259
364
|
The questionnaire guides you through:
|
|
260
365
|
|
|
261
366
|
1. **Preset or Custom** - Start from a pre-configured stack or build custom?
|
|
@@ -357,6 +462,26 @@ npm run init -- --stack compose --language nodejs --postgres --port-offset 200 -
|
|
|
357
462
|
|
|
358
463
|
This automatically adjusts all exposed ports in docker-compose.yml and documents the offset in .env.example.
|
|
359
464
|
|
|
465
|
+
### Deployment Target Support
|
|
466
|
+
|
|
467
|
+
Container Superposition validates overlay compatibility with different deployment environments (local, Codespaces, Gitpod, DevPod) using the `--target` flag.
|
|
468
|
+
|
|
469
|
+
```bash
|
|
470
|
+
# Specify deployment target
|
|
471
|
+
npx container-superposition init --target codespaces
|
|
472
|
+
npx container-superposition init --target gitpod
|
|
473
|
+
npx container-superposition init --target local # default
|
|
474
|
+
```
|
|
475
|
+
|
|
476
|
+
The tool automatically validates overlay compatibility and warns you when selecting overlays that won't work in your target environment (e.g., `docker-sock` doesn't work in Codespaces).
|
|
477
|
+
|
|
478
|
+
**📖 See [Deployment Targets Documentation](docs/deployment-targets.md) for:**
|
|
479
|
+
|
|
480
|
+
- Complete target comparison table
|
|
481
|
+
- Interactive mode examples
|
|
482
|
+
- Environment-specific configuration
|
|
483
|
+
- Compatibility rules and best practices
|
|
484
|
+
|
|
360
485
|
### Regenerating from Manifest
|
|
361
486
|
|
|
362
487
|
Every devcontainer generation creates a `superposition.json` manifest file that records your configuration choices. You can use this manifest to:
|
|
@@ -485,6 +610,86 @@ npm run init -- --from-manifest .devcontainer/superposition.json
|
|
|
485
610
|
|
|
486
611
|
See **[Custom Patches Guide](docs/custom-patches.md)** for complete documentation and examples.
|
|
487
612
|
|
|
613
|
+
### Team Collaboration Workflow
|
|
614
|
+
|
|
615
|
+
**Use Case:** Standardize dev environments across a team while allowing personal customizations.
|
|
616
|
+
|
|
617
|
+
Container Superposition supports a **manifest-first workflow** where:
|
|
618
|
+
|
|
619
|
+
- **Manifest** (`superposition.json`) is committed to version control
|
|
620
|
+
- **.devcontainer/** is generated locally and gitignored
|
|
621
|
+
- **Custom patches** (`.devcontainer/custom/`) can be committed for shared customizations
|
|
622
|
+
|
|
623
|
+
#### Quick Setup
|
|
624
|
+
|
|
625
|
+
**1. Team lead creates the manifest:**
|
|
626
|
+
|
|
627
|
+
```bash
|
|
628
|
+
# Generate manifest only (no .devcontainer/ files)
|
|
629
|
+
npx container-superposition init --write-manifest-only \
|
|
630
|
+
--stack compose \
|
|
631
|
+
--language nodejs \
|
|
632
|
+
--database postgres,redis
|
|
633
|
+
|
|
634
|
+
# Commit to repo
|
|
635
|
+
git add superposition.json .gitignore
|
|
636
|
+
git commit -m "Add team devcontainer manifest"
|
|
637
|
+
```
|
|
638
|
+
|
|
639
|
+
**2. Add to `.gitignore`:**
|
|
640
|
+
|
|
641
|
+
```gitignore
|
|
642
|
+
# DevContainer - generated locally
|
|
643
|
+
.devcontainer/
|
|
644
|
+
|
|
645
|
+
# Except custom directory (personal/shared customizations)
|
|
646
|
+
!.devcontainer/custom/
|
|
647
|
+
```
|
|
648
|
+
|
|
649
|
+
**3. Team members clone and generate:**
|
|
650
|
+
|
|
651
|
+
```bash
|
|
652
|
+
git clone <repo>
|
|
653
|
+
cd <repo>
|
|
654
|
+
|
|
655
|
+
# Generate .devcontainer/ from manifest
|
|
656
|
+
npx container-superposition regen
|
|
657
|
+
|
|
658
|
+
# Open in VS Code and rebuild container
|
|
659
|
+
code .
|
|
660
|
+
```
|
|
661
|
+
|
|
662
|
+
**4. Personal customizations (optional):**
|
|
663
|
+
|
|
664
|
+
```bash
|
|
665
|
+
# Add personal VS Code extensions, themes, etc.
|
|
666
|
+
mkdir -p .devcontainer/custom
|
|
667
|
+
cat > .devcontainer/custom/devcontainer.patch.json << 'EOF'
|
|
668
|
+
{
|
|
669
|
+
"customizations": {
|
|
670
|
+
"vscode": {
|
|
671
|
+
"extensions": ["eamodio.gitlens"],
|
|
672
|
+
"settings": {
|
|
673
|
+
"editor.fontSize": 14
|
|
674
|
+
}
|
|
675
|
+
}
|
|
676
|
+
}
|
|
677
|
+
}
|
|
678
|
+
EOF
|
|
679
|
+
|
|
680
|
+
# Regenerate to apply
|
|
681
|
+
npx container-superposition regen
|
|
682
|
+
```
|
|
683
|
+
|
|
684
|
+
**Benefits:**
|
|
685
|
+
|
|
686
|
+
- ✅ One command onboarding for new developers
|
|
687
|
+
- ✅ No lock-in - generated files are plain JSON/YAML
|
|
688
|
+
- ✅ Personal customizations don't conflict with team standard
|
|
689
|
+
- ✅ CI can validate manifest without committing generated files
|
|
690
|
+
|
|
691
|
+
See **[Team Workflow Guide](docs/team-workflow.md)** for complete documentation, CI examples, and troubleshooting.
|
|
692
|
+
|
|
488
693
|
### Option 2: Manual Composition
|
|
489
694
|
|
|
490
695
|
1. **Copy a base template:**
|