staticforge 0.0.0-stage → 0.1.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 (123) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +49 -2
  3. package/dist/.tsbuildinfo +1 -0
  4. package/dist/bin.d.ts +3 -0
  5. package/dist/bin.d.ts.map +1 -0
  6. package/dist/bin.js +4 -0
  7. package/dist/bin.js.map +1 -0
  8. package/dist/browser.d.ts +3 -0
  9. package/dist/browser.d.ts.map +1 -0
  10. package/dist/browser.js +18 -0
  11. package/dist/browser.js.map +1 -0
  12. package/dist/cloud.d.ts +31 -0
  13. package/dist/cloud.d.ts.map +1 -0
  14. package/dist/cloud.js +102 -0
  15. package/dist/cloud.js.map +1 -0
  16. package/dist/command.d.ts +54 -0
  17. package/dist/command.d.ts.map +1 -0
  18. package/dist/command.js +70 -0
  19. package/dist/command.js.map +1 -0
  20. package/dist/commands/build.d.ts +4 -0
  21. package/dist/commands/build.d.ts.map +1 -0
  22. package/dist/commands/build.js +54 -0
  23. package/dist/commands/build.js.map +1 -0
  24. package/dist/commands/check.d.ts +4 -0
  25. package/dist/commands/check.d.ts.map +1 -0
  26. package/dist/commands/check.js +100 -0
  27. package/dist/commands/check.js.map +1 -0
  28. package/dist/commands/config.d.ts +4 -0
  29. package/dist/commands/config.d.ts.map +1 -0
  30. package/dist/commands/config.js +27 -0
  31. package/dist/commands/config.js.map +1 -0
  32. package/dist/commands/deploy.d.ts +4 -0
  33. package/dist/commands/deploy.d.ts.map +1 -0
  34. package/dist/commands/deploy.js +184 -0
  35. package/dist/commands/deploy.js.map +1 -0
  36. package/dist/commands/dev.d.ts +4 -0
  37. package/dist/commands/dev.d.ts.map +1 -0
  38. package/dist/commands/dev.js +81 -0
  39. package/dist/commands/dev.js.map +1 -0
  40. package/dist/commands/iac.d.ts +4 -0
  41. package/dist/commands/iac.d.ts.map +1 -0
  42. package/dist/commands/iac.js +64 -0
  43. package/dist/commands/iac.js.map +1 -0
  44. package/dist/commands/init.d.ts +4 -0
  45. package/dist/commands/init.d.ts.map +1 -0
  46. package/dist/commands/init.js +55 -0
  47. package/dist/commands/init.js.map +1 -0
  48. package/dist/commands/mcp.d.ts +4 -0
  49. package/dist/commands/mcp.d.ts.map +1 -0
  50. package/dist/commands/mcp.js +46 -0
  51. package/dist/commands/mcp.js.map +1 -0
  52. package/dist/commands/new.d.ts +4 -0
  53. package/dist/commands/new.d.ts.map +1 -0
  54. package/dist/commands/new.js +30 -0
  55. package/dist/commands/new.js.map +1 -0
  56. package/dist/commands/preview.d.ts +4 -0
  57. package/dist/commands/preview.d.ts.map +1 -0
  58. package/dist/commands/preview.js +34 -0
  59. package/dist/commands/preview.js.map +1 -0
  60. package/dist/commands/provision.d.ts +11 -0
  61. package/dist/commands/provision.d.ts.map +1 -0
  62. package/dist/commands/provision.js +133 -0
  63. package/dist/commands/provision.js.map +1 -0
  64. package/dist/commands/schema.d.ts +4 -0
  65. package/dist/commands/schema.d.ts.map +1 -0
  66. package/dist/commands/schema.js +21 -0
  67. package/dist/commands/schema.js.map +1 -0
  68. package/dist/commands/version.d.ts +4 -0
  69. package/dist/commands/version.d.ts.map +1 -0
  70. package/dist/commands/version.js +17 -0
  71. package/dist/commands/version.js.map +1 -0
  72. package/dist/context.d.ts +27 -0
  73. package/dist/context.d.ts.map +1 -0
  74. package/dist/context.js +19 -0
  75. package/dist/context.js.map +1 -0
  76. package/dist/io.d.ts +19 -0
  77. package/dist/io.d.ts.map +1 -0
  78. package/dist/io.js +34 -0
  79. package/dist/io.js.map +1 -0
  80. package/dist/main.d.ts +10 -0
  81. package/dist/main.d.ts.map +1 -0
  82. package/dist/main.js +81 -0
  83. package/dist/main.js.map +1 -0
  84. package/dist/mcp/invoke.d.ts +29 -0
  85. package/dist/mcp/invoke.d.ts.map +1 -0
  86. package/dist/mcp/invoke.js +82 -0
  87. package/dist/mcp/invoke.js.map +1 -0
  88. package/dist/mcp/server.d.ts +25 -0
  89. package/dist/mcp/server.d.ts.map +1 -0
  90. package/dist/mcp/server.js +531 -0
  91. package/dist/mcp/server.js.map +1 -0
  92. package/dist/output.d.ts +17 -0
  93. package/dist/output.d.ts.map +1 -0
  94. package/dist/output.js +37 -0
  95. package/dist/output.js.map +1 -0
  96. package/dist/paths.d.ts +3 -0
  97. package/dist/paths.d.ts.map +1 -0
  98. package/dist/paths.js +9 -0
  99. package/dist/paths.js.map +1 -0
  100. package/dist/project.d.ts +10 -0
  101. package/dist/project.d.ts.map +1 -0
  102. package/dist/project.js +20 -0
  103. package/dist/project.js.map +1 -0
  104. package/dist/schemas.d.ts +16 -0
  105. package/dist/schemas.d.ts.map +1 -0
  106. package/dist/schemas.js +241 -0
  107. package/dist/schemas.js.map +1 -0
  108. package/dist/server-options.d.ts +12 -0
  109. package/dist/server-options.d.ts.map +1 -0
  110. package/dist/server-options.js +26 -0
  111. package/dist/server-options.js.map +1 -0
  112. package/dist/version.d.ts +3 -0
  113. package/dist/version.d.ts.map +1 -0
  114. package/dist/version.js +4 -0
  115. package/dist/version.js.map +1 -0
  116. package/dist/workers.d.ts +7 -0
  117. package/dist/workers.d.ts.map +1 -0
  118. package/dist/workers.js +20 -0
  119. package/dist/workers.js.map +1 -0
  120. package/package.json +64 -3
  121. package/schema/diagnostics.schema.json +183 -0
  122. package/schema/output.schema.json +1537 -0
  123. package/schema/staticforge.schema.json +649 -0
