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
|
@@ -14,5 +14,15 @@ tags:
|
|
|
14
14
|
- nats
|
|
15
15
|
- jetstream
|
|
16
16
|
ports:
|
|
17
|
-
- 4222
|
|
18
|
-
|
|
17
|
+
- port: 4222
|
|
18
|
+
service: nats
|
|
19
|
+
protocol: tcp
|
|
20
|
+
description: NATS client connection
|
|
21
|
+
onAutoForward: notify
|
|
22
|
+
connectionStringTemplate: 'nats://{host}:{port}'
|
|
23
|
+
- port: 8222
|
|
24
|
+
service: nats
|
|
25
|
+
protocol: http
|
|
26
|
+
description: NATS monitoring/stats endpoint
|
|
27
|
+
path: /
|
|
28
|
+
onAutoForward: ignore
|
|
@@ -0,0 +1,243 @@
|
|
|
1
|
+
# OpenAPI Tools Overlay
|
|
2
|
+
|
|
3
|
+
OpenAPI/Swagger tooling for API development, documentation, and validation.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **swagger-cli** - OpenAPI/Swagger validation
|
|
8
|
+
- **spectral** - OpenAPI linting with customizable rules
|
|
9
|
+
- **redocly** - Documentation generation and API bundling
|
|
10
|
+
- **npm-based** - Easy to install and update
|
|
11
|
+
|
|
12
|
+
## How It Works
|
|
13
|
+
|
|
14
|
+
This overlay installs OpenAPI development tools as global npm packages. These tools help you create, validate, lint, and document APIs using the OpenAPI Specification (formerly Swagger).
|
|
15
|
+
|
|
16
|
+
**Suggested overlays:**
|
|
17
|
+
|
|
18
|
+
- `nodejs` - Node.js runtime for running OpenAPI tools
|
|
19
|
+
|
|
20
|
+
## Installation
|
|
21
|
+
|
|
22
|
+
OpenAPI tools are installed automatically during devcontainer creation via `setup.sh`:
|
|
23
|
+
|
|
24
|
+
- `@apidevtools/swagger-cli` - OpenAPI validation
|
|
25
|
+
- `@stoplight/spectral-cli` - OpenAPI linting
|
|
26
|
+
- `@redocly/cli` - Documentation and bundling
|
|
27
|
+
|
|
28
|
+
## Common Commands
|
|
29
|
+
|
|
30
|
+
### Validation
|
|
31
|
+
|
|
32
|
+
```bash
|
|
33
|
+
# Validate OpenAPI specification
|
|
34
|
+
swagger-cli validate openapi.yaml
|
|
35
|
+
|
|
36
|
+
# Validate with detailed output
|
|
37
|
+
swagger-cli validate openapi.yaml --debug
|
|
38
|
+
|
|
39
|
+
# Bundle multiple files into one
|
|
40
|
+
swagger-cli bundle openapi.yaml --outfile bundled.yaml --type yaml
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### Linting
|
|
44
|
+
|
|
45
|
+
```bash
|
|
46
|
+
# Lint OpenAPI spec with spectral
|
|
47
|
+
spectral lint openapi.yaml
|
|
48
|
+
|
|
49
|
+
# Use custom ruleset
|
|
50
|
+
spectral lint openapi.yaml --ruleset .spectral.yaml
|
|
51
|
+
|
|
52
|
+
# Output as JSON
|
|
53
|
+
spectral lint openapi.yaml --format json
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
### Redocly CLI
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
# Lint with redocly
|
|
60
|
+
redocly lint openapi.yaml
|
|
61
|
+
|
|
62
|
+
# Bundle specification
|
|
63
|
+
redocly bundle openapi.yaml -o bundled.yaml
|
|
64
|
+
|
|
65
|
+
# Build documentation
|
|
66
|
+
redocly build-docs openapi.yaml
|
|
67
|
+
|
|
68
|
+
# Preview documentation locally
|
|
69
|
+
redocly preview-docs openapi.yaml
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## Configuration
|
|
73
|
+
|
|
74
|
+
### Spectral Ruleset
|
|
75
|
+
|
|
76
|
+
Create `.spectral.yaml` for custom linting rules:
|
|
77
|
+
|
|
78
|
+
```yaml
|
|
79
|
+
extends: [[spectral:oas, all]]
|
|
80
|
+
|
|
81
|
+
rules:
|
|
82
|
+
operation-description: error
|
|
83
|
+
operation-tags: error
|
|
84
|
+
operation-operationId: error
|
|
85
|
+
|
|
86
|
+
# Custom rules
|
|
87
|
+
my-custom-rule:
|
|
88
|
+
description: Ensure all operations have examples
|
|
89
|
+
given: $.paths[*][*].responses[*].content[*]
|
|
90
|
+
severity: warn
|
|
91
|
+
then:
|
|
92
|
+
field: example
|
|
93
|
+
function: truthy
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
### Redocly Configuration
|
|
97
|
+
|
|
98
|
+
Create `redocly.yaml`:
|
|
99
|
+
|
|
100
|
+
```yaml
|
|
101
|
+
apis:
|
|
102
|
+
main:
|
|
103
|
+
root: ./openapi.yaml
|
|
104
|
+
|
|
105
|
+
lint:
|
|
106
|
+
extends:
|
|
107
|
+
- recommended
|
|
108
|
+
|
|
109
|
+
rules:
|
|
110
|
+
operation-description: error
|
|
111
|
+
operation-tags: error
|
|
112
|
+
```
|
|
113
|
+
|
|
114
|
+
## Use Cases
|
|
115
|
+
|
|
116
|
+
- **API design** - Design and validate OpenAPI specifications
|
|
117
|
+
- **Documentation** - Generate beautiful API documentation
|
|
118
|
+
- **Quality assurance** - Lint APIs for best practices
|
|
119
|
+
- **Code generation** - Validate specs before code generation
|
|
120
|
+
- **CI/CD** - Automated API validation in pipelines
|
|
121
|
+
|
|
122
|
+
**Integrates well with:**
|
|
123
|
+
|
|
124
|
+
- `nodejs` - Node.js runtime (suggested)
|
|
125
|
+
- Any REST API framework (Express, FastAPI, ASP.NET Core, etc.)
|
|
126
|
+
- `docker-in-docker` or `docker-sock` - For containerized API testing
|
|
127
|
+
|
|
128
|
+
## OpenAPI Specification Basics
|
|
129
|
+
|
|
130
|
+
### Minimal Example
|
|
131
|
+
|
|
132
|
+
```yaml
|
|
133
|
+
openapi: 3.0.0
|
|
134
|
+
info:
|
|
135
|
+
title: My API
|
|
136
|
+
version: 1.0.0
|
|
137
|
+
description: API description
|
|
138
|
+
|
|
139
|
+
servers:
|
|
140
|
+
- url: http://localhost:3000
|
|
141
|
+
description: Development server
|
|
142
|
+
|
|
143
|
+
paths:
|
|
144
|
+
/users:
|
|
145
|
+
get:
|
|
146
|
+
summary: Get all users
|
|
147
|
+
operationId: getUsers
|
|
148
|
+
tags:
|
|
149
|
+
- users
|
|
150
|
+
responses:
|
|
151
|
+
'200':
|
|
152
|
+
description: Successful response
|
|
153
|
+
content:
|
|
154
|
+
application/json:
|
|
155
|
+
schema:
|
|
156
|
+
type: array
|
|
157
|
+
items:
|
|
158
|
+
$ref: '#/components/schemas/User'
|
|
159
|
+
|
|
160
|
+
components:
|
|
161
|
+
schemas:
|
|
162
|
+
User:
|
|
163
|
+
type: object
|
|
164
|
+
required:
|
|
165
|
+
- id
|
|
166
|
+
- name
|
|
167
|
+
properties:
|
|
168
|
+
id:
|
|
169
|
+
type: integer
|
|
170
|
+
name:
|
|
171
|
+
type: string
|
|
172
|
+
email:
|
|
173
|
+
type: string
|
|
174
|
+
format: email
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
## Workflow
|
|
178
|
+
|
|
179
|
+
### Development Workflow
|
|
180
|
+
|
|
181
|
+
1. **Design**: Create OpenAPI spec (YAML or JSON)
|
|
182
|
+
2. **Validate**: `swagger-cli validate openapi.yaml`
|
|
183
|
+
3. **Lint**: `spectral lint openapi.yaml`
|
|
184
|
+
4. **Preview**: `redocly preview-docs openapi.yaml`
|
|
185
|
+
5. **Iterate**: Fix issues and repeat
|
|
186
|
+
|
|
187
|
+
### CI/CD Integration
|
|
188
|
+
|
|
189
|
+
```bash
|
|
190
|
+
# In CI pipeline
|
|
191
|
+
swagger-cli validate openapi.yaml
|
|
192
|
+
spectral lint openapi.yaml --fail-severity warn
|
|
193
|
+
redocly lint openapi.yaml
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
## Troubleshooting
|
|
197
|
+
|
|
198
|
+
### swagger-cli Not Found
|
|
199
|
+
|
|
200
|
+
Ensure Node.js and npm are installed:
|
|
201
|
+
|
|
202
|
+
```bash
|
|
203
|
+
node --version
|
|
204
|
+
npm --version
|
|
205
|
+
```
|
|
206
|
+
|
|
207
|
+
Reinstall if needed:
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
npm install -g @apidevtools/swagger-cli
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
### Validation Errors
|
|
214
|
+
|
|
215
|
+
Common OpenAPI errors:
|
|
216
|
+
|
|
217
|
+
- **Missing required fields**: Add `info`, `paths`, `openapi` version
|
|
218
|
+
- **Invalid references**: Ensure `$ref` paths are correct
|
|
219
|
+
- **Schema errors**: Validate against OpenAPI 3.0/3.1 schema
|
|
220
|
+
|
|
221
|
+
### Spectral Errors
|
|
222
|
+
|
|
223
|
+
```bash
|
|
224
|
+
# Run with debugging
|
|
225
|
+
spectral lint openapi.yaml --verbose
|
|
226
|
+
|
|
227
|
+
# Ignore specific rules
|
|
228
|
+
spectral lint openapi.yaml --ignore-unknown-format
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
## References
|
|
232
|
+
|
|
233
|
+
- [OpenAPI Specification](https://spec.openapis.org/oas/latest.html)
|
|
234
|
+
- [Swagger CLI Documentation](https://github.com/APIDevTools/swagger-cli)
|
|
235
|
+
- [Spectral Documentation](https://stoplight.io/open-source/spectral)
|
|
236
|
+
- [Redocly CLI Documentation](https://redocly.com/docs/cli/)
|
|
237
|
+
- [OpenAPI Examples](https://github.com/OAI/OpenAPI-Specification/tree/main/examples)
|
|
238
|
+
|
|
239
|
+
**Related Overlays:**
|
|
240
|
+
|
|
241
|
+
- `nodejs` - Node.js runtime (suggested)
|
|
242
|
+
- `python` - For OpenAPI code generation with frameworks
|
|
243
|
+
- `dotnet` - For ASP.NET Core OpenAPI integration
|
|
@@ -0,0 +1,10 @@
|
|
|
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
|
+
"postCreateCommand": "bash .devcontainer/scripts/setup-openapi-tools.sh"
|
|
10
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
id: openapi-tools
|
|
2
|
+
name: OpenAPI Tools
|
|
3
|
+
description: OpenAPI/Swagger tooling for API development and documentation
|
|
4
|
+
category: dev
|
|
5
|
+
supports: []
|
|
6
|
+
requires: []
|
|
7
|
+
suggests:
|
|
8
|
+
- nodejs
|
|
9
|
+
conflicts: []
|
|
10
|
+
tags:
|
|
11
|
+
- dev
|
|
12
|
+
- openapi
|
|
13
|
+
- swagger
|
|
14
|
+
- api
|
|
15
|
+
- documentation
|
|
16
|
+
ports: []
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Setup script for OpenAPI Tools
|
|
3
|
+
|
|
4
|
+
set -e
|
|
5
|
+
|
|
6
|
+
echo "🔧 Setting up OpenAPI Tools..."
|
|
7
|
+
|
|
8
|
+
# Install OpenAPI tools globally via npm
|
|
9
|
+
echo "📦 Installing OpenAPI tools..."
|
|
10
|
+
|
|
11
|
+
# Install swagger-cli (OpenAPI validation)
|
|
12
|
+
npm install -g @apidevtools/swagger-cli || echo "⚠️ swagger-cli already installed or failed"
|
|
13
|
+
|
|
14
|
+
# Install spectral (OpenAPI linting)
|
|
15
|
+
npm install -g @stoplight/spectral-cli || echo "⚠️ spectral already installed or failed"
|
|
16
|
+
|
|
17
|
+
# Install redocly CLI (documentation and bundling)
|
|
18
|
+
npm install -g @redocly/cli || echo "⚠️ redocly already installed or failed"
|
|
19
|
+
|
|
20
|
+
# Verify installations
|
|
21
|
+
echo ""
|
|
22
|
+
echo "✅ OpenAPI tools setup complete"
|
|
23
|
+
echo ""
|
|
24
|
+
echo "Installed tools:"
|
|
25
|
+
|
|
26
|
+
if command -v swagger-cli &> /dev/null; then
|
|
27
|
+
echo " ✓ swagger-cli (OpenAPI validation)"
|
|
28
|
+
swagger-cli --version
|
|
29
|
+
fi
|
|
30
|
+
|
|
31
|
+
if command -v spectral &> /dev/null; then
|
|
32
|
+
echo " ✓ spectral (OpenAPI linting)"
|
|
33
|
+
spectral --version
|
|
34
|
+
fi
|
|
35
|
+
|
|
36
|
+
if command -v redocly &> /dev/null; then
|
|
37
|
+
echo " ✓ redocly (documentation and bundling)"
|
|
38
|
+
redocly --version
|
|
39
|
+
fi
|
|
40
|
+
|
|
41
|
+
echo ""
|
|
42
|
+
echo "ℹ️ Usage examples:"
|
|
43
|
+
echo " swagger-cli validate openapi.yaml"
|
|
44
|
+
echo " spectral lint openapi.yaml"
|
|
45
|
+
echo " redocly lint openapi.yaml"
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
#!/bin/bash
|
|
2
|
+
# Verification script for OpenAPI Tools overlay
|
|
3
|
+
# Confirms OpenAPI tools are installed
|
|
4
|
+
|
|
5
|
+
set -e
|
|
6
|
+
|
|
7
|
+
echo "🔍 Verifying OpenAPI Tools overlay..."
|
|
8
|
+
echo ""
|
|
9
|
+
|
|
10
|
+
ALL_CHECKS_PASSED=true
|
|
11
|
+
|
|
12
|
+
# Check swagger-cli
|
|
13
|
+
echo "1️⃣ Checking swagger-cli..."
|
|
14
|
+
if command -v swagger-cli &> /dev/null; then
|
|
15
|
+
swagger-cli --version
|
|
16
|
+
echo " ✅ swagger-cli is installed"
|
|
17
|
+
else
|
|
18
|
+
echo " ❌ swagger-cli is not installed"
|
|
19
|
+
ALL_CHECKS_PASSED=false
|
|
20
|
+
fi
|
|
21
|
+
|
|
22
|
+
# Check spectral
|
|
23
|
+
echo ""
|
|
24
|
+
echo "2️⃣ Checking spectral..."
|
|
25
|
+
if command -v spectral &> /dev/null; then
|
|
26
|
+
spectral --version
|
|
27
|
+
echo " ✅ spectral is installed"
|
|
28
|
+
else
|
|
29
|
+
echo " ❌ spectral is not installed"
|
|
30
|
+
ALL_CHECKS_PASSED=false
|
|
31
|
+
fi
|
|
32
|
+
|
|
33
|
+
# Check redocly
|
|
34
|
+
echo ""
|
|
35
|
+
echo "3️⃣ Checking redocly..."
|
|
36
|
+
if command -v redocly &> /dev/null; then
|
|
37
|
+
redocly --version
|
|
38
|
+
echo " ✅ redocly is installed"
|
|
39
|
+
else
|
|
40
|
+
echo " ❌ redocly is not installed"
|
|
41
|
+
ALL_CHECKS_PASSED=false
|
|
42
|
+
fi
|
|
43
|
+
|
|
44
|
+
echo ""
|
|
45
|
+
if [ "$ALL_CHECKS_PASSED" = true ]; then
|
|
46
|
+
echo "✅ OpenAPI Tools overlay verification complete"
|
|
47
|
+
exit 0
|
|
48
|
+
else
|
|
49
|
+
echo "⚠️ Some OpenAPI tools are missing"
|
|
50
|
+
exit 1
|
|
51
|
+
fi
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Example: OpenTelemetry Collector with shared config
|
|
2
|
+
# This demonstrates the imports feature
|
|
3
|
+
|
|
4
|
+
id: otel-collector
|
|
5
|
+
name: OpenTelemetry Collector
|
|
6
|
+
description: Telemetry data collection and export
|
|
7
|
+
category: observability
|
|
8
|
+
supports:
|
|
9
|
+
- compose
|
|
10
|
+
requires: []
|
|
11
|
+
suggests:
|
|
12
|
+
- jaeger
|
|
13
|
+
- prometheus
|
|
14
|
+
conflicts: []
|
|
15
|
+
tags:
|
|
16
|
+
- observability
|
|
17
|
+
- telemetry
|
|
18
|
+
- opentelemetry
|
|
19
|
+
ports:
|
|
20
|
+
- 4317
|
|
21
|
+
- 4318
|
|
22
|
+
- 8888
|
|
23
|
+
- 8889
|
|
24
|
+
order: 2
|
|
25
|
+
imports:
|
|
26
|
+
- .shared/otel/instrumentation.env
|
|
@@ -12,4 +12,9 @@ tags:
|
|
|
12
12
|
- sql
|
|
13
13
|
- postgres
|
|
14
14
|
ports:
|
|
15
|
-
- 5432
|
|
15
|
+
- port: 5432
|
|
16
|
+
service: postgres
|
|
17
|
+
protocol: tcp
|
|
18
|
+
description: PostgreSQL database connection
|
|
19
|
+
onAutoForward: notify
|
|
20
|
+
connectionStringTemplate: 'postgresql://{postgres_user}:{postgres_password}@{host}:{port}/{postgres_db}'
|
|
@@ -5,67 +5,84 @@ Adds Python 3.12 with development tools, linting, and formatting.
|
|
|
5
5
|
## Features
|
|
6
6
|
|
|
7
7
|
- **Python 3.12** with pip, setuptools, and wheel
|
|
8
|
+
- **Virtual environment** (`.venv`) created automatically in the workspace root
|
|
8
9
|
- **VS Code Extensions:**
|
|
9
10
|
- Python (ms-python.python)
|
|
10
11
|
- Pylance (ms-python.vscode-pylance)
|
|
11
12
|
- Black Formatter (ms-python.black-formatter)
|
|
12
13
|
- Ruff (charliermarsh.ruff)
|
|
13
|
-
- **Automatic dependency installation** from:
|
|
14
|
-
- `requirements.txt`
|
|
15
|
-
- `requirements-dev.txt`
|
|
14
|
+
- **Automatic dependency installation** into `.venv` from:
|
|
15
|
+
- `requirements.txt` (project production dependencies)
|
|
16
|
+
- `requirements-dev.txt` (project development dependencies)
|
|
16
17
|
- `pyproject.toml` (editable install)
|
|
17
18
|
- `setup.py` (legacy support)
|
|
18
19
|
- **Pre-configured settings:**
|
|
20
|
+
- VS Code interpreter pointed at `.venv/bin/python`
|
|
19
21
|
- Black as default formatter
|
|
20
22
|
- Format on save enabled
|
|
21
23
|
- Auto-organize imports
|
|
22
|
-
- PYTHONPATH set
|
|
24
|
+
- `PYTHONPATH`, `VIRTUAL_ENV`, and `PATH` set for the venv
|
|
25
|
+
- **`.gitignore`** — `.venv/`, `__pycache__/`, `*.pyc`, `.pytest_cache/`, and build artefacts added to the project root `.gitignore` automatically
|
|
23
26
|
|
|
24
|
-
## Virtual Environment
|
|
27
|
+
## Virtual Environment
|
|
25
28
|
|
|
26
|
-
This overlay
|
|
29
|
+
This overlay automatically creates a `.venv` virtual environment in the workspace root on container creation and installs all dependencies into it.
|
|
27
30
|
|
|
28
|
-
### Why
|
|
31
|
+
### Why venv?
|
|
29
32
|
|
|
30
|
-
1. **
|
|
31
|
-
2. **
|
|
32
|
-
3. **
|
|
33
|
-
4. **
|
|
33
|
+
1. **Clean isolation** — Dependencies are scoped to the project, not the system Python
|
|
34
|
+
2. **Production parity** — Matches how the app runs in CI/CD and production
|
|
35
|
+
3. **Tool compatibility** — Works seamlessly with pytest, mypy, ruff, and other dev tools
|
|
36
|
+
4. **VS Code integration** — The Python extension is pre-configured to use `.venv/bin/python`
|
|
34
37
|
|
|
35
|
-
###
|
|
38
|
+
### How It Works
|
|
36
39
|
|
|
37
|
-
|
|
40
|
+
On container creation, the setup script:
|
|
38
41
|
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
+
1. Creates `.venv` at `${workspaceFolder}/.venv` using `python -m venv`
|
|
43
|
+
2. Upgrades `pip`, `setuptools`, and `wheel` inside the venv
|
|
44
|
+
3. Installs overlay default packages from `.devcontainer/requirements-overlay-python.txt`
|
|
45
|
+
4. Installs project dependencies from `requirements.txt` (if present)
|
|
46
|
+
5. Installs dev dependencies from `requirements-dev.txt` (if present)
|
|
47
|
+
6. Installs project in editable mode if `pyproject.toml` or `setup.py` is present
|
|
42
48
|
|
|
43
|
-
|
|
49
|
+
### Activating the Virtual Environment
|
|
50
|
+
|
|
51
|
+
The `.venv/bin` directory is prepended to `PATH` automatically in the devcontainer, so tools like `python`, `pip`, `pytest`, and `ruff` resolve to the venv by default. You can also activate explicitly:
|
|
44
52
|
|
|
45
53
|
```bash
|
|
46
|
-
python -m venv .venv
|
|
47
54
|
source .venv/bin/activate
|
|
48
|
-
pip install -r requirements.txt
|
|
49
55
|
```
|
|
50
56
|
|
|
51
|
-
|
|
57
|
+
### Gitignore
|
|
52
58
|
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
59
|
+
When the Python overlay is selected, the composer automatically adds Python-specific entries to the **project root** `.gitignore` (creating the file if it doesn’t exist, and never duplicating existing entries):
|
|
60
|
+
|
|
61
|
+
```gitignore
|
|
62
|
+
# python (container-superposition)
|
|
63
|
+
.venv/
|
|
64
|
+
__pycache__/
|
|
65
|
+
*.pyc
|
|
66
|
+
*.pyo
|
|
67
|
+
.pytest_cache/
|
|
68
|
+
*.egg-info/
|
|
69
|
+
dist/
|
|
70
|
+
build/
|
|
57
71
|
```
|
|
58
72
|
|
|
73
|
+
This happens at generation time — no container startup required.
|
|
74
|
+
|
|
59
75
|
## Automatic Setup
|
|
60
76
|
|
|
61
77
|
The overlay automatically runs on container creation:
|
|
62
78
|
|
|
63
|
-
1. ✅
|
|
64
|
-
2. ✅
|
|
65
|
-
3. ✅
|
|
66
|
-
4. ✅ Checks for `
|
|
67
|
-
5. ✅ Checks for `
|
|
68
|
-
6. ✅
|
|
79
|
+
1. ✅ Creates `.venv` virtual environment in the workspace root
|
|
80
|
+
2. ✅ Upgrades pip, setuptools, and wheel inside the venv
|
|
81
|
+
3. ✅ Installs overlay packages from `.devcontainer/requirements-overlay-python.txt`
|
|
82
|
+
4. ✅ Checks for `requirements.txt` → installs into venv
|
|
83
|
+
5. ✅ Checks for `requirements-dev.txt` → installs dev dependencies into venv
|
|
84
|
+
6. ✅ Checks for `pyproject.toml` → installs project in editable mode
|
|
85
|
+
7. ✅ Checks for `setup.py` → installs legacy projects in editable mode
|
|
69
86
|
|
|
70
87
|
## Customizing Overlay Packages
|
|
71
88
|
|
|
@@ -176,7 +193,7 @@ mytool = "mytool.cli:main"
|
|
|
176
193
|
1. **Pin versions** in requirements.txt for reproducibility
|
|
177
194
|
2. **Separate dev dependencies** in requirements-dev.txt
|
|
178
195
|
3. **Use pyproject.toml** for modern Python projects
|
|
179
|
-
4. **Add `.gitignore`**
|
|
196
|
+
4. **Add `.gitignore`** — handled automatically by the overlay
|
|
180
197
|
|
|
181
198
|
## Troubleshooting
|
|
182
199
|
|
|
@@ -200,17 +217,16 @@ Update `devcontainer.patch.json`:
|
|
|
200
217
|
}
|
|
201
218
|
```
|
|
202
219
|
|
|
203
|
-
###
|
|
220
|
+
### Customizing the Interpreter Path
|
|
204
221
|
|
|
205
|
-
|
|
222
|
+
The overlay pre-configures VS Code to use `${workspaceFolder}/.venv/bin/python`. If your venv is elsewhere, update `python.defaultInterpreterPath` in your workspace settings or `.devcontainer/custom/devcontainer.patch.json`:
|
|
206
223
|
|
|
207
224
|
```json
|
|
208
225
|
{
|
|
209
|
-
"postCreateCommand": "python -m venv .venv && .venv/bin/pip install -r requirements.txt",
|
|
210
226
|
"customizations": {
|
|
211
227
|
"vscode": {
|
|
212
228
|
"settings": {
|
|
213
|
-
"python.defaultInterpreterPath": "${workspaceFolder}
|
|
229
|
+
"python.defaultInterpreterPath": "${workspaceFolder}/my-custom-venv/bin/python"
|
|
214
230
|
}
|
|
215
231
|
}
|
|
216
232
|
}
|
|
@@ -26,16 +26,19 @@
|
|
|
26
26
|
"source.organizeImports": "explicit"
|
|
27
27
|
}
|
|
28
28
|
},
|
|
29
|
-
"python.defaultInterpreterPath": "/
|
|
29
|
+
"python.defaultInterpreterPath": "${workspaceFolder}/.venv/bin/python",
|
|
30
|
+
"python.terminal.activateEnvironment": true,
|
|
30
31
|
"files.exclude": {
|
|
31
32
|
"**/__pycache__": true,
|
|
32
|
-
"**/.pytest_cache": true
|
|
33
|
+
"**/.pytest_cache": true,
|
|
34
|
+
"**/.venv": true
|
|
33
35
|
}
|
|
34
36
|
}
|
|
35
37
|
}
|
|
36
38
|
},
|
|
37
39
|
"remoteEnv": {
|
|
38
|
-
"PATH": "${containerEnv:HOME}/.local/bin:${containerEnv:PATH}",
|
|
39
|
-
"PYTHONPATH": "${containerWorkspaceFolder}"
|
|
40
|
+
"PATH": "${containerWorkspaceFolder}/.venv/bin:${containerEnv:HOME}/.local/bin:${containerEnv:PATH}",
|
|
41
|
+
"PYTHONPATH": "${containerWorkspaceFolder}",
|
|
42
|
+
"VIRTUAL_ENV": "${containerWorkspaceFolder}/.venv"
|
|
40
43
|
}
|
|
41
44
|
}
|