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
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
# Tilt Overlay
|
|
2
|
+
|
|
3
|
+
Live update and orchestration for Kubernetes development with real-time feedback.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Tilt** - Smart rebuilds and live updates for Kubernetes
|
|
8
|
+
- **Web UI** - Browser-based dashboard on port 10350
|
|
9
|
+
- **Live Updates** - See code changes instantly in K8s
|
|
10
|
+
- **Smart Builds** - Only rebuild what changed
|
|
11
|
+
- **Resource Orchestration** - Manage complex K8s workflows
|
|
12
|
+
- **Multi-service Support** - Handle microservices architectures
|
|
13
|
+
|
|
14
|
+
## How It Works
|
|
15
|
+
|
|
16
|
+
This overlay installs Tilt, a development tool that orchestrates your Kubernetes development workflow. Tilt watches your code, automatically rebuilds containers, and updates your Kubernetes cluster when files change.
|
|
17
|
+
|
|
18
|
+
**Suggested overlays:**
|
|
19
|
+
|
|
20
|
+
- `kind` - Local Kubernetes cluster
|
|
21
|
+
- `kubectl-helm` - Kubernetes CLI and Helm
|
|
22
|
+
|
|
23
|
+
**Conflicts:**
|
|
24
|
+
|
|
25
|
+
- `skaffold` - Alternative K8s build orchestration tool
|
|
26
|
+
|
|
27
|
+
## Installation
|
|
28
|
+
|
|
29
|
+
Tilt is installed automatically during devcontainer creation via `setup.sh`:
|
|
30
|
+
|
|
31
|
+
- Downloads and installs latest Tilt CLI
|
|
32
|
+
- Installs to `/usr/local/bin/tilt`
|
|
33
|
+
- Web UI accessible on port 10350
|
|
34
|
+
|
|
35
|
+
## Common Commands
|
|
36
|
+
|
|
37
|
+
### Starting Tilt
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
# Start Tilt with Tiltfile in current directory
|
|
41
|
+
tilt up
|
|
42
|
+
|
|
43
|
+
# Start Tilt in specific directory
|
|
44
|
+
tilt up --file ./services/api/Tiltfile
|
|
45
|
+
|
|
46
|
+
# Start without opening browser
|
|
47
|
+
tilt up --hud=false
|
|
48
|
+
|
|
49
|
+
# Run in CI mode (no interactive UI)
|
|
50
|
+
tilt ci
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
### Managing Resources
|
|
54
|
+
|
|
55
|
+
```bash
|
|
56
|
+
# List resources
|
|
57
|
+
tilt get uiresources
|
|
58
|
+
|
|
59
|
+
# Trigger manual build
|
|
60
|
+
tilt trigger <resource-name>
|
|
61
|
+
|
|
62
|
+
# Disable a resource
|
|
63
|
+
tilt disable <resource-name>
|
|
64
|
+
|
|
65
|
+
# Enable a resource
|
|
66
|
+
tilt enable <resource-name>
|
|
67
|
+
```
|
|
68
|
+
|
|
69
|
+
### Logs and Debugging
|
|
70
|
+
|
|
71
|
+
```bash
|
|
72
|
+
# View logs
|
|
73
|
+
tilt logs <resource-name>
|
|
74
|
+
|
|
75
|
+
# Get resource status
|
|
76
|
+
tilt get uiresources <resource-name>
|
|
77
|
+
|
|
78
|
+
# Dump snapshot for debugging
|
|
79
|
+
tilt dump engine
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
## Tiltfile Configuration
|
|
83
|
+
|
|
84
|
+
Create a `Tiltfile` in your project root:
|
|
85
|
+
|
|
86
|
+
### Basic Example
|
|
87
|
+
|
|
88
|
+
```python
|
|
89
|
+
# Build Docker image
|
|
90
|
+
docker_build('myapp', '.')
|
|
91
|
+
|
|
92
|
+
# Deploy to Kubernetes
|
|
93
|
+
k8s_yaml('k8s/deployment.yaml')
|
|
94
|
+
|
|
95
|
+
# Forward port
|
|
96
|
+
k8s_resource('myapp', port_forwards=8000)
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Live Update Example
|
|
100
|
+
|
|
101
|
+
```python
|
|
102
|
+
# Build with live update (no rebuild for code changes)
|
|
103
|
+
docker_build('myapp', '.',
|
|
104
|
+
live_update=[
|
|
105
|
+
sync('./src', '/app/src'),
|
|
106
|
+
run('npm install', trigger=['package.json']),
|
|
107
|
+
restart_container(),
|
|
108
|
+
]
|
|
109
|
+
)
|
|
110
|
+
|
|
111
|
+
k8s_yaml('k8s/deployment.yaml')
|
|
112
|
+
k8s_resource('myapp', port_forwards=8000)
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
### Multi-Service Example
|
|
116
|
+
|
|
117
|
+
```python
|
|
118
|
+
# API service
|
|
119
|
+
docker_build('api', './services/api')
|
|
120
|
+
k8s_yaml('./services/api/k8s.yaml')
|
|
121
|
+
k8s_resource('api', port_forwards=3000)
|
|
122
|
+
|
|
123
|
+
# Frontend service
|
|
124
|
+
docker_build('frontend', './services/frontend')
|
|
125
|
+
k8s_yaml('./services/frontend/k8s.yaml')
|
|
126
|
+
k8s_resource('frontend', port_forwards=8080)
|
|
127
|
+
|
|
128
|
+
# Database (no rebuild needed)
|
|
129
|
+
k8s_yaml('./infra/postgres.yaml')
|
|
130
|
+
k8s_resource('postgres', port_forwards=5432)
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
### Custom Buttons
|
|
134
|
+
|
|
135
|
+
```python
|
|
136
|
+
# Add custom actions to UI
|
|
137
|
+
local_resource(
|
|
138
|
+
'db-migrate',
|
|
139
|
+
'kubectl exec -it deploy/api -- npm run migrate',
|
|
140
|
+
trigger_mode=TRIGGER_MODE_MANUAL,
|
|
141
|
+
auto_init=False
|
|
142
|
+
)
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
## Use Cases
|
|
146
|
+
|
|
147
|
+
- **Microservices development** - Manage multiple services with dependencies
|
|
148
|
+
- **Rapid iteration** - See changes instantly without manual rebuilds
|
|
149
|
+
- **Team development** - Standardize local development workflow
|
|
150
|
+
- **Complex K8s apps** - Orchestrate multi-tier applications
|
|
151
|
+
- **Learning Kubernetes** - Simplified K8s development experience
|
|
152
|
+
|
|
153
|
+
**Integrates well with:**
|
|
154
|
+
|
|
155
|
+
- `kind` or `k3d` - Local Kubernetes clusters
|
|
156
|
+
- `kubectl-helm` - Kubernetes CLI and Helm
|
|
157
|
+
- `nodejs`, `python`, `dotnet` - Application development
|
|
158
|
+
- `docker-in-docker` - Docker builds
|
|
159
|
+
|
|
160
|
+
## Web UI
|
|
161
|
+
|
|
162
|
+
Access Tilt's web dashboard:
|
|
163
|
+
|
|
164
|
+
- **URL**: http://localhost:10350
|
|
165
|
+
- **Features**:
|
|
166
|
+
- Real-time resource status
|
|
167
|
+
- Build logs and errors
|
|
168
|
+
- Resource dependencies graph
|
|
169
|
+
- Manual trigger buttons
|
|
170
|
+
- Performance metrics
|
|
171
|
+
|
|
172
|
+
The UI auto-opens when you run `tilt up`.
|
|
173
|
+
|
|
174
|
+
## Benefits vs Skaffold
|
|
175
|
+
|
|
176
|
+
| Feature | Tilt | Skaffold |
|
|
177
|
+
| ------------------ | ------------------------ | --------------------- |
|
|
178
|
+
| **UI** | ✅ Rich web UI | ⚠️ CLI only |
|
|
179
|
+
| **Live Updates** | ✅ Sophisticated | ⚠️ Basic |
|
|
180
|
+
| **Configuration** | ✅ Programmable (Python) | ⚠️ Declarative (YAML) |
|
|
181
|
+
| **Flexibility** | ✅ Very flexible | ⚠️ More opinionated |
|
|
182
|
+
| **Learning Curve** | ⚠️ Steeper | ✅ Gentler |
|
|
183
|
+
| **CI Integration** | ✅ Good | ✅ Excellent |
|
|
184
|
+
|
|
185
|
+
**When to use Tilt:**
|
|
186
|
+
|
|
187
|
+
- Need rich UI and debugging tools
|
|
188
|
+
- Want programmable configuration
|
|
189
|
+
- Developing complex microservices
|
|
190
|
+
- Value rapid feedback loops
|
|
191
|
+
|
|
192
|
+
**When to use Skaffold:**
|
|
193
|
+
|
|
194
|
+
- Prefer declarative configuration
|
|
195
|
+
- Focus on CI/CD pipelines
|
|
196
|
+
- Want simpler tool
|
|
197
|
+
- Need Google Cloud integration
|
|
198
|
+
|
|
199
|
+
## Troubleshooting
|
|
200
|
+
|
|
201
|
+
### Tilt Can't Find Kubernetes
|
|
202
|
+
|
|
203
|
+
Ensure you have a K8s cluster:
|
|
204
|
+
|
|
205
|
+
```bash
|
|
206
|
+
# Create kind cluster
|
|
207
|
+
kind create cluster --name dev
|
|
208
|
+
|
|
209
|
+
# Verify kubectl works
|
|
210
|
+
kubectl cluster-info
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### Build Failures
|
|
214
|
+
|
|
215
|
+
Check build logs in Tilt UI or:
|
|
216
|
+
|
|
217
|
+
```bash
|
|
218
|
+
tilt logs <resource-name>
|
|
219
|
+
```
|
|
220
|
+
|
|
221
|
+
### Port Already in Use
|
|
222
|
+
|
|
223
|
+
Change Tilt UI port:
|
|
224
|
+
|
|
225
|
+
```bash
|
|
226
|
+
# In Tiltfile
|
|
227
|
+
config.define_string('ui-port', args=False, usage='Tilt UI port')
|
|
228
|
+
cfg = config.parse()
|
|
229
|
+
tilt_port = cfg.get('ui-port', '10350')
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
Or use port offset when generating devcontainer.
|
|
233
|
+
|
|
234
|
+
### Live Update Not Working
|
|
235
|
+
|
|
236
|
+
Ensure your Tiltfile has `live_update` configuration:
|
|
237
|
+
|
|
238
|
+
```python
|
|
239
|
+
docker_build('myapp', '.',
|
|
240
|
+
live_update=[
|
|
241
|
+
sync('./src', '/app/src'),
|
|
242
|
+
restart_container(),
|
|
243
|
+
]
|
|
244
|
+
)
|
|
245
|
+
```
|
|
246
|
+
|
|
247
|
+
## References
|
|
248
|
+
|
|
249
|
+
- [Tilt Documentation](https://docs.tilt.dev/)
|
|
250
|
+
- [Tilt Getting Started](https://docs.tilt.dev/tutorial.html)
|
|
251
|
+
- [Tiltfile API Reference](https://docs.tilt.dev/api.html)
|
|
252
|
+
- [Tilt Examples](https://github.com/tilt-dev/tilt-example-html)
|
|
253
|
+
|
|
254
|
+
**Related Overlays:**
|
|
255
|
+
|
|
256
|
+
- `kind` - Local Kubernetes cluster (suggested)
|
|
257
|
+
- `kubectl-helm` - Kubernetes CLI and Helm (suggested)
|
|
258
|
+
- `skaffold` - Alternative K8s build tool (conflicts)
|
|
259
|
+
- `docker-in-docker` - Docker builds
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
|
|
3
|
+
"features": {
|
|
4
|
+
"./features/cross-distro-packages": {
|
|
5
|
+
"apt": "curl",
|
|
6
|
+
"apk": "curl"
|
|
7
|
+
}
|
|
8
|
+
},
|
|
9
|
+
"forwardPorts": [10350],
|
|
10
|
+
"portsAttributes": {
|
|
11
|
+
"10350": {
|
|
12
|
+
"label": "Tilt UI",
|
|
13
|
+
"onAutoForward": "openBrowser"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"postCreateCommand": "bash .devcontainer/scripts/setup-tilt.sh"
|
|
17
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
id: tilt
|
|
2
|
+
name: Tilt
|
|
3
|
+
description: Live update and orchestration for Kubernetes development
|
|
4
|
+
category: dev
|
|
5
|
+
supports: []
|
|
6
|
+
requires: []
|
|
7
|
+
suggests:
|
|
8
|
+
- kind
|
|
9
|
+
- kubectl-helm
|
|
10
|
+
conflicts:
|
|
11
|
+
- skaffold
|
|
12
|
+
tags:
|
|
13
|
+
- dev
|
|
14
|
+
- kubernetes
|
|
15
|
+
- k8s
|
|
16
|
+
- development
|
|
17
|
+
- live-reload
|
|
18
|
+
ports:
|
|
19
|
+
- 10350
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Setup script for Tilt
|
|
3
|
+
|
|
4
|
+
set -e
|
|
5
|
+
|
|
6
|
+
echo "🔧 Setting up Tilt..."
|
|
7
|
+
|
|
8
|
+
# Install Tilt
|
|
9
|
+
echo "📦 Installing Tilt..."
|
|
10
|
+
|
|
11
|
+
curl -fsSL https://raw.githubusercontent.com/tilt-dev/tilt/master/scripts/install.sh | bash
|
|
12
|
+
|
|
13
|
+
# Verify installation
|
|
14
|
+
if command -v tilt &> /dev/null; then
|
|
15
|
+
echo "✅ Tilt installed successfully"
|
|
16
|
+
tilt version
|
|
17
|
+
else
|
|
18
|
+
echo "❌ Tilt installation failed"
|
|
19
|
+
exit 1
|
|
20
|
+
fi
|
|
21
|
+
|
|
22
|
+
echo "✅ Tilt setup complete"
|
|
23
|
+
echo ""
|
|
24
|
+
echo "ℹ️ To start Tilt, run:"
|
|
25
|
+
echo " tilt up"
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Verification script for Tilt overlay
|
|
3
|
+
# Confirms Tilt is installed
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
echo "🔍 Verifying Tilt overlay..."
|
|
8
|
+
echo ""
|
|
9
|
+
|
|
10
|
+
# Check Tilt is installed
|
|
11
|
+
echo "1️⃣ Checking Tilt installation..."
|
|
12
|
+
if command -v tilt &> /dev/null; then
|
|
13
|
+
tilt version
|
|
14
|
+
echo " ✅ Tilt is installed"
|
|
15
|
+
else
|
|
16
|
+
echo " ❌ Tilt is not installed"
|
|
17
|
+
exit 1
|
|
18
|
+
fi
|
|
19
|
+
|
|
20
|
+
echo ""
|
|
21
|
+
echo "✅ Tilt overlay verification complete"
|
|
22
|
+
echo ""
|
|
23
|
+
echo "ℹ️ To start Tilt, run:"
|
|
24
|
+
echo " tilt up"
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "container-superposition",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.3",
|
|
4
4
|
"description": "Solution-ready devcontainer templates and features with guided initialization",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/scripts/init.js",
|
|
@@ -14,7 +14,9 @@
|
|
|
14
14
|
"test": "vitest run",
|
|
15
15
|
"test:watch": "vitest",
|
|
16
16
|
"test:smoke": "bash scripts/test.sh",
|
|
17
|
-
"docs:generate": "tsx docs/generate-docs.ts",
|
|
17
|
+
"docs:generate": "tsx docs/generate-docs.ts && prettier --write docs/overlays.md",
|
|
18
|
+
"lint": "tsc --noEmit && npm run format:check",
|
|
19
|
+
"lint:fix": "npm run format",
|
|
18
20
|
"format": "prettier --write \"**/*.{ts,js,json,md,yaml,yml}\"",
|
|
19
21
|
"format:check": "prettier --check \"**/*.{ts,js,json,md,yaml,yml}\"",
|
|
20
22
|
"clean": "rm -rf dist",
|
|
@@ -53,15 +55,15 @@
|
|
|
53
55
|
"dependencies": {
|
|
54
56
|
"@inquirer/checkbox": "^5.0.4",
|
|
55
57
|
"@inquirer/prompts": "^8.2.0",
|
|
56
|
-
"boxen": "^
|
|
58
|
+
"boxen": "^8.0.1",
|
|
57
59
|
"chalk": "^5.6.2",
|
|
58
|
-
"commander": "^
|
|
60
|
+
"commander": "^14.0.3",
|
|
59
61
|
"js-yaml": "^4.1.1",
|
|
60
|
-
"ora": "^
|
|
62
|
+
"ora": "^9.3.0"
|
|
61
63
|
},
|
|
62
64
|
"devDependencies": {
|
|
63
65
|
"@types/js-yaml": "^4.0.9",
|
|
64
|
-
"@types/node": "^
|
|
66
|
+
"@types/node": "^25.2.3",
|
|
65
67
|
"@vitest/ui": "^4.0.18",
|
|
66
68
|
"prettier": "^3.4.2",
|
|
67
69
|
"tsx": "^4.7.0",
|
package/tool/README.md
CHANGED
|
@@ -103,6 +103,7 @@ This makes the questionnaire more engaging and the output easier to scan.
|
|
|
103
103
|
| `--cloud-tools <list>` | Cloud tools: `aws-cli`, `azure-cli`, `gcloud`, `kubectl-helm`, `terraform`, `pulumi` | `--cloud-tools aws-cli,kubectl-helm` |
|
|
104
104
|
| `--dev-tools <list>` | Development tools: `docker-in-docker`, `docker-sock`, `playwright`, `codex`, `git-helpers`, `pre-commit`, `commitlint`, `just`, `direnv`, `modern-cli-tools`, `ngrok` | `--dev-tools docker-in-docker,playwright` |
|
|
105
105
|
| `--port-offset <number>` | Add offset to all exposed ports (e.g., 100 makes Grafana 3100) | `--port-offset 100` |
|
|
106
|
+
| `--target <environment>` | Deployment target: local, codespaces, gitpod, devpod (validates compatibility) | `--target codespaces` |
|
|
106
107
|
| `-o`, `--output <path>` | Output directory (default: `./.devcontainer`) | `-o ./custom-path` |
|
|
107
108
|
| `-h`, `--help` | Show help | `--help` |
|
|
108
109
|
|
|
@@ -121,21 +122,16 @@ After running the tool, you'll have:
|
|
|
121
122
|
```
|
|
122
123
|
.devcontainer/
|
|
123
124
|
├── devcontainer.json # Main configuration (editable!)
|
|
124
|
-
├── docker-compose.yml #
|
|
125
|
+
├── docker-compose.yml # Combined compose file with selected services
|
|
125
126
|
├── .env.example # Environment variables from selected overlays
|
|
126
127
|
├── scripts/
|
|
127
128
|
│ └── post_create.sh # Post-creation scripts
|
|
128
|
-
├──
|
|
129
|
-
├──
|
|
130
|
-
├──
|
|
131
|
-
├──
|
|
132
|
-
├──
|
|
133
|
-
|
|
134
|
-
├── docker-compose.loki.yml # (if loki selected)
|
|
135
|
-
├── otel-collector-config.yaml # (if otel-collector selected)
|
|
136
|
-
├── prometheus.yml # (if prometheus selected)
|
|
137
|
-
├── grafana-datasources.yml # (if grafana selected)
|
|
138
|
-
└── loki-config.yaml # (if loki selected)
|
|
129
|
+
├── otel-collector-config-otel-collector.yaml # (if otel-collector selected)
|
|
130
|
+
├── prometheus-prometheus.yml # (if prometheus selected)
|
|
131
|
+
├── grafana-datasources-grafana.yml # (if grafana selected)
|
|
132
|
+
├── dashboard-provider-grafana.yml # (if grafana selected)
|
|
133
|
+
├── dashboards-grafana/ # (if grafana selected)
|
|
134
|
+
└── loki-config-loki.yaml # (if loki selected)
|
|
139
135
|
```
|
|
140
136
|
|
|
141
137
|
All `.env.example` files from selected overlays are automatically merged into a single file with all relevant environment variables.
|
|
@@ -192,17 +188,17 @@ Each overlay is a composable package that can include:
|
|
|
192
188
|
```
|
|
193
189
|
overlays/postgres/
|
|
194
190
|
├── devcontainer.patch.json # Features, env vars, ports (merged into devcontainer.json)
|
|
195
|
-
├── docker-compose.yml # Service definition (
|
|
191
|
+
├── docker-compose.yml # Service definition (merged into output docker-compose.yml)
|
|
196
192
|
├── .env.example # Environment variables (merged into combined .env.example)
|
|
197
|
-
└── [additional files] #
|
|
193
|
+
└── [additional files] # Copied with overlay suffix to avoid filename conflicts
|
|
198
194
|
```
|
|
199
195
|
|
|
200
196
|
The tool intelligently handles each file type:
|
|
201
197
|
|
|
202
198
|
- **devcontainer.patch.json** - Deep-merged into devcontainer.json (arrays concatenated, objects merged)
|
|
203
|
-
- **docker-compose.yml** -
|
|
199
|
+
- **docker-compose.yml** - Merged with base compose into one output `docker-compose.yml`
|
|
204
200
|
- **.env.example** - Content merged into combined `.env.example` in output
|
|
205
|
-
- **Other files/directories** - Copied
|
|
201
|
+
- **Other files/directories** - Copied with an overlay suffix (e.g., `prometheus-prometheus.yml`, `dashboards-grafana/`)
|
|
206
202
|
|
|
207
203
|
This allows overlays to provide complete, self-contained configurations including any necessary config files.
|
|
208
204
|
|
|
@@ -68,11 +68,58 @@
|
|
|
68
68
|
},
|
|
69
69
|
"ports": {
|
|
70
70
|
"type": "array",
|
|
71
|
-
"description": "Ports used by the overlay (for offset calculation)",
|
|
71
|
+
"description": "Ports used by the overlay (for offset calculation and documentation)",
|
|
72
72
|
"items": {
|
|
73
|
-
"
|
|
74
|
-
|
|
75
|
-
|
|
73
|
+
"oneOf": [
|
|
74
|
+
{
|
|
75
|
+
"type": "integer",
|
|
76
|
+
"minimum": 1,
|
|
77
|
+
"maximum": 65535,
|
|
78
|
+
"description": "Simple port number (legacy format)"
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"type": "object",
|
|
82
|
+
"description": "Rich port metadata with service info and connection details",
|
|
83
|
+
"required": ["port"],
|
|
84
|
+
"properties": {
|
|
85
|
+
"port": {
|
|
86
|
+
"type": "integer",
|
|
87
|
+
"minimum": 1,
|
|
88
|
+
"maximum": 65535,
|
|
89
|
+
"description": "Port number"
|
|
90
|
+
},
|
|
91
|
+
"service": {
|
|
92
|
+
"type": "string",
|
|
93
|
+
"description": "Service name (e.g., postgres, grafana, jaeger)",
|
|
94
|
+
"pattern": "^[a-z0-9-]+$"
|
|
95
|
+
},
|
|
96
|
+
"protocol": {
|
|
97
|
+
"type": "string",
|
|
98
|
+
"description": "Protocol type",
|
|
99
|
+
"enum": ["http", "https", "tcp", "udp", "grpc"]
|
|
100
|
+
},
|
|
101
|
+
"description": {
|
|
102
|
+
"type": "string",
|
|
103
|
+
"description": "Human-readable description of what this port is for"
|
|
104
|
+
},
|
|
105
|
+
"path": {
|
|
106
|
+
"type": "string",
|
|
107
|
+
"description": "Default path for HTTP/HTTPS services (e.g., /, /metrics)",
|
|
108
|
+
"pattern": "^/"
|
|
109
|
+
},
|
|
110
|
+
"onAutoForward": {
|
|
111
|
+
"type": "string",
|
|
112
|
+
"description": "VS Code port auto-forward behavior",
|
|
113
|
+
"enum": ["notify", "openBrowser", "openPreview", "silent", "ignore"]
|
|
114
|
+
},
|
|
115
|
+
"connectionStringTemplate": {
|
|
116
|
+
"type": "string",
|
|
117
|
+
"description": "Template for connection string (e.g., postgresql://{user}:{password}@{host}:{port}/{database})"
|
|
118
|
+
}
|
|
119
|
+
},
|
|
120
|
+
"additionalProperties": false
|
|
121
|
+
}
|
|
122
|
+
]
|
|
76
123
|
},
|
|
77
124
|
"default": []
|
|
78
125
|
},
|
|
@@ -80,6 +127,19 @@
|
|
|
80
127
|
"type": "integer",
|
|
81
128
|
"description": "Display order within category (lower = first)",
|
|
82
129
|
"minimum": 1
|
|
130
|
+
},
|
|
131
|
+
"imports": {
|
|
132
|
+
"type": "array",
|
|
133
|
+
"description": "Shared files to import from overlays/.shared/",
|
|
134
|
+
"items": {
|
|
135
|
+
"type": "string"
|
|
136
|
+
},
|
|
137
|
+
"default": []
|
|
138
|
+
},
|
|
139
|
+
"minimal": {
|
|
140
|
+
"type": "boolean",
|
|
141
|
+
"description": "Whether this overlay is excluded in minimal mode (true = extra/optional)",
|
|
142
|
+
"default": false
|
|
83
143
|
}
|
|
84
144
|
},
|
|
85
145
|
"additionalProperties": false
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"type": "object",
|
|
4
|
+
"title": "Superposition Manifest",
|
|
5
|
+
"description": "Manifest file (superposition.json) generated by container-superposition to track devcontainer configuration",
|
|
6
|
+
"properties": {
|
|
7
|
+
"manifestVersion": {
|
|
8
|
+
"type": "string",
|
|
9
|
+
"description": "Schema version of the manifest (increments on breaking changes)",
|
|
10
|
+
"pattern": "^[0-9]+$"
|
|
11
|
+
},
|
|
12
|
+
"generatedBy": {
|
|
13
|
+
"type": "string",
|
|
14
|
+
"description": "Version of container-superposition that created this manifest"
|
|
15
|
+
},
|
|
16
|
+
"version": {
|
|
17
|
+
"type": "string",
|
|
18
|
+
"description": "Legacy field for backward compatibility (deprecated, use manifestVersion instead)"
|
|
19
|
+
},
|
|
20
|
+
"generated": {
|
|
21
|
+
"type": "string",
|
|
22
|
+
"format": "date-time",
|
|
23
|
+
"description": "ISO 8601 timestamp when the manifest was generated"
|
|
24
|
+
},
|
|
25
|
+
"baseTemplate": {
|
|
26
|
+
"type": "string",
|
|
27
|
+
"enum": ["plain", "compose"],
|
|
28
|
+
"description": "Base devcontainer template used (plain for single image, compose for multi-service)"
|
|
29
|
+
},
|
|
30
|
+
"baseImage": {
|
|
31
|
+
"type": "string",
|
|
32
|
+
"description": "Base container image used for the devcontainer"
|
|
33
|
+
},
|
|
34
|
+
"overlays": {
|
|
35
|
+
"type": "array",
|
|
36
|
+
"items": {
|
|
37
|
+
"type": "string"
|
|
38
|
+
},
|
|
39
|
+
"description": "List of overlay IDs that were applied to create this configuration"
|
|
40
|
+
},
|
|
41
|
+
"portOffset": {
|
|
42
|
+
"type": "number",
|
|
43
|
+
"minimum": 0,
|
|
44
|
+
"description": "Port offset applied to all service ports (optional)"
|
|
45
|
+
},
|
|
46
|
+
"preset": {
|
|
47
|
+
"type": "string",
|
|
48
|
+
"description": "ID of the preset used to generate this configuration (optional)"
|
|
49
|
+
},
|
|
50
|
+
"presetChoices": {
|
|
51
|
+
"type": "object",
|
|
52
|
+
"additionalProperties": {
|
|
53
|
+
"type": "string"
|
|
54
|
+
},
|
|
55
|
+
"description": "User choices made within preset user-choice sections (optional)"
|
|
56
|
+
},
|
|
57
|
+
"autoResolved": {
|
|
58
|
+
"type": "object",
|
|
59
|
+
"properties": {
|
|
60
|
+
"added": {
|
|
61
|
+
"type": "array",
|
|
62
|
+
"items": {
|
|
63
|
+
"type": "string"
|
|
64
|
+
},
|
|
65
|
+
"description": "List of overlays that were automatically added as dependencies"
|
|
66
|
+
},
|
|
67
|
+
"reason": {
|
|
68
|
+
"type": "string",
|
|
69
|
+
"description": "Human-readable reason why dependencies were added"
|
|
70
|
+
}
|
|
71
|
+
},
|
|
72
|
+
"required": ["added", "reason"],
|
|
73
|
+
"description": "Information about automatically resolved dependencies (optional)"
|
|
74
|
+
},
|
|
75
|
+
"containerName": {
|
|
76
|
+
"type": "string",
|
|
77
|
+
"description": "Name of the container/project from devcontainer.json (optional)"
|
|
78
|
+
},
|
|
79
|
+
"customizations": {
|
|
80
|
+
"type": "object",
|
|
81
|
+
"properties": {
|
|
82
|
+
"enabled": {
|
|
83
|
+
"type": "boolean",
|
|
84
|
+
"description": "Whether custom patches are enabled"
|
|
85
|
+
},
|
|
86
|
+
"location": {
|
|
87
|
+
"type": "string",
|
|
88
|
+
"description": "Path to custom patches directory relative to workspace"
|
|
89
|
+
}
|
|
90
|
+
},
|
|
91
|
+
"required": ["enabled", "location"],
|
|
92
|
+
"description": "Information about custom patches/overrides (optional)"
|
|
93
|
+
}
|
|
94
|
+
},
|
|
95
|
+
"required": [
|
|
96
|
+
"manifestVersion",
|
|
97
|
+
"generatedBy",
|
|
98
|
+
"generated",
|
|
99
|
+
"baseTemplate",
|
|
100
|
+
"baseImage",
|
|
101
|
+
"overlays"
|
|
102
|
+
],
|
|
103
|
+
"additionalProperties": false
|
|
104
|
+
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|