@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.
@@ -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": "Standard manifest for Pulumix federated services",
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
- "observability": {
25
+ "build": {
137
26
  "type": "object",
138
- "description": "Observability configuration",
27
+ "description": "Docker build configuration",
139
28
  "properties": {
140
- "health": {
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": "Command to run for local development (e.g., 'npm run dev', 'pnpm dev')",
269
- "minLength": 1
31
+ "description": "Build context path ('root' for project root, '.' for service directory, or relative path)",
32
+ "default": "."
270
33
  },
271
- "port": {
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": "Working directory relative to service path (e.g., 'src')"
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
  },