fleetfizz 0.6.0 → 0.8.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.
Files changed (3) hide show
  1. package/dist/fleetfizz.mjs +340 -154
  2. package/package.json +1 -1
  3. package/schema.json +1019 -245
package/schema.json CHANGED
@@ -24,143 +24,537 @@
24
24
  }
25
25
  },
26
26
  "machines": {
27
- "type": "object",
28
- "propertyNames": {
27
+ "type": "array",
28
+ "items": {
29
29
  "type": "string",
30
30
  "minLength": 1
31
31
  },
32
- "additionalProperties": {
33
- "type": "object",
34
- "properties": {
35
- "clones": {
36
- "type": "string",
37
- "minLength": 1,
38
- "allOf": [
39
- {
40
- "description": "Where this Machine keeps its Managed Clones. `~` expands on that Machine. Default: `~/.local/share/fleetfizz/clones`."
41
- }
42
- ]
43
- }
44
- },
45
- "additionalProperties": false
46
- },
32
+ "minItems": 1,
33
+ "uniqueItems": true,
47
34
  "allOf": [
48
35
  {
49
- "description": "The Fleet, keyed by each Machine's tailnet name. A tailnet member that is not listed is not part of the Fleet."
36
+ "description": "The Fleet: each Machine's tailnet name. A tailnet member that is not listed is not part of the Fleet."
50
37
  }
51
38
  ]
52
39
  },
53
40
  "repos": {
54
- "type": "array",
55
- "items": {
56
- "type": "object",
57
- "properties": {
58
- "platforms": {
59
- "type": "array",
60
- "prefixItems": [
61
- {
62
- "type": "string",
63
- "enum": ["darwin", "linux"]
64
- }
65
- ],
66
- "minItems": 1,
67
- "items": {
41
+ "type": "object",
42
+ "properties": {
43
+ "platforms": {
44
+ "type": "array",
45
+ "prefixItems": [
46
+ {
68
47
  "type": "string",
69
48
  "enum": ["darwin", "linux"]
70
- },
71
- "allOf": [
72
- {
73
- "description": "`darwin`, `linux`, or both."
74
- }
75
- ]
49
+ }
50
+ ],
51
+ "minItems": 1,
52
+ "items": {
53
+ "type": "string",
54
+ "enum": ["darwin", "linux"]
76
55
  },
77
- "machines": {
78
- "type": "array",
79
- "prefixItems": [
80
- {
81
- "type": "string",
82
- "minLength": 1
83
- }
84
- ],
85
- "minItems": 1,
86
- "items": {
56
+ "allOf": [
57
+ {
58
+ "description": "`darwin`, `linux`, or both."
59
+ }
60
+ ]
61
+ },
62
+ "machines": {
63
+ "type": "array",
64
+ "prefixItems": [
65
+ {
87
66
  "type": "string",
88
67
  "minLength": 1
89
- },
90
- "allOf": [
91
- {
92
- "description": "Machine names from `machines`."
93
- }
94
- ]
95
- },
96
- "origin": {
68
+ }
69
+ ],
70
+ "minItems": 1,
71
+ "items": {
97
72
  "type": "string",
98
- "title": "GitHub origin",
99
- "description": "a GitHub \"owner/repo\"",
100
- "allOf": [
101
- {
102
- "description": "The GitHub `owner/repo`."
103
- }
104
- ]
73
+ "minLength": 1
105
74
  },
106
- "ref": {
75
+ "allOf": [
76
+ {
77
+ "description": "Machine names from `machines`."
78
+ }
79
+ ]
80
+ },
81
+ "dependsOn": {
82
+ "type": "array",
83
+ "items": {
107
84
  "type": "string",
108
- "minLength": 1,
109
- "allOf": [
110
- {
111
- "description": "A branch, or a full 40-character commit SHA to pin it."
112
- }
113
- ]
85
+ "enum": ["vp", "brew", "cask", "repos"]
114
86
  },
115
- "install": {
116
- "type": "string",
117
- "minLength": 1,
118
- "allOf": [
119
- {
120
- "description": "The Install Command, run in a login shell inside the Managed Clone."
87
+ "allOf": [
88
+ {
89
+ "description": "Providers whose Items must succeed on a Machine before this one changes there."
90
+ }
91
+ ]
92
+ },
93
+ "cloneRoot": {
94
+ "anyOf": [
95
+ {
96
+ "anyOf": [
97
+ {
98
+ "type": "object",
99
+ "properties": {
100
+ "platforms": {
101
+ "type": "array",
102
+ "prefixItems": [
103
+ {
104
+ "type": "string",
105
+ "enum": ["darwin", "linux"]
106
+ }
107
+ ],
108
+ "minItems": 1,
109
+ "items": {
110
+ "type": "string",
111
+ "enum": ["darwin", "linux"]
112
+ },
113
+ "allOf": [
114
+ {
115
+ "description": "`darwin`, `linux`, or both."
116
+ }
117
+ ]
118
+ },
119
+ "machines": {
120
+ "type": "array",
121
+ "prefixItems": [
122
+ {
123
+ "type": "string",
124
+ "minLength": 1
125
+ }
126
+ ],
127
+ "minItems": 1,
128
+ "items": {
129
+ "type": "string",
130
+ "minLength": 1
131
+ },
132
+ "allOf": [
133
+ {
134
+ "description": "Machine names from `machines`."
135
+ }
136
+ ]
137
+ },
138
+ "path": {
139
+ "type": "string",
140
+ "minLength": 1
141
+ }
142
+ },
143
+ "required": ["path"],
144
+ "additionalProperties": false
145
+ },
146
+ {
147
+ "type": "string",
148
+ "minLength": 1
149
+ }
150
+ ]
151
+ },
152
+ {
153
+ "type": "array",
154
+ "prefixItems": [
155
+ {
156
+ "anyOf": [
157
+ {
158
+ "type": "object",
159
+ "properties": {
160
+ "platforms": {
161
+ "type": "array",
162
+ "prefixItems": [
163
+ {
164
+ "type": "string",
165
+ "enum": ["darwin", "linux"]
166
+ }
167
+ ],
168
+ "minItems": 1,
169
+ "items": {
170
+ "type": "string",
171
+ "enum": ["darwin", "linux"]
172
+ },
173
+ "allOf": [
174
+ {
175
+ "description": "`darwin`, `linux`, or both."
176
+ }
177
+ ]
178
+ },
179
+ "machines": {
180
+ "type": "array",
181
+ "prefixItems": [
182
+ {
183
+ "type": "string",
184
+ "minLength": 1
185
+ }
186
+ ],
187
+ "minItems": 1,
188
+ "items": {
189
+ "type": "string",
190
+ "minLength": 1
191
+ },
192
+ "allOf": [
193
+ {
194
+ "description": "Machine names from `machines`."
195
+ }
196
+ ]
197
+ },
198
+ "path": {
199
+ "type": "string",
200
+ "minLength": 1
201
+ }
202
+ },
203
+ "required": ["path"],
204
+ "additionalProperties": false
205
+ },
206
+ {
207
+ "type": "string",
208
+ "minLength": 1
209
+ }
210
+ ]
211
+ }
212
+ ],
213
+ "minItems": 1,
214
+ "items": {
215
+ "anyOf": [
216
+ {
217
+ "type": "object",
218
+ "properties": {
219
+ "platforms": {
220
+ "type": "array",
221
+ "prefixItems": [
222
+ {
223
+ "type": "string",
224
+ "enum": ["darwin", "linux"]
225
+ }
226
+ ],
227
+ "minItems": 1,
228
+ "items": {
229
+ "type": "string",
230
+ "enum": ["darwin", "linux"]
231
+ },
232
+ "allOf": [
233
+ {
234
+ "description": "`darwin`, `linux`, or both."
235
+ }
236
+ ]
237
+ },
238
+ "machines": {
239
+ "type": "array",
240
+ "prefixItems": [
241
+ {
242
+ "type": "string",
243
+ "minLength": 1
244
+ }
245
+ ],
246
+ "minItems": 1,
247
+ "items": {
248
+ "type": "string",
249
+ "minLength": 1
250
+ },
251
+ "allOf": [
252
+ {
253
+ "description": "Machine names from `machines`."
254
+ }
255
+ ]
256
+ },
257
+ "path": {
258
+ "type": "string",
259
+ "minLength": 1
260
+ }
261
+ },
262
+ "required": ["path"],
263
+ "additionalProperties": false
264
+ },
265
+ {
266
+ "type": "string",
267
+ "minLength": 1
268
+ }
269
+ ]
121
270
  }
122
- ]
123
- },
124
- "name": {
271
+ }
272
+ ],
273
+ "allOf": [
274
+ {
275
+ "description": "Where a Machine keeps its Managed Clones: a path, or a list of `{ path, platforms?, machines? }` where a Machine gets the first that targets it. `~` expands on that Machine. Default: `~/.local/share/fleetfizz/clones`."
276
+ }
277
+ ]
278
+ },
279
+ "items": {
280
+ "type": "object",
281
+ "propertyNames": {
125
282
  "type": "string",
126
- "minLength": 1,
127
- "allOf": [
128
- {
129
- "description": "Names the clone's directory and the repo in output. Default: `<owner>-<repo>`."
130
- }
131
- ]
283
+ "minLength": 1
132
284
  },
133
- "outputs": {
134
- "type": "array",
135
- "items": {
136
- "type": "string",
137
- "minLength": 1
138
- },
139
- "allOf": [
285
+ "additionalProperties": {
286
+ "anyOf": [
140
287
  {
141
- "description": "Paths outside the clone the Install Command produces. If one changes by hand, the repo reinstalls."
142
- }
143
- ]
144
- },
145
- "files": {
146
- "type": "object",
147
- "propertyNames": {
148
- "type": "string",
149
- "minLength": 1
150
- },
151
- "additionalProperties": {
152
- "type": "string"
153
- },
154
- "allOf": [
288
+ "type": "object",
289
+ "properties": {
290
+ "platforms": {
291
+ "type": "array",
292
+ "prefixItems": [
293
+ {
294
+ "type": "string",
295
+ "enum": ["darwin", "linux"]
296
+ }
297
+ ],
298
+ "minItems": 1,
299
+ "items": {
300
+ "type": "string",
301
+ "enum": ["darwin", "linux"]
302
+ },
303
+ "allOf": [
304
+ {
305
+ "description": "`darwin`, `linux`, or both."
306
+ }
307
+ ]
308
+ },
309
+ "machines": {
310
+ "type": "array",
311
+ "prefixItems": [
312
+ {
313
+ "type": "string",
314
+ "minLength": 1
315
+ }
316
+ ],
317
+ "minItems": 1,
318
+ "items": {
319
+ "type": "string",
320
+ "minLength": 1
321
+ },
322
+ "allOf": [
323
+ {
324
+ "description": "Machine names from `machines`."
325
+ }
326
+ ]
327
+ },
328
+ "origin": {
329
+ "type": "string",
330
+ "title": "GitHub origin",
331
+ "description": "a GitHub \"owner/repo\"",
332
+ "allOf": [
333
+ {
334
+ "description": "The GitHub `owner/repo`."
335
+ }
336
+ ]
337
+ },
338
+ "ref": {
339
+ "type": "string",
340
+ "minLength": 1,
341
+ "allOf": [
342
+ {
343
+ "description": "A branch, or a full 40-character commit SHA to pin it."
344
+ }
345
+ ]
346
+ },
347
+ "install": {
348
+ "type": "string",
349
+ "minLength": 1,
350
+ "allOf": [
351
+ {
352
+ "description": "The Install Command, run in a login shell inside the Managed Clone."
353
+ }
354
+ ]
355
+ },
356
+ "outputs": {
357
+ "type": "array",
358
+ "items": {
359
+ "type": "string",
360
+ "minLength": 1
361
+ },
362
+ "allOf": [
363
+ {
364
+ "description": "Paths outside the clone the Install Command produces. If one changes by hand, the repo reinstalls."
365
+ }
366
+ ]
367
+ }
368
+ },
369
+ "required": ["origin", "ref", "install"],
370
+ "additionalProperties": false
371
+ },
155
372
  {
156
- "description": "Gitignored files written into the clone before every install, keyed by path. Never secrets."
373
+ "type": "array",
374
+ "prefixItems": [
375
+ {
376
+ "type": "object",
377
+ "properties": {
378
+ "platforms": {
379
+ "type": "array",
380
+ "prefixItems": [
381
+ {
382
+ "type": "string",
383
+ "enum": ["darwin", "linux"]
384
+ }
385
+ ],
386
+ "minItems": 1,
387
+ "items": {
388
+ "type": "string",
389
+ "enum": ["darwin", "linux"]
390
+ },
391
+ "allOf": [
392
+ {
393
+ "description": "`darwin`, `linux`, or both."
394
+ }
395
+ ]
396
+ },
397
+ "machines": {
398
+ "type": "array",
399
+ "prefixItems": [
400
+ {
401
+ "type": "string",
402
+ "minLength": 1
403
+ }
404
+ ],
405
+ "minItems": 1,
406
+ "items": {
407
+ "type": "string",
408
+ "minLength": 1
409
+ },
410
+ "allOf": [
411
+ {
412
+ "description": "Machine names from `machines`."
413
+ }
414
+ ]
415
+ },
416
+ "origin": {
417
+ "type": "string",
418
+ "title": "GitHub origin",
419
+ "description": "a GitHub \"owner/repo\"",
420
+ "allOf": [
421
+ {
422
+ "description": "The GitHub `owner/repo`."
423
+ }
424
+ ]
425
+ },
426
+ "ref": {
427
+ "type": "string",
428
+ "minLength": 1,
429
+ "allOf": [
430
+ {
431
+ "description": "A branch, or a full 40-character commit SHA to pin it."
432
+ }
433
+ ]
434
+ },
435
+ "install": {
436
+ "type": "string",
437
+ "minLength": 1,
438
+ "allOf": [
439
+ {
440
+ "description": "The Install Command, run in a login shell inside the Managed Clone."
441
+ }
442
+ ]
443
+ },
444
+ "outputs": {
445
+ "type": "array",
446
+ "items": {
447
+ "type": "string",
448
+ "minLength": 1
449
+ },
450
+ "allOf": [
451
+ {
452
+ "description": "Paths outside the clone the Install Command produces. If one changes by hand, the repo reinstalls."
453
+ }
454
+ ]
455
+ }
456
+ },
457
+ "required": ["origin", "ref", "install"],
458
+ "additionalProperties": false
459
+ }
460
+ ],
461
+ "minItems": 1,
462
+ "items": {
463
+ "type": "object",
464
+ "properties": {
465
+ "platforms": {
466
+ "type": "array",
467
+ "prefixItems": [
468
+ {
469
+ "type": "string",
470
+ "enum": ["darwin", "linux"]
471
+ }
472
+ ],
473
+ "minItems": 1,
474
+ "items": {
475
+ "type": "string",
476
+ "enum": ["darwin", "linux"]
477
+ },
478
+ "allOf": [
479
+ {
480
+ "description": "`darwin`, `linux`, or both."
481
+ }
482
+ ]
483
+ },
484
+ "machines": {
485
+ "type": "array",
486
+ "prefixItems": [
487
+ {
488
+ "type": "string",
489
+ "minLength": 1
490
+ }
491
+ ],
492
+ "minItems": 1,
493
+ "items": {
494
+ "type": "string",
495
+ "minLength": 1
496
+ },
497
+ "allOf": [
498
+ {
499
+ "description": "Machine names from `machines`."
500
+ }
501
+ ]
502
+ },
503
+ "origin": {
504
+ "type": "string",
505
+ "title": "GitHub origin",
506
+ "description": "a GitHub \"owner/repo\"",
507
+ "allOf": [
508
+ {
509
+ "description": "The GitHub `owner/repo`."
510
+ }
511
+ ]
512
+ },
513
+ "ref": {
514
+ "type": "string",
515
+ "minLength": 1,
516
+ "allOf": [
517
+ {
518
+ "description": "A branch, or a full 40-character commit SHA to pin it."
519
+ }
520
+ ]
521
+ },
522
+ "install": {
523
+ "type": "string",
524
+ "minLength": 1,
525
+ "allOf": [
526
+ {
527
+ "description": "The Install Command, run in a login shell inside the Managed Clone."
528
+ }
529
+ ]
530
+ },
531
+ "outputs": {
532
+ "type": "array",
533
+ "items": {
534
+ "type": "string",
535
+ "minLength": 1
536
+ },
537
+ "allOf": [
538
+ {
539
+ "description": "Paths outside the clone the Install Command produces. If one changes by hand, the repo reinstalls."
540
+ }
541
+ ]
542
+ }
543
+ },
544
+ "required": ["origin", "ref", "install"],
545
+ "additionalProperties": false
546
+ }
157
547
  }
158
548
  ]
159
- }
160
- },
161
- "required": ["origin", "ref", "install"],
162
- "additionalProperties": false
549
+ },
550
+ "allOf": [
551
+ {
552
+ "description": "Tracked Repos, keyed by name, which names the Managed Clone and the `repos:<name>` Item. Each is `{ origin, ref, install, ... }`, or a list of Variants, of which a Machine gets the first that targets it."
553
+ }
554
+ ]
555
+ }
163
556
  },
557
+ "additionalProperties": false,
164
558
  "allOf": [
165
559
  {
166
560
  "description": "Each Tracked Repo is cloned on every targeted Machine and installed from its origin ref."
@@ -216,7 +610,7 @@
216
610
  },
217
611
  "allOf": [
218
612
  {
219
- "description": "Providers whose Items must succeed on a Machine before vp changes there."
613
+ "description": "Providers whose Items must succeed on a Machine before this one changes there."
220
614
  }
221
615
  ]
222
616
  },
@@ -274,7 +668,7 @@
274
668
  }
275
669
  ]
276
670
  },
277
- "globals": {
671
+ "items": {
278
672
  "type": "object",
279
673
  "propertyNames": {
280
674
  "type": "string",
@@ -283,63 +677,187 @@
283
677
  "additionalProperties": {
284
678
  "anyOf": [
285
679
  {
286
- "type": "string",
287
- "minLength": 1
288
- },
289
- {
290
- "type": "object",
291
- "properties": {
292
- "platforms": {
293
- "type": "array",
294
- "prefixItems": [
295
- {
680
+ "anyOf": [
681
+ {
682
+ "type": "object",
683
+ "properties": {
684
+ "platforms": {
685
+ "type": "array",
686
+ "prefixItems": [
687
+ {
688
+ "type": "string",
689
+ "enum": ["darwin", "linux"]
690
+ }
691
+ ],
692
+ "minItems": 1,
693
+ "items": {
694
+ "type": "string",
695
+ "enum": ["darwin", "linux"]
696
+ },
697
+ "allOf": [
698
+ {
699
+ "description": "`darwin`, `linux`, or both."
700
+ }
701
+ ]
702
+ },
703
+ "machines": {
704
+ "type": "array",
705
+ "prefixItems": [
706
+ {
707
+ "type": "string",
708
+ "minLength": 1
709
+ }
710
+ ],
711
+ "minItems": 1,
712
+ "items": {
713
+ "type": "string",
714
+ "minLength": 1
715
+ },
716
+ "allOf": [
717
+ {
718
+ "description": "Machine names from `machines`."
719
+ }
720
+ ]
721
+ },
722
+ "range": {
296
723
  "type": "string",
297
- "enum": ["darwin", "linux"]
724
+ "minLength": 1
298
725
  }
299
- ],
300
- "minItems": 1,
301
- "items": {
302
- "type": "string",
303
- "enum": ["darwin", "linux"]
304
726
  },
305
- "allOf": [
306
- {
307
- "description": "`darwin`, `linux`, or both."
308
- }
309
- ]
727
+ "required": ["range"],
728
+ "additionalProperties": false
310
729
  },
311
- "machines": {
312
- "type": "array",
313
- "prefixItems": [
730
+ {
731
+ "type": "string",
732
+ "minLength": 1
733
+ }
734
+ ]
735
+ },
736
+ {
737
+ "type": "array",
738
+ "prefixItems": [
739
+ {
740
+ "anyOf": [
741
+ {
742
+ "type": "object",
743
+ "properties": {
744
+ "platforms": {
745
+ "type": "array",
746
+ "prefixItems": [
747
+ {
748
+ "type": "string",
749
+ "enum": ["darwin", "linux"]
750
+ }
751
+ ],
752
+ "minItems": 1,
753
+ "items": {
754
+ "type": "string",
755
+ "enum": ["darwin", "linux"]
756
+ },
757
+ "allOf": [
758
+ {
759
+ "description": "`darwin`, `linux`, or both."
760
+ }
761
+ ]
762
+ },
763
+ "machines": {
764
+ "type": "array",
765
+ "prefixItems": [
766
+ {
767
+ "type": "string",
768
+ "minLength": 1
769
+ }
770
+ ],
771
+ "minItems": 1,
772
+ "items": {
773
+ "type": "string",
774
+ "minLength": 1
775
+ },
776
+ "allOf": [
777
+ {
778
+ "description": "Machine names from `machines`."
779
+ }
780
+ ]
781
+ },
782
+ "range": {
783
+ "type": "string",
784
+ "minLength": 1
785
+ }
786
+ },
787
+ "required": ["range"],
788
+ "additionalProperties": false
789
+ },
314
790
  {
315
791
  "type": "string",
316
792
  "minLength": 1
317
793
  }
318
- ],
319
- "minItems": 1,
320
- "items": {
321
- "type": "string",
322
- "minLength": 1
323
- },
324
- "allOf": [
325
- {
326
- "description": "Machine names from `machines`."
327
- }
328
794
  ]
329
- },
330
- "range": {
331
- "type": "string",
332
- "minLength": 1
333
795
  }
334
- },
335
- "required": ["range"],
336
- "additionalProperties": false
796
+ ],
797
+ "minItems": 1,
798
+ "items": {
799
+ "anyOf": [
800
+ {
801
+ "type": "object",
802
+ "properties": {
803
+ "platforms": {
804
+ "type": "array",
805
+ "prefixItems": [
806
+ {
807
+ "type": "string",
808
+ "enum": ["darwin", "linux"]
809
+ }
810
+ ],
811
+ "minItems": 1,
812
+ "items": {
813
+ "type": "string",
814
+ "enum": ["darwin", "linux"]
815
+ },
816
+ "allOf": [
817
+ {
818
+ "description": "`darwin`, `linux`, or both."
819
+ }
820
+ ]
821
+ },
822
+ "machines": {
823
+ "type": "array",
824
+ "prefixItems": [
825
+ {
826
+ "type": "string",
827
+ "minLength": 1
828
+ }
829
+ ],
830
+ "minItems": 1,
831
+ "items": {
832
+ "type": "string",
833
+ "minLength": 1
834
+ },
835
+ "allOf": [
836
+ {
837
+ "description": "Machine names from `machines`."
838
+ }
839
+ ]
840
+ },
841
+ "range": {
842
+ "type": "string",
843
+ "minLength": 1
844
+ }
845
+ },
846
+ "required": ["range"],
847
+ "additionalProperties": false
848
+ },
849
+ {
850
+ "type": "string",
851
+ "minLength": 1
852
+ }
853
+ ]
854
+ }
337
855
  }
338
856
  ]
339
857
  },
340
858
  "allOf": [
341
859
  {
342
- "description": "Global packages, each with a Range, or `{ range, platforms?, machines? }` to target one."
860
+ "description": "Globals, keyed by package. Each is a Range, `{ range, platforms?, machines? }` to target it, or a list of Variants, of which a Machine gets the first that targets it."
343
861
  }
344
862
  ]
345
863
  }
@@ -413,65 +931,193 @@
413
931
  "additionalProperties": {
414
932
  "anyOf": [
415
933
  {
416
- "type": "string",
417
- "enum": ["*", "latest"],
418
- "description": "\"*\" (install when missing, never upgrade) or \"latest\" (brew update, then upgrade on every Ship)"
419
- },
420
- {
421
- "type": "object",
422
- "properties": {
423
- "platforms": {
424
- "type": "array",
425
- "prefixItems": [
426
- {
934
+ "anyOf": [
935
+ {
936
+ "type": "object",
937
+ "properties": {
938
+ "platforms": {
939
+ "type": "array",
940
+ "prefixItems": [
941
+ {
942
+ "type": "string",
943
+ "enum": ["darwin", "linux"]
944
+ }
945
+ ],
946
+ "minItems": 1,
947
+ "items": {
948
+ "type": "string",
949
+ "enum": ["darwin", "linux"]
950
+ },
951
+ "allOf": [
952
+ {
953
+ "description": "`darwin`, `linux`, or both."
954
+ }
955
+ ]
956
+ },
957
+ "machines": {
958
+ "type": "array",
959
+ "prefixItems": [
960
+ {
961
+ "type": "string",
962
+ "minLength": 1
963
+ }
964
+ ],
965
+ "minItems": 1,
966
+ "items": {
967
+ "type": "string",
968
+ "minLength": 1
969
+ },
970
+ "allOf": [
971
+ {
972
+ "description": "Machine names from `machines`."
973
+ }
974
+ ]
975
+ },
976
+ "range": {
427
977
  "type": "string",
428
- "enum": ["darwin", "linux"]
978
+ "enum": ["*", "latest"],
979
+ "description": "\"*\" (install when missing, never upgrade) or \"latest\" (brew update, then upgrade on every Ship)"
429
980
  }
430
- ],
431
- "minItems": 1,
432
- "items": {
433
- "type": "string",
434
- "enum": ["darwin", "linux"]
435
981
  },
436
- "allOf": [
437
- {
438
- "description": "`darwin`, `linux`, or both."
439
- }
440
- ]
982
+ "required": ["range"],
983
+ "additionalProperties": false
441
984
  },
442
- "machines": {
443
- "type": "array",
444
- "prefixItems": [
985
+ {
986
+ "type": "string",
987
+ "enum": ["*", "latest"],
988
+ "description": "\"*\" (install when missing, never upgrade) or \"latest\" (brew update, then upgrade on every Ship)"
989
+ }
990
+ ]
991
+ },
992
+ {
993
+ "type": "array",
994
+ "prefixItems": [
995
+ {
996
+ "anyOf": [
445
997
  {
446
- "type": "string",
447
- "minLength": 1
448
- }
449
- ],
450
- "minItems": 1,
451
- "items": {
452
- "type": "string",
453
- "minLength": 1
454
- },
455
- "allOf": [
998
+ "type": "object",
999
+ "properties": {
1000
+ "platforms": {
1001
+ "type": "array",
1002
+ "prefixItems": [
1003
+ {
1004
+ "type": "string",
1005
+ "enum": ["darwin", "linux"]
1006
+ }
1007
+ ],
1008
+ "minItems": 1,
1009
+ "items": {
1010
+ "type": "string",
1011
+ "enum": ["darwin", "linux"]
1012
+ },
1013
+ "allOf": [
1014
+ {
1015
+ "description": "`darwin`, `linux`, or both."
1016
+ }
1017
+ ]
1018
+ },
1019
+ "machines": {
1020
+ "type": "array",
1021
+ "prefixItems": [
1022
+ {
1023
+ "type": "string",
1024
+ "minLength": 1
1025
+ }
1026
+ ],
1027
+ "minItems": 1,
1028
+ "items": {
1029
+ "type": "string",
1030
+ "minLength": 1
1031
+ },
1032
+ "allOf": [
1033
+ {
1034
+ "description": "Machine names from `machines`."
1035
+ }
1036
+ ]
1037
+ },
1038
+ "range": {
1039
+ "type": "string",
1040
+ "enum": ["*", "latest"],
1041
+ "description": "\"*\" (install when missing, never upgrade) or \"latest\" (brew update, then upgrade on every Ship)"
1042
+ }
1043
+ },
1044
+ "required": ["range"],
1045
+ "additionalProperties": false
1046
+ },
456
1047
  {
457
- "description": "Machine names from `machines`."
1048
+ "type": "string",
1049
+ "enum": ["*", "latest"],
1050
+ "description": "\"*\" (install when missing, never upgrade) or \"latest\" (brew update, then upgrade on every Ship)"
458
1051
  }
459
1052
  ]
460
- },
461
- "range": {
462
- "type": "string",
463
- "enum": ["*", "latest"],
464
- "description": "\"*\" (install when missing, never upgrade) or \"latest\" (brew update, then upgrade on every Ship)"
465
1053
  }
466
- },
467
- "required": ["range"],
468
- "additionalProperties": false
1054
+ ],
1055
+ "minItems": 1,
1056
+ "items": {
1057
+ "anyOf": [
1058
+ {
1059
+ "type": "object",
1060
+ "properties": {
1061
+ "platforms": {
1062
+ "type": "array",
1063
+ "prefixItems": [
1064
+ {
1065
+ "type": "string",
1066
+ "enum": ["darwin", "linux"]
1067
+ }
1068
+ ],
1069
+ "minItems": 1,
1070
+ "items": {
1071
+ "type": "string",
1072
+ "enum": ["darwin", "linux"]
1073
+ },
1074
+ "allOf": [
1075
+ {
1076
+ "description": "`darwin`, `linux`, or both."
1077
+ }
1078
+ ]
1079
+ },
1080
+ "machines": {
1081
+ "type": "array",
1082
+ "prefixItems": [
1083
+ {
1084
+ "type": "string",
1085
+ "minLength": 1
1086
+ }
1087
+ ],
1088
+ "minItems": 1,
1089
+ "items": {
1090
+ "type": "string",
1091
+ "minLength": 1
1092
+ },
1093
+ "allOf": [
1094
+ {
1095
+ "description": "Machine names from `machines`."
1096
+ }
1097
+ ]
1098
+ },
1099
+ "range": {
1100
+ "type": "string",
1101
+ "enum": ["*", "latest"],
1102
+ "description": "\"*\" (install when missing, never upgrade) or \"latest\" (brew update, then upgrade on every Ship)"
1103
+ }
1104
+ },
1105
+ "required": ["range"],
1106
+ "additionalProperties": false
1107
+ },
1108
+ {
1109
+ "type": "string",
1110
+ "enum": ["*", "latest"],
1111
+ "description": "\"*\" (install when missing, never upgrade) or \"latest\" (brew update, then upgrade on every Ship)"
1112
+ }
1113
+ ]
1114
+ }
469
1115
  }
470
1116
  ]
471
1117
  },
472
1118
  "allOf": [
473
1119
  {
474
- "description": "Formulae, each `\"*\"` or `\"latest\"`, or `{ range, platforms?, machines? }` to target one. A tapped name (`owner/tap/name`) taps on install."
1120
+ "description": "Formulae, keyed by name. Each is `\"*\"` or `\"latest\"`, `{ range, platforms?, machines? }` to target it, or a list of Variants, of which a Machine gets the first that targets it. A tapped name (`owner/tap/name`) taps on install."
475
1121
  }
476
1122
  ]
477
1123
  }
@@ -545,65 +1191,193 @@
545
1191
  "additionalProperties": {
546
1192
  "anyOf": [
547
1193
  {
548
- "type": "string",
549
- "enum": ["*", "latest"],
550
- "description": "\"*\" (install when missing, never upgrade) or \"latest\" (brew update, then upgrade on every Ship)"
551
- },
552
- {
553
- "type": "object",
554
- "properties": {
555
- "platforms": {
556
- "type": "array",
557
- "prefixItems": [
558
- {
1194
+ "anyOf": [
1195
+ {
1196
+ "type": "object",
1197
+ "properties": {
1198
+ "platforms": {
1199
+ "type": "array",
1200
+ "prefixItems": [
1201
+ {
1202
+ "type": "string",
1203
+ "enum": ["darwin", "linux"]
1204
+ }
1205
+ ],
1206
+ "minItems": 1,
1207
+ "items": {
1208
+ "type": "string",
1209
+ "enum": ["darwin", "linux"]
1210
+ },
1211
+ "allOf": [
1212
+ {
1213
+ "description": "`darwin`, `linux`, or both."
1214
+ }
1215
+ ]
1216
+ },
1217
+ "machines": {
1218
+ "type": "array",
1219
+ "prefixItems": [
1220
+ {
1221
+ "type": "string",
1222
+ "minLength": 1
1223
+ }
1224
+ ],
1225
+ "minItems": 1,
1226
+ "items": {
1227
+ "type": "string",
1228
+ "minLength": 1
1229
+ },
1230
+ "allOf": [
1231
+ {
1232
+ "description": "Machine names from `machines`."
1233
+ }
1234
+ ]
1235
+ },
1236
+ "range": {
559
1237
  "type": "string",
560
- "enum": ["darwin", "linux"]
1238
+ "enum": ["*", "latest"],
1239
+ "description": "\"*\" (install when missing, never upgrade) or \"latest\" (brew update, then upgrade on every Ship)"
561
1240
  }
562
- ],
563
- "minItems": 1,
564
- "items": {
565
- "type": "string",
566
- "enum": ["darwin", "linux"]
567
1241
  },
568
- "allOf": [
569
- {
570
- "description": "`darwin`, `linux`, or both."
571
- }
572
- ]
1242
+ "required": ["range"],
1243
+ "additionalProperties": false
573
1244
  },
574
- "machines": {
575
- "type": "array",
576
- "prefixItems": [
1245
+ {
1246
+ "type": "string",
1247
+ "enum": ["*", "latest"],
1248
+ "description": "\"*\" (install when missing, never upgrade) or \"latest\" (brew update, then upgrade on every Ship)"
1249
+ }
1250
+ ]
1251
+ },
1252
+ {
1253
+ "type": "array",
1254
+ "prefixItems": [
1255
+ {
1256
+ "anyOf": [
577
1257
  {
578
- "type": "string",
579
- "minLength": 1
580
- }
581
- ],
582
- "minItems": 1,
583
- "items": {
584
- "type": "string",
585
- "minLength": 1
586
- },
587
- "allOf": [
1258
+ "type": "object",
1259
+ "properties": {
1260
+ "platforms": {
1261
+ "type": "array",
1262
+ "prefixItems": [
1263
+ {
1264
+ "type": "string",
1265
+ "enum": ["darwin", "linux"]
1266
+ }
1267
+ ],
1268
+ "minItems": 1,
1269
+ "items": {
1270
+ "type": "string",
1271
+ "enum": ["darwin", "linux"]
1272
+ },
1273
+ "allOf": [
1274
+ {
1275
+ "description": "`darwin`, `linux`, or both."
1276
+ }
1277
+ ]
1278
+ },
1279
+ "machines": {
1280
+ "type": "array",
1281
+ "prefixItems": [
1282
+ {
1283
+ "type": "string",
1284
+ "minLength": 1
1285
+ }
1286
+ ],
1287
+ "minItems": 1,
1288
+ "items": {
1289
+ "type": "string",
1290
+ "minLength": 1
1291
+ },
1292
+ "allOf": [
1293
+ {
1294
+ "description": "Machine names from `machines`."
1295
+ }
1296
+ ]
1297
+ },
1298
+ "range": {
1299
+ "type": "string",
1300
+ "enum": ["*", "latest"],
1301
+ "description": "\"*\" (install when missing, never upgrade) or \"latest\" (brew update, then upgrade on every Ship)"
1302
+ }
1303
+ },
1304
+ "required": ["range"],
1305
+ "additionalProperties": false
1306
+ },
588
1307
  {
589
- "description": "Machine names from `machines`."
1308
+ "type": "string",
1309
+ "enum": ["*", "latest"],
1310
+ "description": "\"*\" (install when missing, never upgrade) or \"latest\" (brew update, then upgrade on every Ship)"
590
1311
  }
591
1312
  ]
592
- },
593
- "range": {
594
- "type": "string",
595
- "enum": ["*", "latest"],
596
- "description": "\"*\" (install when missing, never upgrade) or \"latest\" (brew update, then upgrade on every Ship)"
597
1313
  }
598
- },
599
- "required": ["range"],
600
- "additionalProperties": false
1314
+ ],
1315
+ "minItems": 1,
1316
+ "items": {
1317
+ "anyOf": [
1318
+ {
1319
+ "type": "object",
1320
+ "properties": {
1321
+ "platforms": {
1322
+ "type": "array",
1323
+ "prefixItems": [
1324
+ {
1325
+ "type": "string",
1326
+ "enum": ["darwin", "linux"]
1327
+ }
1328
+ ],
1329
+ "minItems": 1,
1330
+ "items": {
1331
+ "type": "string",
1332
+ "enum": ["darwin", "linux"]
1333
+ },
1334
+ "allOf": [
1335
+ {
1336
+ "description": "`darwin`, `linux`, or both."
1337
+ }
1338
+ ]
1339
+ },
1340
+ "machines": {
1341
+ "type": "array",
1342
+ "prefixItems": [
1343
+ {
1344
+ "type": "string",
1345
+ "minLength": 1
1346
+ }
1347
+ ],
1348
+ "minItems": 1,
1349
+ "items": {
1350
+ "type": "string",
1351
+ "minLength": 1
1352
+ },
1353
+ "allOf": [
1354
+ {
1355
+ "description": "Machine names from `machines`."
1356
+ }
1357
+ ]
1358
+ },
1359
+ "range": {
1360
+ "type": "string",
1361
+ "enum": ["*", "latest"],
1362
+ "description": "\"*\" (install when missing, never upgrade) or \"latest\" (brew update, then upgrade on every Ship)"
1363
+ }
1364
+ },
1365
+ "required": ["range"],
1366
+ "additionalProperties": false
1367
+ },
1368
+ {
1369
+ "type": "string",
1370
+ "enum": ["*", "latest"],
1371
+ "description": "\"*\" (install when missing, never upgrade) or \"latest\" (brew update, then upgrade on every Ship)"
1372
+ }
1373
+ ]
1374
+ }
601
1375
  }
602
1376
  ]
603
1377
  },
604
1378
  "allOf": [
605
1379
  {
606
- "description": "Casks, each `\"*\"` or `\"latest\"`, or `{ range, platforms?, machines? }` to target one. A tapped name (`owner/tap/name`) taps on install."
1380
+ "description": "Casks, keyed by name. Each is `\"*\"` or `\"latest\"`, `{ range, platforms?, machines? }` to target it, or a list of Variants, of which a Machine gets the first that targets it. A tapped name (`owner/tap/name`) taps on install."
607
1381
  }
608
1382
  ]
609
1383
  }