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,214 @@
|
|
|
1
|
+
# Overlay Manifest System
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
|
|
5
|
+
The overlay system uses per-overlay manifest files (`overlay.yml`) instead of a centralized registry. Each overlay is self-contained with its metadata in its own directory, enabling parallel development and easier maintenance.
|
|
6
|
+
|
|
7
|
+
## Manifest Format
|
|
8
|
+
|
|
9
|
+
Each overlay directory contains an `overlay.yml` file defining its metadata:
|
|
10
|
+
|
|
11
|
+
```yaml
|
|
12
|
+
id: nodejs
|
|
13
|
+
name: Node.js
|
|
14
|
+
description: Node.js LTS with TypeScript and tooling
|
|
15
|
+
category: language
|
|
16
|
+
supports: [] # Empty = all stacks, or [plain], [compose]
|
|
17
|
+
requires: [] # Hard dependencies
|
|
18
|
+
suggests: [] # Recommended overlays
|
|
19
|
+
conflicts: [] # Incompatible overlays
|
|
20
|
+
tags:
|
|
21
|
+
- language
|
|
22
|
+
- nodejs
|
|
23
|
+
- javascript
|
|
24
|
+
- typescript
|
|
25
|
+
ports: [] # Ports used (for offset calculation)
|
|
26
|
+
```
|
|
27
|
+
|
|
28
|
+
### Required Fields
|
|
29
|
+
|
|
30
|
+
- **id**: Unique identifier (must match directory name)
|
|
31
|
+
- **name**: Human-readable display name
|
|
32
|
+
- **description**: One-line summary
|
|
33
|
+
- **category**: One of: `language`, `database`, `observability`, `cloud`, `dev`, `preset`
|
|
34
|
+
|
|
35
|
+
### Optional Fields
|
|
36
|
+
|
|
37
|
+
- **supports**: Stack compatibility (`[]` = all, `[plain]`, `[compose]`)
|
|
38
|
+
- **requires**: Overlay IDs that must be auto-installed
|
|
39
|
+
- **suggests**: Recommended overlay IDs
|
|
40
|
+
- **conflicts**: Incompatible overlay IDs (must be bidirectional)
|
|
41
|
+
- **tags**: Lowercase keywords for search/filtering
|
|
42
|
+
- **ports**: Ports exposed by overlay (for offset calculation)
|
|
43
|
+
- **order**: Display order within category (lower = first)
|
|
44
|
+
|
|
45
|
+
## Directory Structure
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
overlays/
|
|
49
|
+
.registry/
|
|
50
|
+
base-images.yml # Base container images
|
|
51
|
+
base-templates.yml # Template types (plain, compose)
|
|
52
|
+
nodejs/
|
|
53
|
+
overlay.yml # Overlay metadata
|
|
54
|
+
devcontainer.patch.json
|
|
55
|
+
setup.sh
|
|
56
|
+
README.md
|
|
57
|
+
postgres/
|
|
58
|
+
overlay.yml # Overlay metadata
|
|
59
|
+
docker-compose.yml
|
|
60
|
+
devcontainer.patch.json
|
|
61
|
+
README.md
|
|
62
|
+
presets/
|
|
63
|
+
web-api.yml # Preset definition
|
|
64
|
+
microservice.yml
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
## Loader Behavior
|
|
68
|
+
|
|
69
|
+
The overlay loader (`tool/schema/overlay-loader.ts`) discovers overlays by:
|
|
70
|
+
|
|
71
|
+
1. Scanning `overlays/` directory for subdirectories
|
|
72
|
+
2. Loading `overlay.yml` from each directory
|
|
73
|
+
3. Validating manifest structure and fields
|
|
74
|
+
4. Grouping overlays by category
|
|
75
|
+
5. Loading base images/templates from `.registry/` files
|
|
76
|
+
6. Loading preset metadata from `overlays/presets/*.yml`
|
|
77
|
+
|
|
78
|
+
### Discovery Process
|
|
79
|
+
|
|
80
|
+
```typescript
|
|
81
|
+
// Automatic discovery - no registration needed
|
|
82
|
+
const manifests = loadOverlayManifests(overlaysDir);
|
|
83
|
+
const config = buildOverlaysConfigFromManifests(overlaysDir);
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
The loader:
|
|
87
|
+
|
|
88
|
+
- Skips directories starting with `.` (e.g., `.registry`)
|
|
89
|
+
- Validates `id` matches directory name
|
|
90
|
+
- Sets default empty arrays for optional fields
|
|
91
|
+
- Warns about invalid or malformed manifests
|
|
92
|
+
|
|
93
|
+
### Preset Handling
|
|
94
|
+
|
|
95
|
+
Presets are meta-overlays defined in `overlays/presets/*.yml`. Each preset file contains:
|
|
96
|
+
|
|
97
|
+
- Metadata (id, name, description, tags, supports)
|
|
98
|
+
- Selection rules (required overlays, user choices)
|
|
99
|
+
- Glue configuration (environment variables, port mappings, README content)
|
|
100
|
+
|
|
101
|
+
The loader reads preset metadata separately and populates `preset_overlays` in the config.
|
|
102
|
+
|
|
103
|
+
### Backward Compatibility
|
|
104
|
+
|
|
105
|
+
The loader supports both approaches:
|
|
106
|
+
|
|
107
|
+
1. **Preferred**: Loads from individual manifests (checks for `.registry/` directory)
|
|
108
|
+
2. **Fallback**: Loads from `overlays/index.yml` if present and `.registry/` absent
|
|
109
|
+
|
|
110
|
+
This allows smooth migration and testing without breaking existing setups.
|
|
111
|
+
|
|
112
|
+
## Creating an Overlay
|
|
113
|
+
|
|
114
|
+
### Step 1: Create Directory
|
|
115
|
+
|
|
116
|
+
```bash
|
|
117
|
+
mkdir -p overlays/my-overlay
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Step 2: Create Manifest
|
|
121
|
+
|
|
122
|
+
Create `overlays/my-overlay/overlay.yml`:
|
|
123
|
+
|
|
124
|
+
```yaml
|
|
125
|
+
id: my-overlay
|
|
126
|
+
name: My Overlay
|
|
127
|
+
description: Brief description of what it provides
|
|
128
|
+
category: language
|
|
129
|
+
supports: []
|
|
130
|
+
requires: []
|
|
131
|
+
suggests: []
|
|
132
|
+
conflicts: []
|
|
133
|
+
tags:
|
|
134
|
+
- language
|
|
135
|
+
- my-overlay
|
|
136
|
+
ports: []
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Step 3: Add Implementation Files
|
|
140
|
+
|
|
141
|
+
- `devcontainer.patch.json` - DevContainer configuration patches
|
|
142
|
+
- `README.md` - Documentation
|
|
143
|
+
- Other files as needed (setup.sh, docker-compose.yml, etc.)
|
|
144
|
+
|
|
145
|
+
### Step 4: Test
|
|
146
|
+
|
|
147
|
+
```bash
|
|
148
|
+
npm run build
|
|
149
|
+
npm run init -- --stack compose --language my-overlay
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
**No registration step needed!** The loader automatically discovers the new overlay.
|
|
153
|
+
|
|
154
|
+
## Migration from Central index.yml
|
|
155
|
+
|
|
156
|
+
For repositories still using the centralized `overlays/index.yml`:
|
|
157
|
+
|
|
158
|
+
### Using the Migration Tool
|
|
159
|
+
|
|
160
|
+
```bash
|
|
161
|
+
# Run migration script
|
|
162
|
+
npx tsx scripts/migrate-to-manifests.ts
|
|
163
|
+
|
|
164
|
+
# Review generated files
|
|
165
|
+
ls overlays/*/overlay.yml
|
|
166
|
+
|
|
167
|
+
# Test
|
|
168
|
+
npm run build
|
|
169
|
+
npm test
|
|
170
|
+
|
|
171
|
+
# Archive old index.yml
|
|
172
|
+
mv overlays/index.yml overlays/index.yml.archived
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
The migration tool:
|
|
176
|
+
|
|
177
|
+
- Splits central index.yml into individual manifests
|
|
178
|
+
- Creates `.registry/` directory with base images/templates
|
|
179
|
+
- Validates bidirectional conflicts
|
|
180
|
+
- Checks ID-directory name matching
|
|
181
|
+
- Verifies port consistency
|
|
182
|
+
|
|
183
|
+
## Benefits
|
|
184
|
+
|
|
185
|
+
- **Cohesion**: Overlay metadata colocated with implementation
|
|
186
|
+
- **No Merge Conflicts**: No central file bottleneck
|
|
187
|
+
- **Portability**: Copy directory = copy overlay
|
|
188
|
+
- **Discovery**: Automatic scanning, no registration
|
|
189
|
+
- **Parallelization**: Multiple developers can work independently
|
|
190
|
+
- **Maintainability**: Single edit point per overlay
|
|
191
|
+
|
|
192
|
+
## Validation
|
|
193
|
+
|
|
194
|
+
Manifests are validated at runtime:
|
|
195
|
+
|
|
196
|
+
- Required fields presence
|
|
197
|
+
- ID matches directory name
|
|
198
|
+
- Array fields are actual arrays
|
|
199
|
+
- Bidirectional conflicts
|
|
200
|
+
- Port consistency with devcontainer.patch.json
|
|
201
|
+
|
|
202
|
+
For stricter validation, JSON schemas are available:
|
|
203
|
+
|
|
204
|
+
- `tool/schema/overlay-manifest.schema.json`
|
|
205
|
+
- `tool/schema/base-images.schema.json`
|
|
206
|
+
- `tool/schema/base-templates.schema.json`
|
|
207
|
+
|
|
208
|
+
## References
|
|
209
|
+
|
|
210
|
+
- **Loader**: `tool/schema/overlay-loader.ts`
|
|
211
|
+
- **Tests**: `tool/__tests__/overlay-loader.test.ts`
|
|
212
|
+
- **Schemas**: `tool/schema/*.schema.json`
|
|
213
|
+
- **Instructions**: `.github/instructions/overlay-*.instructions.md`
|
|
214
|
+
- **Archive**: `docs/overlay-metadata-archive.md` (old index.yml reference)
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# Overlay Metadata - ARCHIVED
|
|
2
|
+
|
|
3
|
+
**⚠️ This file is archived and no longer used.**
|
|
4
|
+
|
|
5
|
+
As of the per-overlay manifest refactoring, overlay metadata is now stored in individual `overlay.yml` files within each overlay directory.
|
|
6
|
+
|
|
7
|
+
## Migration
|
|
8
|
+
|
|
9
|
+
This central `index.yml` file (592 lines) has been split into:
|
|
10
|
+
|
|
11
|
+
- **46 individual overlay manifests** - `overlays/*/overlay.yml`
|
|
12
|
+
- **Registry files** - `overlays/.registry/base-images.yml` and `base-templates.yml`
|
|
13
|
+
- **Preset definitions** - Individual YAML files in `overlays/presets/*.yml`
|
|
14
|
+
|
|
15
|
+
## New Structure
|
|
16
|
+
|
|
17
|
+
Each overlay now has its own `overlay.yml` file:
|
|
18
|
+
|
|
19
|
+
```
|
|
20
|
+
overlays/
|
|
21
|
+
nodejs/
|
|
22
|
+
overlay.yml # ← Overlay metadata
|
|
23
|
+
devcontainer.patch.json
|
|
24
|
+
setup.sh
|
|
25
|
+
README.md
|
|
26
|
+
postgres/
|
|
27
|
+
overlay.yml # ← Overlay metadata
|
|
28
|
+
docker-compose.yml
|
|
29
|
+
devcontainer.patch.json
|
|
30
|
+
README.md
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
## Benefits
|
|
34
|
+
|
|
35
|
+
- ✅ **Cohesion**: Everything for an overlay in one place
|
|
36
|
+
- ✅ **No merge conflicts**: No central bottleneck file
|
|
37
|
+
- ✅ **Portability**: Overlays are self-contained
|
|
38
|
+
- ✅ **Easier maintenance**: Single edit point per overlay
|
|
39
|
+
- ✅ **Better discoverability**: `ls overlays/` shows what's available
|
|
40
|
+
- ✅ **Dynamic loading**: Automatic discovery of overlays
|
|
41
|
+
|
|
42
|
+
## Loader
|
|
43
|
+
|
|
44
|
+
The overlay loader (`tool/schema/overlay-loader.ts`) scans the `overlays/` directory and automatically builds an in-memory registry from all `overlay.yml` files.
|
|
45
|
+
|
|
46
|
+
## This File
|
|
47
|
+
|
|
48
|
+
This archived file is kept for reference but is no longer read by the system. To add or modify overlays, create or edit the `overlay.yml` file in the overlay's directory.
|
|
49
|
+
|
|
50
|
+
See:
|
|
51
|
+
|
|
52
|
+
- `.github/instructions/overlay-authoring.instructions.md` - Guide for creating overlays
|
|
53
|
+
- `.github/instructions/overlay-index.instructions.md` - Guide for overlay.yml manifests
|
|
54
|
+
- `scripts/migrate-to-manifests.ts` - Migration script used to create individual manifests
|