@pulumix/core 0.12.0 → 0.13.0
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/dist/index.d.ts +0 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/index.js.map +1 -1
- package/dist/orchestrator/index.d.ts.map +1 -1
- package/dist/orchestrator/index.js +34 -79
- package/dist/orchestrator/index.js.map +1 -1
- package/dist/types/manifest.d.ts +0 -74
- package/dist/types/manifest.d.ts.map +1 -1
- package/dist/types/service.d.ts +1 -5
- package/dist/types/service.d.ts.map +1 -1
- package/dist/validation/create-validator.d.ts +8 -0
- package/dist/validation/create-validator.d.ts.map +1 -0
- package/dist/validation/create-validator.js +122 -0
- package/dist/validation/create-validator.js.map +1 -0
- package/dist/validation/manifest.d.ts +4 -4
- package/dist/validation/manifest.d.ts.map +1 -1
- package/dist/validation/manifest.js +5 -111
- package/dist/validation/manifest.js.map +1 -1
- package/dist/validation/project.d.ts +4 -4
- package/dist/validation/project.d.ts.map +1 -1
- package/dist/validation/project.js +5 -102
- package/dist/validation/project.js.map +1 -1
- package/package.json +1 -1
- package/src/schemas/service-manifest.schema.json +9 -282
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
3
|
"$id": "https://pulumix.dev/schemas/service-manifest.json",
|
|
4
4
|
"title": "Pulumix Service Manifest",
|
|
5
|
-
"description": "
|
|
5
|
+
"description": "Minimal manifest for Pulumix services",
|
|
6
6
|
"type": "object",
|
|
7
7
|
"required": ["metadata", "stacks"],
|
|
8
8
|
"properties": {
|
|
@@ -19,295 +19,22 @@
|
|
|
19
19
|
"type": "string",
|
|
20
20
|
"description": "Service version (semver)",
|
|
21
21
|
"pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$"
|
|
22
|
-
},
|
|
23
|
-
"description": {
|
|
24
|
-
"type": "string",
|
|
25
|
-
"description": "Brief service description"
|
|
26
|
-
},
|
|
27
|
-
"team": {
|
|
28
|
-
"type": "string",
|
|
29
|
-
"description": "Owning team name"
|
|
30
|
-
},
|
|
31
|
-
"owner": {
|
|
32
|
-
"type": "string",
|
|
33
|
-
"description": "Service owner email",
|
|
34
|
-
"format": "email"
|
|
35
|
-
},
|
|
36
|
-
"repository": {
|
|
37
|
-
"type": "string",
|
|
38
|
-
"description": "Source code repository URL",
|
|
39
|
-
"format": "uri"
|
|
40
|
-
},
|
|
41
|
-
"documentation": {
|
|
42
|
-
"type": "string",
|
|
43
|
-
"description": "Documentation URL",
|
|
44
|
-
"format": "uri"
|
|
45
|
-
},
|
|
46
|
-
"tags": {
|
|
47
|
-
"type": "object",
|
|
48
|
-
"description": "Custom tags for categorization",
|
|
49
|
-
"additionalProperties": {
|
|
50
|
-
"type": "string"
|
|
51
|
-
}
|
|
52
|
-
},
|
|
53
|
-
"sla": {
|
|
54
|
-
"type": "object",
|
|
55
|
-
"description": "Service level agreement",
|
|
56
|
-
"properties": {
|
|
57
|
-
"availability": {
|
|
58
|
-
"type": "string",
|
|
59
|
-
"description": "Target availability (e.g., '99.9%')",
|
|
60
|
-
"pattern": "^\\d+(\\.\\d+)?%$"
|
|
61
|
-
},
|
|
62
|
-
"responseTime": {
|
|
63
|
-
"type": "string",
|
|
64
|
-
"description": "Target response time (e.g., '200ms')"
|
|
65
|
-
},
|
|
66
|
-
"errorRate": {
|
|
67
|
-
"type": "string",
|
|
68
|
-
"description": "Maximum error rate (e.g., '0.1%')"
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
},
|
|
72
|
-
"support": {
|
|
73
|
-
"type": "object",
|
|
74
|
-
"description": "Support contact information",
|
|
75
|
-
"properties": {
|
|
76
|
-
"email": {
|
|
77
|
-
"type": "string",
|
|
78
|
-
"format": "email"
|
|
79
|
-
},
|
|
80
|
-
"slack": {
|
|
81
|
-
"type": "string",
|
|
82
|
-
"description": "Slack channel (e.g., '#platform-support')"
|
|
83
|
-
},
|
|
84
|
-
"pagerduty": {
|
|
85
|
-
"type": "string",
|
|
86
|
-
"description": "PagerDuty service name"
|
|
87
|
-
},
|
|
88
|
-
"oncall": {
|
|
89
|
-
"type": "string",
|
|
90
|
-
"description": "On-call rotation URL"
|
|
91
|
-
}
|
|
92
|
-
}
|
|
93
|
-
},
|
|
94
|
-
"contract": {
|
|
95
|
-
"type": "object",
|
|
96
|
-
"description": "Output contract versioning",
|
|
97
|
-
"required": ["version"],
|
|
98
|
-
"properties": {
|
|
99
|
-
"version": {
|
|
100
|
-
"type": "string",
|
|
101
|
-
"description": "Contract version (semver)",
|
|
102
|
-
"pattern": "^(0|[1-9]\\d*)\\.(0|[1-9]\\d*)\\.(0|[1-9]\\d*)(?:-((?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\\.(?:0|[1-9]\\d*|\\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\\+([0-9a-zA-Z-]+(?:\\.[0-9a-zA-Z-]+)*))?$"
|
|
103
|
-
},
|
|
104
|
-
"breaking": {
|
|
105
|
-
"type": "array",
|
|
106
|
-
"description": "Breaking changes in this version",
|
|
107
|
-
"items": {
|
|
108
|
-
"type": "string"
|
|
109
|
-
}
|
|
110
|
-
},
|
|
111
|
-
"deprecated": {
|
|
112
|
-
"type": "array",
|
|
113
|
-
"description": "Deprecated output fields",
|
|
114
|
-
"items": {
|
|
115
|
-
"type": "object",
|
|
116
|
-
"properties": {
|
|
117
|
-
"field": {
|
|
118
|
-
"type": "string"
|
|
119
|
-
},
|
|
120
|
-
"since": {
|
|
121
|
-
"type": "string"
|
|
122
|
-
},
|
|
123
|
-
"removeIn": {
|
|
124
|
-
"type": "string"
|
|
125
|
-
},
|
|
126
|
-
"replacement": {
|
|
127
|
-
"type": "string"
|
|
128
|
-
}
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
}
|
|
133
22
|
}
|
|
134
23
|
}
|
|
135
24
|
},
|
|
136
|
-
"
|
|
25
|
+
"build": {
|
|
137
26
|
"type": "object",
|
|
138
|
-
"description": "
|
|
27
|
+
"description": "Docker build configuration",
|
|
139
28
|
"properties": {
|
|
140
|
-
"
|
|
141
|
-
"type": "object",
|
|
142
|
-
"properties": {
|
|
143
|
-
"endpoint": {
|
|
144
|
-
"type": "string",
|
|
145
|
-
"default": "/health"
|
|
146
|
-
},
|
|
147
|
-
"port": {
|
|
148
|
-
"type": "integer",
|
|
149
|
-
"minimum": 1,
|
|
150
|
-
"maximum": 65535
|
|
151
|
-
},
|
|
152
|
-
"scheme": {
|
|
153
|
-
"type": "string",
|
|
154
|
-
"enum": ["http", "https"],
|
|
155
|
-
"default": "http"
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
},
|
|
159
|
-
"metrics": {
|
|
160
|
-
"type": "object",
|
|
161
|
-
"properties": {
|
|
162
|
-
"endpoint": {
|
|
163
|
-
"type": "string",
|
|
164
|
-
"default": "/metrics"
|
|
165
|
-
},
|
|
166
|
-
"port": {
|
|
167
|
-
"type": "integer",
|
|
168
|
-
"minimum": 1,
|
|
169
|
-
"maximum": 65535
|
|
170
|
-
},
|
|
171
|
-
"format": {
|
|
172
|
-
"type": "string",
|
|
173
|
-
"enum": ["prometheus", "opentelemetry"],
|
|
174
|
-
"default": "prometheus"
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
},
|
|
178
|
-
"logs": {
|
|
179
|
-
"type": "object",
|
|
180
|
-
"properties": {
|
|
181
|
-
"format": {
|
|
182
|
-
"type": "string",
|
|
183
|
-
"enum": ["json", "text"],
|
|
184
|
-
"default": "json"
|
|
185
|
-
},
|
|
186
|
-
"level": {
|
|
187
|
-
"type": "string",
|
|
188
|
-
"enum": ["debug", "info", "warn", "error"],
|
|
189
|
-
"default": "info"
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
},
|
|
195
|
-
"security": {
|
|
196
|
-
"type": "object",
|
|
197
|
-
"description": "Security policies",
|
|
198
|
-
"properties": {
|
|
199
|
-
"networkPolicy": {
|
|
200
|
-
"type": "object",
|
|
201
|
-
"properties": {
|
|
202
|
-
"enabled": {
|
|
203
|
-
"type": "boolean",
|
|
204
|
-
"default": true
|
|
205
|
-
},
|
|
206
|
-
"ingress": {
|
|
207
|
-
"type": "array",
|
|
208
|
-
"items": {
|
|
209
|
-
"type": "object",
|
|
210
|
-
"properties": {
|
|
211
|
-
"from": {
|
|
212
|
-
"type": "array"
|
|
213
|
-
},
|
|
214
|
-
"ports": {
|
|
215
|
-
"type": "array",
|
|
216
|
-
"items": {
|
|
217
|
-
"type": "integer"
|
|
218
|
-
}
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
}
|
|
222
|
-
},
|
|
223
|
-
"egress": {
|
|
224
|
-
"type": "array",
|
|
225
|
-
"items": {
|
|
226
|
-
"type": "object"
|
|
227
|
-
}
|
|
228
|
-
}
|
|
229
|
-
}
|
|
230
|
-
},
|
|
231
|
-
"accessControl": {
|
|
232
|
-
"type": "object",
|
|
233
|
-
"description": "Access control configuration",
|
|
234
|
-
"properties": {
|
|
235
|
-
"identity": {
|
|
236
|
-
"type": "string",
|
|
237
|
-
"description": "Service identity (e.g., service account, IAM role)"
|
|
238
|
-
},
|
|
239
|
-
"roles": {
|
|
240
|
-
"type": "array",
|
|
241
|
-
"description": "Required roles or permissions",
|
|
242
|
-
"items": {
|
|
243
|
-
"type": "string"
|
|
244
|
-
}
|
|
245
|
-
}
|
|
246
|
-
}
|
|
247
|
-
},
|
|
248
|
-
"secrets": {
|
|
249
|
-
"type": "object",
|
|
250
|
-
"properties": {
|
|
251
|
-
"provider": {
|
|
252
|
-
"type": "string",
|
|
253
|
-
"enum": ["kubernetes", "vault", "aws-secrets-manager", "azure-keyvault"]
|
|
254
|
-
},
|
|
255
|
-
"path": {
|
|
256
|
-
"type": "string"
|
|
257
|
-
}
|
|
258
|
-
}
|
|
259
|
-
}
|
|
260
|
-
}
|
|
261
|
-
},
|
|
262
|
-
"dev": {
|
|
263
|
-
"type": "object",
|
|
264
|
-
"description": "Local development configuration for running the service with hot reload",
|
|
265
|
-
"properties": {
|
|
266
|
-
"command": {
|
|
29
|
+
"context": {
|
|
267
30
|
"type": "string",
|
|
268
|
-
"description": "
|
|
269
|
-
"
|
|
31
|
+
"description": "Build context path ('root' for project root, '.' for service directory, or relative path)",
|
|
32
|
+
"default": "."
|
|
270
33
|
},
|
|
271
|
-
"
|
|
272
|
-
"type": "integer",
|
|
273
|
-
"description": "Port the local dev server listens on",
|
|
274
|
-
"minimum": 1,
|
|
275
|
-
"maximum": 65535,
|
|
276
|
-
"default": 3000
|
|
277
|
-
},
|
|
278
|
-
"cwd": {
|
|
34
|
+
"dockerfile": {
|
|
279
35
|
"type": "string",
|
|
280
|
-
"description": "
|
|
281
|
-
|
|
282
|
-
"env": {
|
|
283
|
-
"type": "object",
|
|
284
|
-
"description": "Additional environment variables for dev mode",
|
|
285
|
-
"additionalProperties": {
|
|
286
|
-
"type": "string"
|
|
287
|
-
}
|
|
288
|
-
},
|
|
289
|
-
"expose": {
|
|
290
|
-
"type": "object",
|
|
291
|
-
"description": "How this service should be exposed when running in cluster (for port-forwarding to local dev)",
|
|
292
|
-
"properties": {
|
|
293
|
-
"port": {
|
|
294
|
-
"type": "integer",
|
|
295
|
-
"description": "Port to forward (e.g., 5432 for postgres, 80 for HTTP)",
|
|
296
|
-
"minimum": 1,
|
|
297
|
-
"maximum": 65535
|
|
298
|
-
},
|
|
299
|
-
"protocol": {
|
|
300
|
-
"type": "string",
|
|
301
|
-
"description": "URL protocol for connection string (e.g., 'postgres', 'redis', 'http')",
|
|
302
|
-
"enum": ["http", "https", "postgres", "mysql", "redis", "mongodb", "amqp", "kafka"]
|
|
303
|
-
},
|
|
304
|
-
"envVar": {
|
|
305
|
-
"type": "string",
|
|
306
|
-
"description": "Environment variable name for consumers (e.g., 'DATABASE_URL')",
|
|
307
|
-
"pattern": "^[A-Z][A-Z0-9_]*$"
|
|
308
|
-
}
|
|
309
|
-
},
|
|
310
|
-
"required": ["port"]
|
|
36
|
+
"description": "Path to Dockerfile relative to build context",
|
|
37
|
+
"default": "Dockerfile"
|
|
311
38
|
}
|
|
312
39
|
}
|
|
313
40
|
},
|