@@ -0,0 +1,649 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "type": "object",
4
+ "properties": {
5
+ "$schema": {
6
+ "type": "string"
7
+ },
8
+ "site": {
9
+ "type": "object",
10
+ "properties": {
11
+ "title": {
12
+ "type": "string",
13
+ "minLength": 1
14
+ },
15
+ "baseUrl": {
16
+ "type": "string",
17
+ "format": "uri",
18
+ "description": "Absolute production URL, used for canonical links, feeds and sitemaps."
19
+ },
20
+ "language": {
21
+ "default": "en",
22
+ "type": "string",
23
+ "pattern": "^[a-zA-Z]{2,3}(-[a-zA-Z0-9]{2,8})*$"
24
+ },
25
+ "description": {
26
+ "type": "string"
27
+ },
28
+ "author": {
29
+ "type": "string"
30
+ }
31
+ },
32
+ "required": [
33
+ "title",
34
+ "baseUrl"
35
+ ],
36
+ "additionalProperties": false
37
+ },
38
+ "theme": {
39
+ "default": "default",
40
+ "description": "\"default\", a path to a theme directory, or an npm package name.",
41
+ "type": "string",
42
+ "minLength": 1
43
+ },
44
+ "build": {
45
+ "default": {},
46
+ "type": "object",
47
+ "properties": {
48
+ "outDir": {
49
+ "default": "dist",
50
+ "type": "string",
51
+ "minLength": 1
52
+ },
53
+ "cleanUrls": {
54
+ "default": true,
55
+ "type": "boolean"
56
+ },
57
+ "trailingSlash": {
58
+ "default": "always",
59
+ "type": "string",
60
+ "enum": [
61
+ "always",
62
+ "never"
63
+ ]
64
+ },
65
+ "minify": {
66
+ "default": true,
67
+ "type": "boolean"
68
+ },
69
+ "drafts": {
70
+ "default": false,
71
+ "type": "boolean"
72
+ },
73
+ "workers": {
74
+ "default": "auto",
75
+ "description": "Worker threads for parsing, rendering and checking: \"auto\" (all cores but one, at most 8) or a number; 0 uses the main thread only. SFORGE_WORKERS overrides it.",
76
+ "anyOf": [
77
+ {
78
+ "type": "integer",
79
+ "minimum": 0,
80
+ "maximum": 64
81
+ },
82
+ {
83
+ "type": "string",
84
+ "const": "auto"
85
+ }
86
+ ]
87
+ }
88
+ },
89
+ "additionalProperties": false
90
+ },
91
+ "images": {
92
+ "default": {},
93
+ "type": "object",
94
+ "properties": {
95
+ "formats": {
96
+ "default": [
97
+ "avif",
98
+ "webp"
99
+ ],
100
+ "minItems": 1,
101
+ "type": "array",
102
+ "items": {
103
+ "type": "string",
104
+ "enum": [
105
+ "avif",
106
+ "webp",
107
+ "jpeg",
108
+ "png"
109
+ ]
110
+ }
111
+ },
112
+ "widths": {
113
+ "default": [
114
+ 480,
115
+ 960,
116
+ 1600
117
+ ],
118
+ "minItems": 1,
119
+ "type": "array",
120
+ "items": {
121
+ "type": "integer",
122
+ "minimum": 16,
123
+ "maximum": 8192
124
+ }
125
+ },
126
+ "quality": {
127
+ "default": 75,
128
+ "type": "integer",
129
+ "minimum": 1,
130
+ "maximum": 100
131
+ },
132
+ "optimize": {
133
+ "default": true,
134
+ "description": "Resize content images into responsive AVIF/WebP variants.",
135
+ "type": "boolean"
136
+ },
137
+ "sizes": {
138
+ "default": "(min-width: 45rem) 45rem, 100vw",
139
+ "description": "The `sizes` attribute of responsive images: their width in the layout.",
140
+ "type": "string",
141
+ "minLength": 1
142
+ }
143
+ },
144
+ "additionalProperties": false
145
+ },
146
+ "styles": {
147
+ "default": [],
148
+ "description": "Stylesheets linked on every page, after the theme's, e.g. \"/assets/css/site.css\".",
149
+ "type": "array",
150
+ "items": {
151
+ "type": "string",
152
+ "pattern": "^(\\/|https?:\\/\\/)"
153
+ }
154
+ },
155
+ "scripts": {
156
+ "default": [],
157
+ "description": "ES module scripts loaded on every page, after the theme's.",
158
+ "type": "array",
159
+ "items": {
160
+ "type": "string",
161
+ "pattern": "^(\\/|https?:\\/\\/)"
162
+ }
163
+ },
164
+ "collections": {
165
+ "default": {},
166
+ "type": "object",
167
+ "propertyNames": {
168
+ "type": "string",
169
+ "pattern": "^[a-z][a-z0-9-]{0,31}$"
170
+ },
171
+ "additionalProperties": {
172
+ "type": "object",
173
+ "properties": {
174
+ "dir": {
175
+ "type": "string",
176
+ "minLength": 1,
177
+ "description": "Content directory of the collection, relative to the project."
178
+ },
179
+ "sortBy": {
180
+ "default": "date",
181
+ "type": "string",
182
+ "enum": [
183
+ "date",
184
+ "title",
185
+ "order"
186
+ ]
187
+ },
188
+ "perPage": {
189
+ "default": 10,
190
+ "type": "integer",
191
+ "minimum": 1,
192
+ "maximum": 500
193
+ },
194
+ "feed": {
195
+ "default": {},
196
+ "type": "object",
197
+ "properties": {
198
+ "rss": {
199
+ "default": true,
200
+ "type": "boolean"
201
+ },
202
+ "atom": {
203
+ "default": true,
204
+ "type": "boolean"
205
+ }
206
+ },
207
+ "additionalProperties": false
208
+ }
209
+ },
210
+ "required": [
211
+ "dir"
212
+ ],
213
+ "additionalProperties": false
214
+ }
215
+ },
216
+ "search": {
217
+ "default": {},
218
+ "type": "object",
219
+ "properties": {
220
+ "enabled": {
221
+ "default": true,
222
+ "type": "boolean"
223
+ }
224
+ },
225
+ "additionalProperties": false
226
+ },
227
+ "check": {
228
+ "default": {},
229
+ "type": "object",
230
+ "properties": {
231
+ "wcag": {
232
+ "default": "2.2-AA",
233
+ "type": "string",
234
+ "enum": [
235
+ "2.1-AA",
236
+ "2.2-AA",
237
+ "2.2-AAA"
238
+ ]
239
+ },
240
+ "failOn": {
241
+ "default": "error",
242
+ "type": "string",
243
+ "enum": [
244
+ "error",
245
+ "warning"
246
+ ]
247
+ },
248
+ "ignore": {
249
+ "default": [],
250
+ "description": "Rule IDs to skip.",
251
+ "type": "array",
252
+ "items": {
253
+ "type": "string",
254
+ "minLength": 1
255
+ }
256
+ },
257
+ "headless": {
258
+ "default": true,
259
+ "description": "Run rendered (axe-core + Chromium) checks.",
260
+ "type": "boolean"
261
+ }
262
+ },
263
+ "additionalProperties": false
264
+ },
265
+ "security": {
266
+ "description": "Security headers sent by the hosting providers.",
267
+ "default": {},
268
+ "type": "object",
269
+ "properties": {
270
+ "contentSecurityPolicy": {
271
+ "default": "default-src 'self'; script-src 'self'; style-src 'self'; style-src-attr 'unsafe-inline'; img-src 'self' data: https:; media-src 'self' https:; frame-src 'self' https:; object-src 'none'; base-uri 'self'; form-action 'self'; frame-ancestors 'self'; upgrade-insecure-requests",
272
+ "description": "Content-Security-Policy of every page; false sends none. The search page also gets 'wasm-unsafe-eval' (Pagefind).",
273
+ "anyOf": [
274
+ {
275
+ "type": "string",
276
+ "minLength": 1
277
+ },
278
+ {
279
+ "type": "boolean",
280
+ "const": false
281
+ }
282
+ ]
283
+ },
284
+ "hsts": {
285
+ "description": "Strict-Transport-Security; false sends none.",
286
+ "default": {},
287
+ "anyOf": [
288
+ {
289
+ "type": "object",
290
+ "properties": {
291
+ "maxAge": {
292
+ "default": 63072000,
293
+ "type": "integer",
294
+ "minimum": 0,
295
+ "maximum": 9007199254740991
296
+ },
297
+ "includeSubDomains": {
298
+ "default": false,
299
+ "type": "boolean"
300
+ },
301
+ "preload": {
302
+ "default": false,
303
+ "type": "boolean"
304
+ }
305
+ },
306
+ "additionalProperties": false
307
+ },
308
+ {
309
+ "type": "boolean",
310
+ "const": false
311
+ }
312
+ ]
313
+ },
314
+ "referrerPolicy": {
315
+ "default": "strict-origin-when-cross-origin",
316
+ "type": "string",
317
+ "enum": [
318
+ "no-referrer",
319
+ "no-referrer-when-downgrade",
320
+ "origin",
321
+ "origin-when-cross-origin",
322
+ "same-origin",
323
+ "strict-origin",
324
+ "strict-origin-when-cross-origin",
325
+ "unsafe-url"
326
+ ]
327
+ },
328
+ "frameOptions": {
329
+ "default": "SAMEORIGIN",
330
+ "anyOf": [
331
+ {
332
+ "type": "string",
333
+ "enum": [
334
+ "DENY",
335
+ "SAMEORIGIN"
336
+ ]
337
+ },
338
+ {
339
+ "type": "boolean",
340
+ "const": false
341
+ }
342
+ ]
343
+ },
344
+ "permissionsPolicy": {
345
+ "default": "camera=(), microphone=(), geolocation=(), payment=(), usb=()",
346
+ "anyOf": [
347
+ {
348
+ "type": "string",
349
+ "minLength": 1
350
+ },
351
+ {
352
+ "type": "boolean",
353
+ "const": false
354
+ }
355
+ ]
356
+ }
357
+ },
358
+ "additionalProperties": false
359
+ },
360
+ "iac": {
361
+ "default": {},
362
+ "type": "object",
363
+ "properties": {
364
+ "name": {
365
+ "description": "Project name used in state keys and cloud resource names. Defaults to the host of site.baseUrl.",
366
+ "type": "string",
367
+ "pattern": "^[a-z][a-z0-9-]{0,39}$"
368
+ },
369
+ "engine": {
370
+ "default": "tofu",
371
+ "type": "string",
372
+ "enum": [
373
+ "tofu",
374
+ "terraform"
375
+ ]
376
+ },
377
+ "version": {
378
+ "description": "Override the pinned engine version.",
379
+ "type": "string"
380
+ },
381
+ "vendor": {
382
+ "default": false,
383
+ "description": "Copy HCL modules into the workspace for auditing.",
384
+ "type": "boolean"
385
+ }
386
+ },
387
+ "additionalProperties": false
388
+ },
389
+ "targets": {
390
+ "default": {},
391
+ "type": "object",
392
+ "propertyNames": {
393
+ "type": "string",
394
+ "pattern": "^[a-z][a-z0-9-]{0,31}$"
395
+ },
396
+ "additionalProperties": {
397
+ "oneOf": [
398
+ {
399
+ "type": "object",
400
+ "properties": {
401
+ "provider": {
402
+ "type": "string",
403
+ "const": "aws"
404
+ },
405
+ "region": {
406
+ "type": "string",
407
+ "pattern": "^[a-z]{2}(-[a-z]+)+-\\d$"
408
+ },
409
+ "domain": {
410
+ "description": "Custom domain. Omit to use the *.cloudfront.net URL.",
411
+ "type": "string",
412
+ "pattern": "^(?=.{1,253}$)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z]{2,63}$"
413
+ },
414
+ "hostedZone": {
415
+ "description": "Route 53 hosted zone for automatic DNS validation and alias records.",
416
+ "type": "string",
417
+ "pattern": "^(?=.{1,253}$)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z]{2,63}$"
418
+ },
419
+ "previewDomain": {
420
+ "description": "Wildcard parent for PR previews (pr-<n>.<previewDomain>). Requires a custom domain.",
421
+ "type": "string",
422
+ "pattern": "^(?=.{1,253}$)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z]{2,63}$"
423
+ },
424
+ "retainVersions": {
425
+ "default": 10,
426
+ "type": "integer",
427
+ "minimum": 1,
428
+ "maximum": 100
429
+ },
430
+ "logging": {
431
+ "default": false,
432
+ "description": "Enable CloudFront standard access logs.",
433
+ "type": "boolean"
434
+ },
435
+ "wafWebAclArn": {
436
+ "type": "string",
437
+ "format": "starts_with",
438
+ "pattern": "^arn:aws:wafv2:.*"
439
+ },
440
+ "state": {
441
+ "description": "Remote state backend (S3 with native locking), created by --bootstrap-state.",
442
+ "default": {},
443
+ "type": "object",
444
+ "properties": {
445
+ "bucket": {
446
+ "description": "State bucket. Defaults to \"sforge-state-<accountId>-<region>\".",
447
+ "type": "string",
448
+ "pattern": "^[a-z0-9][a-z0-9.-]{1,61}[a-z0-9]$"
449
+ },
450
+ "region": {
451
+ "description": "Region of the state bucket. Defaults to the target's region.",
452
+ "type": "string",
453
+ "pattern": "^[a-z]{2}(-[a-z]+)+-\\d$"
454
+ },
455
+ "kmsKeyArn": {
456
+ "description": "Encrypt state with this KMS key instead of SSE-S3.",
457
+ "type": "string",
458
+ "format": "starts_with",
459
+ "pattern": "^arn:aws:kms:.*"
460
+ }
461
+ },
462
+ "additionalProperties": false
463
+ },
464
+ "ci": {
465
+ "type": "object",
466
+ "properties": {
467
+ "repo": {
468
+ "type": "string",
469
+ "pattern": "^[A-Za-z0-9_.-]+\\/[A-Za-z0-9_.-]+$",
470
+ "description": "GitHub repository allowed to deploy, as \"owner/repo\"."
471
+ },
472
+ "branches": {
473
+ "default": [
474
+ "main"
475
+ ],
476
+ "description": "Branches whose workflows may deploy.",
477
+ "type": "array",
478
+ "items": {
479
+ "type": "string",
480
+ "minLength": 1
481
+ }
482
+ },
483
+ "environments": {
484
+ "default": [],
485
+ "description": "GitHub deployment environments whose workflows may deploy.",
486
+ "type": "array",
487
+ "items": {
488
+ "type": "string",
489
+ "minLength": 1
490
+ }
491
+ },
492
+ "pullRequests": {
493
+ "default": true,
494
+ "description": "Allow pull_request workflows to deploy previews.",
495
+ "type": "boolean"
496
+ }
497
+ },
498
+ "required": [
499
+ "repo"
500
+ ],
501
+ "additionalProperties": false
502
+ }
503
+ },
504
+ "required": [
505
+ "provider",
506
+ "region"
507
+ ],
508
+ "additionalProperties": false
509
+ },
510
+ {
511
+ "type": "object",
512
+ "properties": {
513
+ "provider": {
514
+ "type": "string",
515
+ "const": "azure"
516
+ },
517
+ "subscriptionId": {
518
+ "description": "Defaults to the subscription of the active credential.",
519
+ "type": "string",
520
+ "format": "uuid",
521
+ "pattern": "^([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[1-8][0-9a-fA-F]{3}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}|00000000-0000-0000-0000-000000000000|ffffffff-ffff-ffff-ffff-ffffffffffff)$"
522
+ },
523
+ "resourceGroup": {
524
+ "type": "string",
525
+ "minLength": 1,
526
+ "maxLength": 90
527
+ },
528
+ "createResourceGroup": {
529
+ "default": true,
530
+ "description": "Create the resource group (and delete it on destroy). False uses an existing one.",
531
+ "type": "boolean"
532
+ },
533
+ "location": {
534
+ "type": "string",
535
+ "minLength": 1,
536
+ "description": "Azure region, e.g. \"westeurope\". Static Web Apps exist in westus2, centralus, eastus2, westeurope and eastasia."
537
+ },
538
+ "sku": {
539
+ "default": "Free",
540
+ "type": "string",
541
+ "enum": [
542
+ "Free",
543
+ "Standard"
544
+ ]
545
+ },
546
+ "retainVersions": {
547
+ "default": 10,
548
+ "description": "Deployed versions kept in the history that rollback chooses from.",
549
+ "type": "integer",
550
+ "minimum": 1,
551
+ "maximum": 100
552
+ },
553
+ "domain": {
554
+ "type": "string",
555
+ "pattern": "^(?=.{1,253}$)(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z]{2,63}$"
556
+ },
557
+ "dnsZone": {
558
+ "description": "Azure DNS zone resource ID for automatic CNAME records.",
559
+ "type": "string"
560
+ },
561
+ "state": {
562
+ "description": "Remote state backend (Azure Blob Storage), created by --bootstrap-state.",
563
+ "default": {},
564
+ "type": "object",
565
+ "properties": {
566
+ "resourceGroup": {
567
+ "description": "Defaults to \"sforge-state\".",
568
+ "type": "string",
569
+ "minLength": 1,
570
+ "maxLength": 90
571
+ },
572
+ "storageAccount": {
573
+ "description": "Defaults to \"sfstate\" + a hash of the subscription ID.",
574
+ "type": "string",
575
+ "pattern": "^[a-z0-9]{3,24}$"
576
+ },
577
+ "container": {
578
+ "default": "tfstate",
579
+ "type": "string",
580
+ "minLength": 3,
581
+ "maxLength": 63
582
+ },
583
+ "location": {
584
+ "description": "Region of the state storage account. Defaults to the target's location; set it when Azure is not accepting new storage accounts there.",
585
+ "type": "string",
586
+ "minLength": 1
587
+ }
588
+ },
589
+ "additionalProperties": false
590
+ },
591
+ "ci": {
592
+ "type": "object",
593
+ "properties": {
594
+ "repo": {
595
+ "type": "string",
596
+ "pattern": "^[A-Za-z0-9_.-]+\\/[A-Za-z0-9_.-]+$",
597
+ "description": "GitHub repository allowed to deploy, as \"owner/repo\"."
598
+ },
599
+ "branches": {
600
+ "default": [
601
+ "main"
602
+ ],
603
+ "description": "Branches whose workflows may deploy.",
604
+ "type": "array",
605
+ "items": {
606
+ "type": "string",
607
+ "minLength": 1
608
+ }
609
+ },
610
+ "environments": {
611
+ "default": [],
612
+ "description": "GitHub deployment environments whose workflows may deploy.",
613
+ "type": "array",
614
+ "items": {
615
+ "type": "string",
616
+ "minLength": 1
617
+ }
618
+ },
619
+ "pullRequests": {
620
+ "default": true,
621
+ "description": "Allow pull_request workflows to deploy previews.",
622
+ "type": "boolean"
623
+ }
624
+ },
625
+ "required": [
626
+ "repo"
627
+ ],
628
+ "additionalProperties": false
629
+ }
630
+ },
631
+ "required": [
632
+ "provider",
633
+ "resourceGroup",
634
+ "location"
635
+ ],
636
+ "additionalProperties": false
637
+ }
638
+ ]
639
+ }
640
+ }
641
+ },
642
+ "required": [
643
+ "site"
644
+ ],
645
+ "additionalProperties": false,
646
+ "description": "staticforge project configuration",
647
+ "$id": "urn:staticforge:schema:config:v1",
648
+ "title": "staticforge configuration"
649
+ }