devlanes 0.0.1 → 0.2.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/LICENSE +201 -21
- package/README.md +44 -2
- package/bin/devlanes.js +44 -0
- package/package.json +27 -8
- package/schema.json +3172 -0
- package/user-schema.json +1203 -0
- package/index.js +0 -1
package/user-schema.json
ADDED
|
@@ -0,0 +1,1203 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$comment": "Generated by bins/devlanes/build.rs from crates/config; do not edit.",
|
|
3
|
+
"$defs": {
|
|
4
|
+
"ByteSize": {
|
|
5
|
+
"description": "A byte count with decimal or binary size units.",
|
|
6
|
+
"examples": [
|
|
7
|
+
"5GiB"
|
|
8
|
+
],
|
|
9
|
+
"pattern": "^[0-9]+(B|KB|MB|GB|KiB|MiB|GiB)$",
|
|
10
|
+
"type": "string"
|
|
11
|
+
},
|
|
12
|
+
"CaKind": {
|
|
13
|
+
"description": "Certificate authority used to issue certificates for local project hostnames.",
|
|
14
|
+
"examples": [
|
|
15
|
+
"devlanes",
|
|
16
|
+
"mkcert"
|
|
17
|
+
],
|
|
18
|
+
"oneOf": [
|
|
19
|
+
{
|
|
20
|
+
"const": "devlanes",
|
|
21
|
+
"description": "Use the CA managed in the devlanes home directory.",
|
|
22
|
+
"examples": [
|
|
23
|
+
"devlanes"
|
|
24
|
+
],
|
|
25
|
+
"type": "string"
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
"const": "mkcert",
|
|
29
|
+
"description": "Reuse the CA in mkcert's CAROOT directory.",
|
|
30
|
+
"examples": [
|
|
31
|
+
"mkcert"
|
|
32
|
+
],
|
|
33
|
+
"type": "string"
|
|
34
|
+
}
|
|
35
|
+
]
|
|
36
|
+
},
|
|
37
|
+
"CloudflareDns": {
|
|
38
|
+
"additionalProperties": false,
|
|
39
|
+
"description": "Cloudflare DNS credentials for the reserved public resolver.",
|
|
40
|
+
"examples": [
|
|
41
|
+
{
|
|
42
|
+
"token": "${{ env.CF_API_TOKEN }}"
|
|
43
|
+
}
|
|
44
|
+
],
|
|
45
|
+
"properties": {
|
|
46
|
+
"token": {
|
|
47
|
+
"$ref": "#/$defs/Templated_string",
|
|
48
|
+
"description": "API token with permission to edit the domain's DNS records; prefer an environment expression.",
|
|
49
|
+
"examples": [
|
|
50
|
+
"${{ env.CF_API_TOKEN }}"
|
|
51
|
+
]
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"required": [
|
|
55
|
+
"token"
|
|
56
|
+
],
|
|
57
|
+
"type": "object"
|
|
58
|
+
},
|
|
59
|
+
"ConfigDuration": {
|
|
60
|
+
"description": "A duration written with `ms`, `s`, `m`, `h`, or `d` units.",
|
|
61
|
+
"examples": [
|
|
62
|
+
"15s",
|
|
63
|
+
"10m"
|
|
64
|
+
],
|
|
65
|
+
"pattern": "^[0-9]+(ms|s|m|h|d)$",
|
|
66
|
+
"type": "string"
|
|
67
|
+
},
|
|
68
|
+
"DnsProvider": {
|
|
69
|
+
"additionalProperties": false,
|
|
70
|
+
"description": "Reserved DNS-01 provider configuration; not supported yet.",
|
|
71
|
+
"examples": [
|
|
72
|
+
{
|
|
73
|
+
"cloudflare": {
|
|
74
|
+
"token": "${{ env.CF_API_TOKEN }}"
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
],
|
|
78
|
+
"properties": {
|
|
79
|
+
"cloudflare": {
|
|
80
|
+
"$ref": "#/$defs/CloudflareDns",
|
|
81
|
+
"description": "Cloudflare DNS API credentials supplied by an environment expression.",
|
|
82
|
+
"examples": [
|
|
83
|
+
{
|
|
84
|
+
"token": "${{ env.CF_API_TOKEN }}"
|
|
85
|
+
}
|
|
86
|
+
]
|
|
87
|
+
}
|
|
88
|
+
},
|
|
89
|
+
"required": [
|
|
90
|
+
"cloudflare"
|
|
91
|
+
],
|
|
92
|
+
"type": "object"
|
|
93
|
+
},
|
|
94
|
+
"HistoryConfig": {
|
|
95
|
+
"additionalProperties": false,
|
|
96
|
+
"description": "Age limits for finished unit/task history and disconnected remote-host records.",
|
|
97
|
+
"examples": [
|
|
98
|
+
{
|
|
99
|
+
"remote_hosts_retention": "90d",
|
|
100
|
+
"retention": "7d"
|
|
101
|
+
}
|
|
102
|
+
],
|
|
103
|
+
"properties": {
|
|
104
|
+
"remote_hosts_retention": {
|
|
105
|
+
"$ref": "#/$defs/ConfigDuration",
|
|
106
|
+
"default": "7776000000ms",
|
|
107
|
+
"description": "Maximum age since a remote host last connected successfully; defaults to 90d. Records without a timestamp are retained.",
|
|
108
|
+
"examples": [
|
|
109
|
+
"90d",
|
|
110
|
+
"180d"
|
|
111
|
+
]
|
|
112
|
+
},
|
|
113
|
+
"retention": {
|
|
114
|
+
"$ref": "#/$defs/ConfigDuration",
|
|
115
|
+
"default": "604800000ms",
|
|
116
|
+
"description": "Maximum age since a unit or task finished; defaults to 7d. Disk pressure may prune it sooner.",
|
|
117
|
+
"examples": [
|
|
118
|
+
"7d",
|
|
119
|
+
"30d"
|
|
120
|
+
]
|
|
121
|
+
}
|
|
122
|
+
},
|
|
123
|
+
"type": "object"
|
|
124
|
+
},
|
|
125
|
+
"HostnamesConfig": {
|
|
126
|
+
"additionalProperties": false,
|
|
127
|
+
"description": "Hostname resolution and optional system hosts-file entries.",
|
|
128
|
+
"examples": [
|
|
129
|
+
{
|
|
130
|
+
"hosts_file": "auto",
|
|
131
|
+
"resolver": "localhost"
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
"resolver": "resolver",
|
|
135
|
+
"tld": "test"
|
|
136
|
+
}
|
|
137
|
+
],
|
|
138
|
+
"properties": {
|
|
139
|
+
"base_domain": {
|
|
140
|
+
"default": null,
|
|
141
|
+
"description": "Reserved public-resolver base domain; not supported yet.",
|
|
142
|
+
"examples": [
|
|
143
|
+
"dev.example.invalid"
|
|
144
|
+
],
|
|
145
|
+
"type": [
|
|
146
|
+
"string",
|
|
147
|
+
"null"
|
|
148
|
+
]
|
|
149
|
+
},
|
|
150
|
+
"dns_provider": {
|
|
151
|
+
"anyOf": [
|
|
152
|
+
{
|
|
153
|
+
"$ref": "#/$defs/DnsProvider"
|
|
154
|
+
},
|
|
155
|
+
{
|
|
156
|
+
"type": "null"
|
|
157
|
+
}
|
|
158
|
+
],
|
|
159
|
+
"default": null,
|
|
160
|
+
"description": "Reserved DNS-01 provider settings; not supported yet.",
|
|
161
|
+
"examples": [
|
|
162
|
+
{
|
|
163
|
+
"cloudflare": {
|
|
164
|
+
"token": "${{ env.CF_API_TOKEN }}"
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
]
|
|
168
|
+
},
|
|
169
|
+
"hosts_file": {
|
|
170
|
+
"anyOf": [
|
|
171
|
+
{
|
|
172
|
+
"$ref": "#/$defs/HostsFile"
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
"type": "null"
|
|
176
|
+
}
|
|
177
|
+
],
|
|
178
|
+
"default": null,
|
|
179
|
+
"description": "Whether exact hostnames should also be written to the system hosts file.",
|
|
180
|
+
"examples": [
|
|
181
|
+
"auto",
|
|
182
|
+
"never",
|
|
183
|
+
"always"
|
|
184
|
+
]
|
|
185
|
+
},
|
|
186
|
+
"resolver": {
|
|
187
|
+
"$ref": "#/$defs/Resolver",
|
|
188
|
+
"default": "localhost",
|
|
189
|
+
"description": "localhost or resolver in v1; public parses but is not supported yet.",
|
|
190
|
+
"examples": [
|
|
191
|
+
"localhost",
|
|
192
|
+
"hosts_file",
|
|
193
|
+
"resolver",
|
|
194
|
+
"public"
|
|
195
|
+
]
|
|
196
|
+
},
|
|
197
|
+
"tld": {
|
|
198
|
+
"default": null,
|
|
199
|
+
"description": "Custom top-level domain for the embedded DNS strategy.",
|
|
200
|
+
"examples": [
|
|
201
|
+
"test"
|
|
202
|
+
],
|
|
203
|
+
"type": [
|
|
204
|
+
"string",
|
|
205
|
+
"null"
|
|
206
|
+
]
|
|
207
|
+
}
|
|
208
|
+
},
|
|
209
|
+
"type": "object"
|
|
210
|
+
},
|
|
211
|
+
"HostsFile": {
|
|
212
|
+
"description": "Whether project hostnames are also written to the system hosts file.",
|
|
213
|
+
"examples": [
|
|
214
|
+
"auto",
|
|
215
|
+
"never",
|
|
216
|
+
"always"
|
|
217
|
+
],
|
|
218
|
+
"oneOf": [
|
|
219
|
+
{
|
|
220
|
+
"const": "auto",
|
|
221
|
+
"description": "Write entries when the system cannot resolve the configured hostnames.",
|
|
222
|
+
"examples": [
|
|
223
|
+
"auto"
|
|
224
|
+
],
|
|
225
|
+
"type": "string"
|
|
226
|
+
},
|
|
227
|
+
{
|
|
228
|
+
"const": "never",
|
|
229
|
+
"description": "Do not write hosts entries.",
|
|
230
|
+
"examples": [
|
|
231
|
+
"never"
|
|
232
|
+
],
|
|
233
|
+
"type": "string"
|
|
234
|
+
},
|
|
235
|
+
{
|
|
236
|
+
"const": "always",
|
|
237
|
+
"description": "Always write exact hostnames, including for runtimes without localhost subdomain support.",
|
|
238
|
+
"examples": [
|
|
239
|
+
"always"
|
|
240
|
+
],
|
|
241
|
+
"type": "string"
|
|
242
|
+
}
|
|
243
|
+
]
|
|
244
|
+
},
|
|
245
|
+
"LogRetention": {
|
|
246
|
+
"additionalProperties": false,
|
|
247
|
+
"description": "Disk retention bounded by both age and total log size.",
|
|
248
|
+
"examples": [
|
|
249
|
+
{
|
|
250
|
+
"days": 7,
|
|
251
|
+
"max_size": "5GiB"
|
|
252
|
+
}
|
|
253
|
+
],
|
|
254
|
+
"properties": {
|
|
255
|
+
"days": {
|
|
256
|
+
"default": 7,
|
|
257
|
+
"description": "Number of days to retain logs and database log-segment metadata; defaults to 7.",
|
|
258
|
+
"examples": [
|
|
259
|
+
7
|
|
260
|
+
],
|
|
261
|
+
"format": "uint32",
|
|
262
|
+
"minimum": 0,
|
|
263
|
+
"type": "integer"
|
|
264
|
+
},
|
|
265
|
+
"max_size": {
|
|
266
|
+
"$ref": "#/$defs/ByteSize",
|
|
267
|
+
"default": "5368709120B",
|
|
268
|
+
"description": "Maximum total size of retained logs; defaults to 5GiB.",
|
|
269
|
+
"examples": [
|
|
270
|
+
"5GiB"
|
|
271
|
+
]
|
|
272
|
+
}
|
|
273
|
+
},
|
|
274
|
+
"type": "object"
|
|
275
|
+
},
|
|
276
|
+
"LogsConfig": {
|
|
277
|
+
"additionalProperties": false,
|
|
278
|
+
"description": "Retention settings for stored service/task output and database log metadata.",
|
|
279
|
+
"examples": [
|
|
280
|
+
{
|
|
281
|
+
"retention": {
|
|
282
|
+
"days": 7,
|
|
283
|
+
"max_size": "5GiB"
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
],
|
|
287
|
+
"properties": {
|
|
288
|
+
"retention": {
|
|
289
|
+
"$ref": "#/$defs/LogRetention",
|
|
290
|
+
"default": {
|
|
291
|
+
"days": 7,
|
|
292
|
+
"max_size": "5368709120B"
|
|
293
|
+
},
|
|
294
|
+
"description": "Age and total-size bounds for log files; the age limit also bounds database log-segment metadata.",
|
|
295
|
+
"examples": [
|
|
296
|
+
{
|
|
297
|
+
"days": 7,
|
|
298
|
+
"max_size": "5GiB"
|
|
299
|
+
}
|
|
300
|
+
]
|
|
301
|
+
}
|
|
302
|
+
},
|
|
303
|
+
"type": "object"
|
|
304
|
+
},
|
|
305
|
+
"MetricsConfig": {
|
|
306
|
+
"additionalProperties": false,
|
|
307
|
+
"description": "Retention for monitor history used by graphs and service baselines, including database aggregates.",
|
|
308
|
+
"examples": [
|
|
309
|
+
{
|
|
310
|
+
"retention": "7d"
|
|
311
|
+
}
|
|
312
|
+
],
|
|
313
|
+
"properties": {
|
|
314
|
+
"retention": {
|
|
315
|
+
"$ref": "#/$defs/ConfigDuration",
|
|
316
|
+
"default": "604800000ms",
|
|
317
|
+
"description": "Maximum age of persisted monitor samples and database run summaries; defaults to 7d.",
|
|
318
|
+
"examples": [
|
|
319
|
+
"7d",
|
|
320
|
+
"30d"
|
|
321
|
+
]
|
|
322
|
+
}
|
|
323
|
+
},
|
|
324
|
+
"type": "object"
|
|
325
|
+
},
|
|
326
|
+
"Percent": {
|
|
327
|
+
"description": "A percentage with a `%` suffix, such as `75%` or `12.5%`.",
|
|
328
|
+
"examples": [
|
|
329
|
+
"75%",
|
|
330
|
+
"12.5%"
|
|
331
|
+
],
|
|
332
|
+
"pattern": "^\\s*([0-9]+\\.?[0-9]*|\\.[0-9]+)\\s*%\\s*$",
|
|
333
|
+
"type": "string"
|
|
334
|
+
},
|
|
335
|
+
"PortsConfig": {
|
|
336
|
+
"additionalProperties": false,
|
|
337
|
+
"description": "Machine-wide port pool shared by all projects and lanes.",
|
|
338
|
+
"examples": [
|
|
339
|
+
{
|
|
340
|
+
"range": "20000-32767"
|
|
341
|
+
}
|
|
342
|
+
],
|
|
343
|
+
"properties": {
|
|
344
|
+
"range": {
|
|
345
|
+
"default": "20000-32767",
|
|
346
|
+
"description": "Inclusive port range, written start-end; defaults to 20000-32767.",
|
|
347
|
+
"examples": [
|
|
348
|
+
"20000-32767"
|
|
349
|
+
],
|
|
350
|
+
"pattern": "^[0-9]+-[0-9]+$",
|
|
351
|
+
"type": "string"
|
|
352
|
+
}
|
|
353
|
+
},
|
|
354
|
+
"type": "object"
|
|
355
|
+
},
|
|
356
|
+
"ProxyConfig": {
|
|
357
|
+
"additionalProperties": false,
|
|
358
|
+
"description": "Ports and network access policy for the local HTTP/HTTPS proxy.",
|
|
359
|
+
"examples": [
|
|
360
|
+
{
|
|
361
|
+
"http_port": 80,
|
|
362
|
+
"https_port": 443,
|
|
363
|
+
"lan": false
|
|
364
|
+
}
|
|
365
|
+
],
|
|
366
|
+
"properties": {
|
|
367
|
+
"http_port": {
|
|
368
|
+
"default": 80,
|
|
369
|
+
"description": "HTTP listening port; defaults to 80 and redirects to HTTPS when TLS is enabled.",
|
|
370
|
+
"examples": [
|
|
371
|
+
80,
|
|
372
|
+
8080
|
|
373
|
+
],
|
|
374
|
+
"format": "uint16",
|
|
375
|
+
"maximum": 65535,
|
|
376
|
+
"minimum": 0,
|
|
377
|
+
"type": "integer"
|
|
378
|
+
},
|
|
379
|
+
"https_port": {
|
|
380
|
+
"default": 443,
|
|
381
|
+
"description": "HTTPS listening port; defaults to 443.",
|
|
382
|
+
"examples": [
|
|
383
|
+
443,
|
|
384
|
+
8443
|
|
385
|
+
],
|
|
386
|
+
"format": "uint16",
|
|
387
|
+
"maximum": 65535,
|
|
388
|
+
"minimum": 0,
|
|
389
|
+
"type": "integer"
|
|
390
|
+
},
|
|
391
|
+
"lan": {
|
|
392
|
+
"default": false,
|
|
393
|
+
"description": "Accept connections from other machines; defaults to loopback-only access.",
|
|
394
|
+
"examples": [
|
|
395
|
+
false,
|
|
396
|
+
true
|
|
397
|
+
],
|
|
398
|
+
"type": "boolean"
|
|
399
|
+
}
|
|
400
|
+
},
|
|
401
|
+
"type": "object"
|
|
402
|
+
},
|
|
403
|
+
"Resolver": {
|
|
404
|
+
"description": "Strategy for resolving local project hostnames; defaults to localhost.",
|
|
405
|
+
"examples": [
|
|
406
|
+
"localhost",
|
|
407
|
+
"hosts_file",
|
|
408
|
+
"resolver",
|
|
409
|
+
"public"
|
|
410
|
+
],
|
|
411
|
+
"oneOf": [
|
|
412
|
+
{
|
|
413
|
+
"const": "localhost",
|
|
414
|
+
"description": "Use names under .localhost, resolved by browsers without a custom DNS service.",
|
|
415
|
+
"examples": [
|
|
416
|
+
"localhost"
|
|
417
|
+
],
|
|
418
|
+
"type": "string"
|
|
419
|
+
},
|
|
420
|
+
{
|
|
421
|
+
"const": "hosts_file",
|
|
422
|
+
"description": "Resolve exact project names through system hosts-file entries.",
|
|
423
|
+
"examples": [
|
|
424
|
+
"hosts_file"
|
|
425
|
+
],
|
|
426
|
+
"type": "string"
|
|
427
|
+
},
|
|
428
|
+
{
|
|
429
|
+
"const": "resolver",
|
|
430
|
+
"description": "Use the daemon's DNS resolver for the configured custom top-level domain.",
|
|
431
|
+
"examples": [
|
|
432
|
+
"resolver"
|
|
433
|
+
],
|
|
434
|
+
"type": "string"
|
|
435
|
+
},
|
|
436
|
+
{
|
|
437
|
+
"const": "public",
|
|
438
|
+
"description": "Reserved public DNS and DNS-01 strategy; not supported yet.",
|
|
439
|
+
"examples": [
|
|
440
|
+
"public"
|
|
441
|
+
],
|
|
442
|
+
"type": "string"
|
|
443
|
+
}
|
|
444
|
+
]
|
|
445
|
+
},
|
|
446
|
+
"StartupConfig": {
|
|
447
|
+
"additionalProperties": false,
|
|
448
|
+
"description": "Startup pacing. Machine settings, so they live in user config only.",
|
|
449
|
+
"examples": [
|
|
450
|
+
{
|
|
451
|
+
"max": 4,
|
|
452
|
+
"mode": "fixed"
|
|
453
|
+
},
|
|
454
|
+
{
|
|
455
|
+
"initial": 2,
|
|
456
|
+
"max": 8,
|
|
457
|
+
"mode": "adaptive",
|
|
458
|
+
"settle_cpu": "10%",
|
|
459
|
+
"slot_timeout": "20s",
|
|
460
|
+
"target_cpu": "75%"
|
|
461
|
+
}
|
|
462
|
+
],
|
|
463
|
+
"properties": {
|
|
464
|
+
"initial": {
|
|
465
|
+
"default": null,
|
|
466
|
+
"description": "Adaptive starting window; default CPU cores / 4, at least 2, at most `max`.",
|
|
467
|
+
"examples": [
|
|
468
|
+
2
|
|
469
|
+
],
|
|
470
|
+
"format": "uint32",
|
|
471
|
+
"minimum": 1,
|
|
472
|
+
"type": [
|
|
473
|
+
"integer",
|
|
474
|
+
"null"
|
|
475
|
+
]
|
|
476
|
+
},
|
|
477
|
+
"max": {
|
|
478
|
+
"default": null,
|
|
479
|
+
"description": "Largest window (the fixed window in `fixed` mode); default CPU cores.",
|
|
480
|
+
"examples": [
|
|
481
|
+
8
|
|
482
|
+
],
|
|
483
|
+
"format": "uint32",
|
|
484
|
+
"minimum": 1,
|
|
485
|
+
"type": [
|
|
486
|
+
"integer",
|
|
487
|
+
"null"
|
|
488
|
+
]
|
|
489
|
+
},
|
|
490
|
+
"mode": {
|
|
491
|
+
"$ref": "#/$defs/StartupMode",
|
|
492
|
+
"default": "fixed",
|
|
493
|
+
"description": "`adaptive`, `fixed` or `all`; default `fixed`.",
|
|
494
|
+
"examples": [
|
|
495
|
+
"adaptive",
|
|
496
|
+
"fixed",
|
|
497
|
+
"all"
|
|
498
|
+
]
|
|
499
|
+
},
|
|
500
|
+
"settle_cpu": {
|
|
501
|
+
"$ref": "#/$defs/Percent",
|
|
502
|
+
"default": "10%",
|
|
503
|
+
"description": "A `ready: started` service has finished starting once its process tree\nstays below this share of one core for 2 s; default 10%.",
|
|
504
|
+
"examples": [
|
|
505
|
+
"10%",
|
|
506
|
+
"12.5%"
|
|
507
|
+
]
|
|
508
|
+
},
|
|
509
|
+
"slot_timeout": {
|
|
510
|
+
"$ref": "#/$defs/ConfigDuration",
|
|
511
|
+
"default": "20000ms",
|
|
512
|
+
"description": "A start slot is given back after this even if the service is not ready,\nso services waiting on each other cannot block the queue; default 20s.",
|
|
513
|
+
"examples": [
|
|
514
|
+
"15s",
|
|
515
|
+
"10m"
|
|
516
|
+
]
|
|
517
|
+
},
|
|
518
|
+
"target_cpu": {
|
|
519
|
+
"$ref": "#/$defs/Percent",
|
|
520
|
+
"default": "75%",
|
|
521
|
+
"description": "Adaptive mode grows the window while system CPU stays below this; default 75%.",
|
|
522
|
+
"examples": [
|
|
523
|
+
"75%",
|
|
524
|
+
"80%"
|
|
525
|
+
]
|
|
526
|
+
}
|
|
527
|
+
},
|
|
528
|
+
"type": "object"
|
|
529
|
+
},
|
|
530
|
+
"StartupMode": {
|
|
531
|
+
"description": "How the start gate sizes its window.",
|
|
532
|
+
"examples": [
|
|
533
|
+
"adaptive",
|
|
534
|
+
"fixed",
|
|
535
|
+
"all"
|
|
536
|
+
],
|
|
537
|
+
"oneOf": [
|
|
538
|
+
{
|
|
539
|
+
"const": "adaptive",
|
|
540
|
+
"description": "Grow the window while CPU and memory allow, shrink it under pressure.",
|
|
541
|
+
"examples": [
|
|
542
|
+
"adaptive"
|
|
543
|
+
],
|
|
544
|
+
"type": "string"
|
|
545
|
+
},
|
|
546
|
+
{
|
|
547
|
+
"const": "fixed",
|
|
548
|
+
"description": "Always `max` starts at a time.",
|
|
549
|
+
"examples": [
|
|
550
|
+
"fixed"
|
|
551
|
+
],
|
|
552
|
+
"type": "string"
|
|
553
|
+
},
|
|
554
|
+
{
|
|
555
|
+
"const": "all",
|
|
556
|
+
"description": "No pacing: every service starts at once.",
|
|
557
|
+
"examples": [
|
|
558
|
+
"all"
|
|
559
|
+
],
|
|
560
|
+
"type": "string"
|
|
561
|
+
}
|
|
562
|
+
]
|
|
563
|
+
},
|
|
564
|
+
"StateConfig": {
|
|
565
|
+
"additionalProperties": false,
|
|
566
|
+
"description": "Soft disk budget for the database; live registry and completion records are preserved.",
|
|
567
|
+
"examples": [
|
|
568
|
+
{
|
|
569
|
+
"max_size": "512MiB"
|
|
570
|
+
}
|
|
571
|
+
],
|
|
572
|
+
"properties": {
|
|
573
|
+
"max_size": {
|
|
574
|
+
"$ref": "#/$defs/ByteSize",
|
|
575
|
+
"default": "536870912B",
|
|
576
|
+
"description": "Budget for the database plus WAL and shared-memory files; defaults to 512MiB and must be nonzero. Old metrics and history are pruned first; protected live state may exceed it.",
|
|
577
|
+
"examples": [
|
|
578
|
+
"512MiB",
|
|
579
|
+
"1GiB"
|
|
580
|
+
]
|
|
581
|
+
}
|
|
582
|
+
},
|
|
583
|
+
"type": "object"
|
|
584
|
+
},
|
|
585
|
+
"Templated_string": {
|
|
586
|
+
"anyOf": [
|
|
587
|
+
{
|
|
588
|
+
"description": "Literal value used without expression evaluation.",
|
|
589
|
+
"type": "string"
|
|
590
|
+
},
|
|
591
|
+
{
|
|
592
|
+
"description": "Text containing `${{ ... }}`, evaluated for each lane; write `${{ '${{' }}` for a literal `${{`.",
|
|
593
|
+
"examples": [
|
|
594
|
+
"${{ lane.index }}"
|
|
595
|
+
],
|
|
596
|
+
"pattern": "\\$\\{\\{",
|
|
597
|
+
"type": "string"
|
|
598
|
+
}
|
|
599
|
+
],
|
|
600
|
+
"description": "A literal value or a `${{ ... }}` expression, checked for the required type after evaluation.\nWrite `${{ '${{' }}` for a literal `${{`.",
|
|
601
|
+
"examples": [
|
|
602
|
+
"${{ lane.index }}"
|
|
603
|
+
]
|
|
604
|
+
},
|
|
605
|
+
"TerminalConfig": {
|
|
606
|
+
"anyOf": [
|
|
607
|
+
{
|
|
608
|
+
"description": "A terminal app name from when devlanes opened units in a new terminal\nwindow; that feature is gone, so the name is ignored with a warning.",
|
|
609
|
+
"examples": [
|
|
610
|
+
"ghostty"
|
|
611
|
+
],
|
|
612
|
+
"type": "string"
|
|
613
|
+
},
|
|
614
|
+
{
|
|
615
|
+
"$ref": "#/$defs/TerminalSettings",
|
|
616
|
+
"description": "How devlanes uses the terminal's own progress bar.",
|
|
617
|
+
"examples": [
|
|
618
|
+
{
|
|
619
|
+
"progress": "never"
|
|
620
|
+
}
|
|
621
|
+
]
|
|
622
|
+
}
|
|
623
|
+
],
|
|
624
|
+
"description": "How devlanes uses the terminal, or (from older configs) a terminal app\nname, which is ignored.",
|
|
625
|
+
"examples": [
|
|
626
|
+
{
|
|
627
|
+
"progress": "auto"
|
|
628
|
+
}
|
|
629
|
+
]
|
|
630
|
+
},
|
|
631
|
+
"TerminalProgress": {
|
|
632
|
+
"description": "When start progress goes to the terminal tab's progress bar. Only a terminal\nsession in human output ever gets it; `DEVLANES_TERM_PROGRESS=0` or `1` overrides this.",
|
|
633
|
+
"examples": [
|
|
634
|
+
"auto",
|
|
635
|
+
"always",
|
|
636
|
+
"never"
|
|
637
|
+
],
|
|
638
|
+
"oneOf": [
|
|
639
|
+
{
|
|
640
|
+
"const": "auto",
|
|
641
|
+
"description": "Only in terminals known to draw it (Ghostty, WezTerm, recent iTerm2, Windows Terminal, ConEmu, Ptyxis, Konsole), never inside tmux or screen.",
|
|
642
|
+
"examples": [
|
|
643
|
+
"auto"
|
|
644
|
+
],
|
|
645
|
+
"type": "string"
|
|
646
|
+
},
|
|
647
|
+
{
|
|
648
|
+
"const": "always",
|
|
649
|
+
"description": "In any terminal, also kitty 0.47 or later and inside tmux (needs `allow-passthrough on`).",
|
|
650
|
+
"examples": [
|
|
651
|
+
"always"
|
|
652
|
+
],
|
|
653
|
+
"type": "string"
|
|
654
|
+
},
|
|
655
|
+
{
|
|
656
|
+
"const": "never",
|
|
657
|
+
"description": "Never.",
|
|
658
|
+
"examples": [
|
|
659
|
+
"never"
|
|
660
|
+
],
|
|
661
|
+
"type": "string"
|
|
662
|
+
}
|
|
663
|
+
]
|
|
664
|
+
},
|
|
665
|
+
"TerminalSettings": {
|
|
666
|
+
"additionalProperties": false,
|
|
667
|
+
"description": "How devlanes uses the terminal's own progress bar.",
|
|
668
|
+
"examples": [
|
|
669
|
+
{
|
|
670
|
+
"progress": "auto"
|
|
671
|
+
},
|
|
672
|
+
{
|
|
673
|
+
"progress": "never"
|
|
674
|
+
}
|
|
675
|
+
],
|
|
676
|
+
"properties": {
|
|
677
|
+
"progress": {
|
|
678
|
+
"$ref": "#/$defs/TerminalProgress",
|
|
679
|
+
"default": "auto",
|
|
680
|
+
"description": "Show start progress in the terminal tab's progress bar (OSC 9;4); defaults to auto.",
|
|
681
|
+
"examples": [
|
|
682
|
+
"auto",
|
|
683
|
+
"never"
|
|
684
|
+
]
|
|
685
|
+
}
|
|
686
|
+
},
|
|
687
|
+
"type": "object"
|
|
688
|
+
},
|
|
689
|
+
"TlsConfig": {
|
|
690
|
+
"additionalProperties": false,
|
|
691
|
+
"description": "Certificate authority selection and requested certificate trust targets.",
|
|
692
|
+
"examples": [
|
|
693
|
+
{
|
|
694
|
+
"ca": "devlanes",
|
|
695
|
+
"trust": [
|
|
696
|
+
"system",
|
|
697
|
+
"firefox"
|
|
698
|
+
]
|
|
699
|
+
}
|
|
700
|
+
],
|
|
701
|
+
"properties": {
|
|
702
|
+
"ca": {
|
|
703
|
+
"$ref": "#/$defs/CaKind",
|
|
704
|
+
"default": "devlanes",
|
|
705
|
+
"description": "Use devlanes' own CA by default, or reuse mkcert's CA.",
|
|
706
|
+
"examples": [
|
|
707
|
+
"devlanes",
|
|
708
|
+
"mkcert"
|
|
709
|
+
]
|
|
710
|
+
},
|
|
711
|
+
"trust": {
|
|
712
|
+
"default": [],
|
|
713
|
+
"description": "Trust stores that should accept the local CA; mobile targets are ignored with a warning for now.",
|
|
714
|
+
"examples": [
|
|
715
|
+
[
|
|
716
|
+
"system",
|
|
717
|
+
"firefox"
|
|
718
|
+
],
|
|
719
|
+
[
|
|
720
|
+
"chrome"
|
|
721
|
+
]
|
|
722
|
+
],
|
|
723
|
+
"items": {
|
|
724
|
+
"$ref": "#/$defs/TrustTarget",
|
|
725
|
+
"description": "Store in which the local CA should be trusted; mobile stores are not supported yet.",
|
|
726
|
+
"examples": [
|
|
727
|
+
"system",
|
|
728
|
+
"firefox",
|
|
729
|
+
"chrome",
|
|
730
|
+
"ios-simulator",
|
|
731
|
+
"android-emulator"
|
|
732
|
+
]
|
|
733
|
+
},
|
|
734
|
+
"type": "array"
|
|
735
|
+
}
|
|
736
|
+
},
|
|
737
|
+
"type": "object"
|
|
738
|
+
},
|
|
739
|
+
"TrustTarget": {
|
|
740
|
+
"description": "Store in which the local CA should be trusted; mobile stores are not supported yet.",
|
|
741
|
+
"examples": [
|
|
742
|
+
"system",
|
|
743
|
+
"firefox",
|
|
744
|
+
"chrome",
|
|
745
|
+
"ios-simulator",
|
|
746
|
+
"android-emulator"
|
|
747
|
+
],
|
|
748
|
+
"oneOf": [
|
|
749
|
+
{
|
|
750
|
+
"const": "system",
|
|
751
|
+
"description": "Trust the local CA in the operating system's certificate store.",
|
|
752
|
+
"examples": [
|
|
753
|
+
"system"
|
|
754
|
+
],
|
|
755
|
+
"type": "string"
|
|
756
|
+
},
|
|
757
|
+
{
|
|
758
|
+
"const": "firefox",
|
|
759
|
+
"description": "Trust the local CA in Firefox's certificate database.",
|
|
760
|
+
"examples": [
|
|
761
|
+
"firefox"
|
|
762
|
+
],
|
|
763
|
+
"type": "string"
|
|
764
|
+
},
|
|
765
|
+
{
|
|
766
|
+
"const": "chrome",
|
|
767
|
+
"description": "Trust the local CA in Chrome's certificate database where required.",
|
|
768
|
+
"examples": [
|
|
769
|
+
"chrome"
|
|
770
|
+
],
|
|
771
|
+
"type": "string"
|
|
772
|
+
},
|
|
773
|
+
{
|
|
774
|
+
"const": "ios-simulator",
|
|
775
|
+
"description": "Reserved iOS simulator trust target; not supported yet, so it is ignored with a warning.",
|
|
776
|
+
"examples": [
|
|
777
|
+
"ios-simulator"
|
|
778
|
+
],
|
|
779
|
+
"type": "string"
|
|
780
|
+
},
|
|
781
|
+
{
|
|
782
|
+
"const": "android-emulator",
|
|
783
|
+
"description": "Reserved Android emulator trust target; not supported yet, so it is ignored with a warning.",
|
|
784
|
+
"examples": [
|
|
785
|
+
"android-emulator"
|
|
786
|
+
],
|
|
787
|
+
"type": "string"
|
|
788
|
+
}
|
|
789
|
+
]
|
|
790
|
+
},
|
|
791
|
+
"TuiConfig": {
|
|
792
|
+
"additionalProperties": false,
|
|
793
|
+
"description": "Terminal UI behaviour of the CLI.",
|
|
794
|
+
"examples": [
|
|
795
|
+
{
|
|
796
|
+
"open_on_start": false
|
|
797
|
+
},
|
|
798
|
+
{
|
|
799
|
+
"glyphs": "ascii",
|
|
800
|
+
"theme": "light"
|
|
801
|
+
},
|
|
802
|
+
{
|
|
803
|
+
"on_quit": "keep"
|
|
804
|
+
}
|
|
805
|
+
],
|
|
806
|
+
"properties": {
|
|
807
|
+
"glyphs": {
|
|
808
|
+
"$ref": "#/$defs/TuiGlyphs",
|
|
809
|
+
"default": "auto",
|
|
810
|
+
"description": "Symbols the TUI draws states and markers with; defaults to auto.",
|
|
811
|
+
"examples": [
|
|
812
|
+
"auto",
|
|
813
|
+
"unicode",
|
|
814
|
+
"ascii"
|
|
815
|
+
]
|
|
816
|
+
},
|
|
817
|
+
"on_quit": {
|
|
818
|
+
"$ref": "#/$defs/TuiOnQuit",
|
|
819
|
+
"default": "ask",
|
|
820
|
+
"description": "What quitting the TUI does while lanes of the project on screen run; defaults to ask. The quit dialog's \"remember\" box writes it.",
|
|
821
|
+
"examples": [
|
|
822
|
+
"ask",
|
|
823
|
+
"keep",
|
|
824
|
+
"stop"
|
|
825
|
+
]
|
|
826
|
+
},
|
|
827
|
+
"open_on_start": {
|
|
828
|
+
"default": true,
|
|
829
|
+
"description": "Run `start`, `restart`, `lane resume` and `lane new --start` inside the TUI when typed at a terminal; defaults to true. false prints them as text, like `--no-ui` or DEVLANES_NO_UI=1.",
|
|
830
|
+
"examples": [
|
|
831
|
+
true,
|
|
832
|
+
false
|
|
833
|
+
],
|
|
834
|
+
"type": "boolean"
|
|
835
|
+
},
|
|
836
|
+
"theme": {
|
|
837
|
+
"$ref": "#/$defs/TuiTheme",
|
|
838
|
+
"default": "auto",
|
|
839
|
+
"description": "Colors of the TUI; defaults to auto. NO_COLOR always turns colors off.",
|
|
840
|
+
"examples": [
|
|
841
|
+
"auto",
|
|
842
|
+
"dark",
|
|
843
|
+
"light",
|
|
844
|
+
"ansi"
|
|
845
|
+
]
|
|
846
|
+
}
|
|
847
|
+
},
|
|
848
|
+
"type": "object"
|
|
849
|
+
},
|
|
850
|
+
"TuiGlyphs": {
|
|
851
|
+
"description": "Symbols the TUI draws with.",
|
|
852
|
+
"examples": [
|
|
853
|
+
"auto",
|
|
854
|
+
"unicode",
|
|
855
|
+
"ascii"
|
|
856
|
+
],
|
|
857
|
+
"oneOf": [
|
|
858
|
+
{
|
|
859
|
+
"const": "auto",
|
|
860
|
+
"description": "Unicode when the locale is UTF-8, else ASCII.",
|
|
861
|
+
"examples": [
|
|
862
|
+
"auto"
|
|
863
|
+
],
|
|
864
|
+
"type": "string"
|
|
865
|
+
},
|
|
866
|
+
{
|
|
867
|
+
"const": "unicode",
|
|
868
|
+
"description": "Unicode symbols such as ● ✕ ▾.",
|
|
869
|
+
"examples": [
|
|
870
|
+
"unicode"
|
|
871
|
+
],
|
|
872
|
+
"type": "string"
|
|
873
|
+
},
|
|
874
|
+
{
|
|
875
|
+
"const": "ascii",
|
|
876
|
+
"description": "Plain ASCII, for fonts or terminals that draw Unicode symbols badly.",
|
|
877
|
+
"examples": [
|
|
878
|
+
"ascii"
|
|
879
|
+
],
|
|
880
|
+
"type": "string"
|
|
881
|
+
}
|
|
882
|
+
]
|
|
883
|
+
},
|
|
884
|
+
"TuiOnQuit": {
|
|
885
|
+
"description": "What quitting the TUI does with running lanes.",
|
|
886
|
+
"examples": [
|
|
887
|
+
"ask",
|
|
888
|
+
"keep",
|
|
889
|
+
"stop"
|
|
890
|
+
],
|
|
891
|
+
"oneOf": [
|
|
892
|
+
{
|
|
893
|
+
"const": "ask",
|
|
894
|
+
"description": "Ask each time whether to keep the lanes running or stop them.",
|
|
895
|
+
"examples": [
|
|
896
|
+
"ask"
|
|
897
|
+
],
|
|
898
|
+
"type": "string"
|
|
899
|
+
},
|
|
900
|
+
{
|
|
901
|
+
"const": "keep",
|
|
902
|
+
"description": "Close the TUI and leave every lane running in the daemon.",
|
|
903
|
+
"examples": [
|
|
904
|
+
"keep"
|
|
905
|
+
],
|
|
906
|
+
"type": "string"
|
|
907
|
+
},
|
|
908
|
+
{
|
|
909
|
+
"const": "stop",
|
|
910
|
+
"description": "Stop the running lanes of the project on screen, then close the TUI.",
|
|
911
|
+
"examples": [
|
|
912
|
+
"stop"
|
|
913
|
+
],
|
|
914
|
+
"type": "string"
|
|
915
|
+
}
|
|
916
|
+
]
|
|
917
|
+
},
|
|
918
|
+
"TuiTheme": {
|
|
919
|
+
"description": "Colors of the TUI.",
|
|
920
|
+
"examples": [
|
|
921
|
+
"auto",
|
|
922
|
+
"dark",
|
|
923
|
+
"light",
|
|
924
|
+
"ansi"
|
|
925
|
+
],
|
|
926
|
+
"oneOf": [
|
|
927
|
+
{
|
|
928
|
+
"const": "auto",
|
|
929
|
+
"description": "The terminal's 16 colors, or the dark or light palette when the terminal reports true color and its background.",
|
|
930
|
+
"examples": [
|
|
931
|
+
"auto"
|
|
932
|
+
],
|
|
933
|
+
"type": "string"
|
|
934
|
+
},
|
|
935
|
+
{
|
|
936
|
+
"const": "dark",
|
|
937
|
+
"description": "The true-color palette for a dark background.",
|
|
938
|
+
"examples": [
|
|
939
|
+
"dark"
|
|
940
|
+
],
|
|
941
|
+
"type": "string"
|
|
942
|
+
},
|
|
943
|
+
{
|
|
944
|
+
"const": "light",
|
|
945
|
+
"description": "The true-color palette for a light background.",
|
|
946
|
+
"examples": [
|
|
947
|
+
"light"
|
|
948
|
+
],
|
|
949
|
+
"type": "string"
|
|
950
|
+
},
|
|
951
|
+
{
|
|
952
|
+
"const": "ansi",
|
|
953
|
+
"description": "The terminal's own 16 colors, which follow its theme.",
|
|
954
|
+
"examples": [
|
|
955
|
+
"ansi"
|
|
956
|
+
],
|
|
957
|
+
"type": "string"
|
|
958
|
+
}
|
|
959
|
+
]
|
|
960
|
+
},
|
|
961
|
+
"UpdatesConfig": {
|
|
962
|
+
"additionalProperties": false,
|
|
963
|
+
"description": "Release checks: the daemon reads the latest release's version once a day and\ncommands print a one-line notice. Nothing is downloaded or installed.",
|
|
964
|
+
"examples": [
|
|
965
|
+
{
|
|
966
|
+
"check": false
|
|
967
|
+
}
|
|
968
|
+
],
|
|
969
|
+
"properties": {
|
|
970
|
+
"check": {
|
|
971
|
+
"default": true,
|
|
972
|
+
"description": "Check GitHub once a day for a newer devlanes release and show the upgrade command; defaults to true.",
|
|
973
|
+
"examples": [
|
|
974
|
+
true,
|
|
975
|
+
false
|
|
976
|
+
],
|
|
977
|
+
"type": "boolean"
|
|
978
|
+
}
|
|
979
|
+
},
|
|
980
|
+
"type": "object"
|
|
981
|
+
}
|
|
982
|
+
},
|
|
983
|
+
"$id": "https://devlanes.run/v1/user-schema.json",
|
|
984
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
985
|
+
"additionalProperties": false,
|
|
986
|
+
"description": "Per-user machine settings, separate from project configuration.",
|
|
987
|
+
"examples": [
|
|
988
|
+
{
|
|
989
|
+
"hostnames": {
|
|
990
|
+
"resolver": "localhost"
|
|
991
|
+
},
|
|
992
|
+
"ports": {
|
|
993
|
+
"range": "20000-32767"
|
|
994
|
+
},
|
|
995
|
+
"terminal": {
|
|
996
|
+
"progress": "auto"
|
|
997
|
+
}
|
|
998
|
+
}
|
|
999
|
+
],
|
|
1000
|
+
"properties": {
|
|
1001
|
+
"history": {
|
|
1002
|
+
"$ref": "#/$defs/HistoryConfig",
|
|
1003
|
+
"default": {
|
|
1004
|
+
"remote_hosts_retention": "7776000000ms",
|
|
1005
|
+
"retention": "604800000ms"
|
|
1006
|
+
},
|
|
1007
|
+
"description": "Retention for finished unit/task history and disconnected remote hosts in the database.",
|
|
1008
|
+
"examples": [
|
|
1009
|
+
{
|
|
1010
|
+
"remote_hosts_retention": "90d",
|
|
1011
|
+
"retention": "7d"
|
|
1012
|
+
}
|
|
1013
|
+
]
|
|
1014
|
+
},
|
|
1015
|
+
"hostnames": {
|
|
1016
|
+
"$ref": "#/$defs/HostnamesConfig",
|
|
1017
|
+
"default": {
|
|
1018
|
+
"base_domain": null,
|
|
1019
|
+
"dns_provider": null,
|
|
1020
|
+
"hosts_file": null,
|
|
1021
|
+
"resolver": "localhost",
|
|
1022
|
+
"tld": null
|
|
1023
|
+
},
|
|
1024
|
+
"description": "Hostname resolution strategy and optional hosts-file policy.",
|
|
1025
|
+
"examples": [
|
|
1026
|
+
{
|
|
1027
|
+
"hosts_file": "auto",
|
|
1028
|
+
"resolver": "localhost"
|
|
1029
|
+
},
|
|
1030
|
+
{
|
|
1031
|
+
"resolver": "resolver",
|
|
1032
|
+
"tld": "test"
|
|
1033
|
+
}
|
|
1034
|
+
]
|
|
1035
|
+
},
|
|
1036
|
+
"logs": {
|
|
1037
|
+
"$ref": "#/$defs/LogsConfig",
|
|
1038
|
+
"default": {
|
|
1039
|
+
"retention": {
|
|
1040
|
+
"days": 7,
|
|
1041
|
+
"max_size": "5368709120B"
|
|
1042
|
+
}
|
|
1043
|
+
},
|
|
1044
|
+
"description": "Retention for service output files and their database metadata.",
|
|
1045
|
+
"examples": [
|
|
1046
|
+
{
|
|
1047
|
+
"retention": {
|
|
1048
|
+
"days": 7,
|
|
1049
|
+
"max_size": "5GiB"
|
|
1050
|
+
}
|
|
1051
|
+
}
|
|
1052
|
+
]
|
|
1053
|
+
},
|
|
1054
|
+
"metrics": {
|
|
1055
|
+
"$ref": "#/$defs/MetricsConfig",
|
|
1056
|
+
"default": {
|
|
1057
|
+
"retention": "604800000ms"
|
|
1058
|
+
},
|
|
1059
|
+
"description": "Retention for monitor history, including aggregates stored in the database.",
|
|
1060
|
+
"examples": [
|
|
1061
|
+
{
|
|
1062
|
+
"retention": "7d"
|
|
1063
|
+
}
|
|
1064
|
+
]
|
|
1065
|
+
},
|
|
1066
|
+
"ports": {
|
|
1067
|
+
"$ref": "#/$defs/PortsConfig",
|
|
1068
|
+
"default": {
|
|
1069
|
+
"range": "20000-32767"
|
|
1070
|
+
},
|
|
1071
|
+
"description": "Machine-wide pool shared by all project lane blocks.",
|
|
1072
|
+
"examples": [
|
|
1073
|
+
{
|
|
1074
|
+
"range": "20000-32767"
|
|
1075
|
+
}
|
|
1076
|
+
]
|
|
1077
|
+
},
|
|
1078
|
+
"proxy": {
|
|
1079
|
+
"$ref": "#/$defs/ProxyConfig",
|
|
1080
|
+
"default": {
|
|
1081
|
+
"http_port": 80,
|
|
1082
|
+
"https_port": 443,
|
|
1083
|
+
"lan": false
|
|
1084
|
+
},
|
|
1085
|
+
"description": "HTTP/HTTPS listening ports and LAN access policy.",
|
|
1086
|
+
"examples": [
|
|
1087
|
+
{
|
|
1088
|
+
"http_port": 80,
|
|
1089
|
+
"https_port": 443,
|
|
1090
|
+
"lan": false
|
|
1091
|
+
}
|
|
1092
|
+
]
|
|
1093
|
+
},
|
|
1094
|
+
"startup": {
|
|
1095
|
+
"$ref": "#/$defs/StartupConfig",
|
|
1096
|
+
"default": {
|
|
1097
|
+
"initial": null,
|
|
1098
|
+
"max": null,
|
|
1099
|
+
"mode": "fixed",
|
|
1100
|
+
"settle_cpu": "10%",
|
|
1101
|
+
"slot_timeout": "20000ms",
|
|
1102
|
+
"target_cpu": "75%"
|
|
1103
|
+
},
|
|
1104
|
+
"description": "How many services start at once, across all lanes and projects.",
|
|
1105
|
+
"examples": [
|
|
1106
|
+
{
|
|
1107
|
+
"max": 4,
|
|
1108
|
+
"mode": "fixed"
|
|
1109
|
+
},
|
|
1110
|
+
{
|
|
1111
|
+
"initial": 2,
|
|
1112
|
+
"max": 8,
|
|
1113
|
+
"mode": "adaptive",
|
|
1114
|
+
"settle_cpu": "10%",
|
|
1115
|
+
"slot_timeout": "20s",
|
|
1116
|
+
"target_cpu": "75%"
|
|
1117
|
+
}
|
|
1118
|
+
]
|
|
1119
|
+
},
|
|
1120
|
+
"state": {
|
|
1121
|
+
"$ref": "#/$defs/StateConfig",
|
|
1122
|
+
"default": {
|
|
1123
|
+
"max_size": "536870912B"
|
|
1124
|
+
},
|
|
1125
|
+
"description": "Soft disk budget for the state database and its SQLite sidecar files.",
|
|
1126
|
+
"examples": [
|
|
1127
|
+
{
|
|
1128
|
+
"max_size": "512MiB"
|
|
1129
|
+
}
|
|
1130
|
+
]
|
|
1131
|
+
},
|
|
1132
|
+
"terminal": {
|
|
1133
|
+
"anyOf": [
|
|
1134
|
+
{
|
|
1135
|
+
"$ref": "#/$defs/TerminalConfig"
|
|
1136
|
+
},
|
|
1137
|
+
{
|
|
1138
|
+
"type": "null"
|
|
1139
|
+
}
|
|
1140
|
+
],
|
|
1141
|
+
"default": null,
|
|
1142
|
+
"description": "How devlanes uses the terminal tab's progress bar during starts.",
|
|
1143
|
+
"examples": [
|
|
1144
|
+
{
|
|
1145
|
+
"progress": "auto"
|
|
1146
|
+
}
|
|
1147
|
+
]
|
|
1148
|
+
},
|
|
1149
|
+
"tls": {
|
|
1150
|
+
"$ref": "#/$defs/TlsConfig",
|
|
1151
|
+
"default": {
|
|
1152
|
+
"ca": "devlanes",
|
|
1153
|
+
"trust": []
|
|
1154
|
+
},
|
|
1155
|
+
"description": "Certificate authority and explicitly requested trust targets.",
|
|
1156
|
+
"examples": [
|
|
1157
|
+
{
|
|
1158
|
+
"ca": "devlanes",
|
|
1159
|
+
"trust": [
|
|
1160
|
+
"system",
|
|
1161
|
+
"firefox"
|
|
1162
|
+
]
|
|
1163
|
+
}
|
|
1164
|
+
]
|
|
1165
|
+
},
|
|
1166
|
+
"tui": {
|
|
1167
|
+
"$ref": "#/$defs/TuiConfig",
|
|
1168
|
+
"default": {
|
|
1169
|
+
"glyphs": "auto",
|
|
1170
|
+
"on_quit": "ask",
|
|
1171
|
+
"open_on_start": true,
|
|
1172
|
+
"theme": "auto"
|
|
1173
|
+
},
|
|
1174
|
+
"description": "How commands use the terminal UI.",
|
|
1175
|
+
"examples": [
|
|
1176
|
+
{
|
|
1177
|
+
"open_on_start": false
|
|
1178
|
+
},
|
|
1179
|
+
{
|
|
1180
|
+
"glyphs": "ascii",
|
|
1181
|
+
"theme": "light"
|
|
1182
|
+
},
|
|
1183
|
+
{
|
|
1184
|
+
"on_quit": "keep"
|
|
1185
|
+
}
|
|
1186
|
+
]
|
|
1187
|
+
},
|
|
1188
|
+
"updates": {
|
|
1189
|
+
"$ref": "#/$defs/UpdatesConfig",
|
|
1190
|
+
"default": {
|
|
1191
|
+
"check": true
|
|
1192
|
+
},
|
|
1193
|
+
"description": "Whether the daemon looks for new devlanes releases.",
|
|
1194
|
+
"examples": [
|
|
1195
|
+
{
|
|
1196
|
+
"check": false
|
|
1197
|
+
}
|
|
1198
|
+
]
|
|
1199
|
+
}
|
|
1200
|
+
},
|
|
1201
|
+
"title": "devlanes user config",
|
|
1202
|
+
"type": "object"
|
|
1203
|
+
}
|