@rm-industries/create-forge 1.0.1 → 1.0.3
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/README.md +23 -6
- package/dist/index.mjs +105 -27
- package/dist/index.mjs.map +1 -1
- package/dist/template/.github/actions/setup-project/action.yml +6 -1
- package/dist/template/.github/dependabot.yml +1 -1
- package/dist/template/.github/workflows/automation.yml +0 -20
- package/dist/template/.github/workflows/project.yml +213 -33
- package/dist/template/.github/workflows/security.yml +7 -0
- package/dist/template/README.md +30 -33
- package/dist/template/docs/github-pages.md +4 -2
- package/dist/template/docs/guides/quality-and-troubleshooting.md +13 -7
- package/dist/template/package-lock.json +783 -848
- package/dist/template/package.json +15 -14
- package/dist/template/playwright.config.ts +2 -1
- package/dist/template/playwright.smoke.config.ts +17 -0
- package/dist/template/src/integrations/sveltia/config.ts +1 -1
- package/dist/template/tests/smoke/deployment.spec.ts +26 -0
- package/package.json +2 -2
|
@@ -5,19 +5,28 @@ on: # yamllint disable-line rule:truthy
|
|
|
5
5
|
pull_request:
|
|
6
6
|
branches:
|
|
7
7
|
- main
|
|
8
|
+
paths:
|
|
9
|
+
- '__RM_INDUSTRIES_FORGE_TEMPLATE_V1_PROJECT_PATH_FILTER__'
|
|
10
|
+
- '.github/actions/setup-project/**'
|
|
11
|
+
- '.github/workflows/project.yml'
|
|
8
12
|
push:
|
|
9
13
|
branches:
|
|
10
14
|
- main
|
|
15
|
+
paths:
|
|
16
|
+
- '__RM_INDUSTRIES_FORGE_TEMPLATE_V1_PROJECT_PATH_FILTER__'
|
|
17
|
+
- '.github/actions/setup-project/**'
|
|
18
|
+
- '.github/workflows/project.yml'
|
|
11
19
|
|
|
12
20
|
permissions: {}
|
|
13
21
|
|
|
14
22
|
concurrency:
|
|
15
23
|
group: ${{ github.workflow }}-${{ github.ref }}
|
|
16
|
-
cancel-in-progress:
|
|
24
|
+
cancel-in-progress: ${{ github.event_name == 'pull_request' }}
|
|
17
25
|
|
|
18
26
|
defaults:
|
|
19
27
|
run:
|
|
20
28
|
shell: bash
|
|
29
|
+
working-directory: __RM_INDUSTRIES_FORGE_TEMPLATE_V1_PROJECT_DIRECTORY__
|
|
21
30
|
|
|
22
31
|
jobs:
|
|
23
32
|
format:
|
|
@@ -62,8 +71,8 @@ jobs:
|
|
|
62
71
|
- name: Check spelling
|
|
63
72
|
run: npm run spellcheck
|
|
64
73
|
|
|
65
|
-
|
|
66
|
-
name:
|
|
74
|
+
lint-code:
|
|
75
|
+
name: Lint code
|
|
67
76
|
runs-on: ubuntu-latest
|
|
68
77
|
|
|
69
78
|
permissions:
|
|
@@ -80,8 +89,106 @@ jobs:
|
|
|
80
89
|
with:
|
|
81
90
|
node-version: '26.x'
|
|
82
91
|
|
|
83
|
-
- name:
|
|
84
|
-
run: npm run
|
|
92
|
+
- name: Lint code
|
|
93
|
+
run: npm run lint:code
|
|
94
|
+
|
|
95
|
+
lint-styles:
|
|
96
|
+
name: Lint styles
|
|
97
|
+
runs-on: ubuntu-latest
|
|
98
|
+
permissions:
|
|
99
|
+
contents: read
|
|
100
|
+
steps:
|
|
101
|
+
- name: Checkout repository
|
|
102
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
103
|
+
with:
|
|
104
|
+
persist-credentials: false
|
|
105
|
+
- name: Setup project
|
|
106
|
+
uses: $/.github/actions/setup-project
|
|
107
|
+
with:
|
|
108
|
+
node-version: '26.x'
|
|
109
|
+
- name: Lint styles
|
|
110
|
+
run: npm run lint:css
|
|
111
|
+
|
|
112
|
+
lint-markdown:
|
|
113
|
+
name: Lint Markdown
|
|
114
|
+
runs-on: ubuntu-latest
|
|
115
|
+
permissions:
|
|
116
|
+
contents: read
|
|
117
|
+
steps:
|
|
118
|
+
- name: Checkout repository
|
|
119
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
120
|
+
with:
|
|
121
|
+
persist-credentials: false
|
|
122
|
+
- name: Setup project
|
|
123
|
+
uses: $/.github/actions/setup-project
|
|
124
|
+
with:
|
|
125
|
+
node-version: '26.x'
|
|
126
|
+
- name: Lint source Markdown
|
|
127
|
+
run: npm run lint:markdown
|
|
128
|
+
|
|
129
|
+
audit-unused:
|
|
130
|
+
name: Audit unused code
|
|
131
|
+
runs-on: ubuntu-latest
|
|
132
|
+
permissions:
|
|
133
|
+
contents: read
|
|
134
|
+
steps:
|
|
135
|
+
- name: Checkout repository
|
|
136
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
137
|
+
with:
|
|
138
|
+
persist-credentials: false
|
|
139
|
+
- name: Setup project
|
|
140
|
+
uses: $/.github/actions/setup-project
|
|
141
|
+
with:
|
|
142
|
+
node-version: '26.x'
|
|
143
|
+
- name: Audit unused code and dependencies
|
|
144
|
+
run: npm run audit:unused
|
|
145
|
+
|
|
146
|
+
typecheck:
|
|
147
|
+
name: Type-check
|
|
148
|
+
runs-on: ubuntu-latest
|
|
149
|
+
permissions:
|
|
150
|
+
contents: read
|
|
151
|
+
steps:
|
|
152
|
+
- name: Checkout repository
|
|
153
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
154
|
+
with:
|
|
155
|
+
persist-credentials: false
|
|
156
|
+
- name: Setup project
|
|
157
|
+
uses: $/.github/actions/setup-project
|
|
158
|
+
with:
|
|
159
|
+
node-version: '26.x'
|
|
160
|
+
- name: Check TypeScript and Astro diagnostics
|
|
161
|
+
run: npm run typecheck
|
|
162
|
+
|
|
163
|
+
dependency-audit:
|
|
164
|
+
name: Dependency audit
|
|
165
|
+
runs-on: ubuntu-latest
|
|
166
|
+
|
|
167
|
+
permissions:
|
|
168
|
+
contents: read
|
|
169
|
+
|
|
170
|
+
steps:
|
|
171
|
+
- name: Checkout repository
|
|
172
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
173
|
+
with:
|
|
174
|
+
persist-credentials: false
|
|
175
|
+
|
|
176
|
+
- name: Setup project
|
|
177
|
+
uses: $/.github/actions/setup-project
|
|
178
|
+
with:
|
|
179
|
+
node-version: '26.x'
|
|
180
|
+
|
|
181
|
+
- name: Audit dependencies
|
|
182
|
+
id: audit
|
|
183
|
+
continue-on-error: true
|
|
184
|
+
run: npm run audit
|
|
185
|
+
|
|
186
|
+
- name: Report dependency audit
|
|
187
|
+
if: steps.audit.outcome == 'failure'
|
|
188
|
+
run: |
|
|
189
|
+
echo '::warning title=Dependency security findings::Review Dependabot alerts and the audit output. Dependency findings are reported here but do not block pull-request remediation.'
|
|
190
|
+
echo '## Dependency security findings' >> "$GITHUB_STEP_SUMMARY"
|
|
191
|
+
echo 'The dependency audit found blocking-severity advisories. Review the audit output and Dependabot alerts. Release security gates remain blocking.' >> "$GITHUB_STEP_SUMMARY"
|
|
85
192
|
|
|
86
193
|
unit-tests:
|
|
87
194
|
name: Unit tests and coverage
|
|
@@ -109,7 +216,7 @@ jobs:
|
|
|
109
216
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
110
217
|
with:
|
|
111
218
|
name: unit-coverage
|
|
112
|
-
path: coverage
|
|
219
|
+
path: __RM_INDUSTRIES_FORGE_TEMPLATE_V1_PROJECT_DIRECTORY__/coverage
|
|
113
220
|
if-no-files-found: error
|
|
114
221
|
retention-days: 7
|
|
115
222
|
|
|
@@ -117,8 +224,13 @@ jobs:
|
|
|
117
224
|
name: Production build
|
|
118
225
|
needs:
|
|
119
226
|
- format
|
|
227
|
+
- lint-code
|
|
228
|
+
- lint-styles
|
|
229
|
+
- lint-markdown
|
|
120
230
|
- spellcheck
|
|
121
|
-
-
|
|
231
|
+
- audit-unused
|
|
232
|
+
- typecheck
|
|
233
|
+
- unit-tests
|
|
122
234
|
runs-on: ubuntu-latest
|
|
123
235
|
|
|
124
236
|
permissions:
|
|
@@ -135,17 +247,14 @@ jobs:
|
|
|
135
247
|
with:
|
|
136
248
|
node-version: '26.x'
|
|
137
249
|
|
|
138
|
-
- name: Build
|
|
250
|
+
- name: Build production site once
|
|
139
251
|
run: npm run build
|
|
140
252
|
|
|
141
|
-
- name: Validate generated output
|
|
142
|
-
run: npm run validate:build
|
|
143
|
-
|
|
144
253
|
- name: Upload production build
|
|
145
254
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
146
255
|
with:
|
|
147
256
|
name: site-build
|
|
148
|
-
path: dist
|
|
257
|
+
path: __RM_INDUSTRIES_FORGE_TEMPLATE_V1_PROJECT_DIRECTORY__/dist
|
|
149
258
|
if-no-files-found: error
|
|
150
259
|
retention-days: 7
|
|
151
260
|
|
|
@@ -153,10 +262,36 @@ jobs:
|
|
|
153
262
|
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
154
263
|
uses: actions/upload-pages-artifact@fc324d3547104276b827a68afc52ff2a11cc49c9 # v5
|
|
155
264
|
with:
|
|
156
|
-
path: dist
|
|
265
|
+
path: __RM_INDUSTRIES_FORGE_TEMPLATE_V1_PROJECT_DIRECTORY__/dist
|
|
266
|
+
|
|
267
|
+
validate-build:
|
|
268
|
+
name: Validate build
|
|
269
|
+
needs:
|
|
270
|
+
- build
|
|
271
|
+
runs-on: ubuntu-latest
|
|
272
|
+
permissions:
|
|
273
|
+
contents: read
|
|
274
|
+
steps:
|
|
275
|
+
- name: Checkout repository
|
|
276
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
277
|
+
with:
|
|
278
|
+
persist-credentials: false
|
|
279
|
+
- name: Setup project
|
|
280
|
+
uses: $/.github/actions/setup-project
|
|
281
|
+
with:
|
|
282
|
+
node-version: '26.x'
|
|
283
|
+
- name: Download production build
|
|
284
|
+
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
|
|
285
|
+
with:
|
|
286
|
+
name: site-build
|
|
287
|
+
path: __RM_INDUSTRIES_FORGE_TEMPLATE_V1_PROJECT_DIRECTORY__/dist
|
|
288
|
+
- name: Validate production artifacts
|
|
289
|
+
run: npm run validate:build
|
|
157
290
|
|
|
158
291
|
browser-tests:
|
|
159
292
|
name: Browser and accessibility tests
|
|
293
|
+
needs:
|
|
294
|
+
- build
|
|
160
295
|
runs-on: ubuntu-latest
|
|
161
296
|
|
|
162
297
|
permissions:
|
|
@@ -176,6 +311,12 @@ jobs:
|
|
|
176
311
|
- name: Install supported browsers
|
|
177
312
|
run: npx playwright install --with-deps chromium firefox webkit
|
|
178
313
|
|
|
314
|
+
- name: Download production build
|
|
315
|
+
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
|
|
316
|
+
with:
|
|
317
|
+
name: site-build
|
|
318
|
+
path: __RM_INDUSTRIES_FORGE_TEMPLATE_V1_PROJECT_DIRECTORY__/dist
|
|
319
|
+
|
|
179
320
|
- name: Run browser and accessibility tests
|
|
180
321
|
run: npm run test:e2e
|
|
181
322
|
|
|
@@ -185,13 +326,15 @@ jobs:
|
|
|
185
326
|
with:
|
|
186
327
|
name: browser-test-failures
|
|
187
328
|
path: |
|
|
188
|
-
playwright-report
|
|
189
|
-
test-results
|
|
329
|
+
__RM_INDUSTRIES_FORGE_TEMPLATE_V1_PROJECT_DIRECTORY__/playwright-report
|
|
330
|
+
__RM_INDUSTRIES_FORGE_TEMPLATE_V1_PROJECT_DIRECTORY__/test-results
|
|
190
331
|
if-no-files-found: error
|
|
191
332
|
retention-days: 7
|
|
192
333
|
|
|
193
334
|
lighthouse:
|
|
194
335
|
name: Lighthouse budgets
|
|
336
|
+
needs:
|
|
337
|
+
- build
|
|
195
338
|
runs-on: ubuntu-latest
|
|
196
339
|
|
|
197
340
|
permissions:
|
|
@@ -208,6 +351,15 @@ jobs:
|
|
|
208
351
|
with:
|
|
209
352
|
node-version: '26.x'
|
|
210
353
|
|
|
354
|
+
- name: Install Lighthouse browser
|
|
355
|
+
run: npx playwright install --with-deps chromium
|
|
356
|
+
|
|
357
|
+
- name: Download production build
|
|
358
|
+
uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
|
|
359
|
+
with:
|
|
360
|
+
name: site-build
|
|
361
|
+
path: __RM_INDUSTRIES_FORGE_TEMPLATE_V1_PROJECT_DIRECTORY__/dist
|
|
362
|
+
|
|
211
363
|
- name: Enforce Lighthouse budgets
|
|
212
364
|
run: npm run lighthouse:ci
|
|
213
365
|
|
|
@@ -216,35 +368,26 @@ jobs:
|
|
|
216
368
|
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
217
369
|
with:
|
|
218
370
|
name: lighthouse-reports
|
|
219
|
-
path:
|
|
371
|
+
path: __RM_INDUSTRIES_FORGE_TEMPLATE_V1_PROJECT_DIRECTORY__/.lighthouseci
|
|
220
372
|
include-hidden-files: true
|
|
221
373
|
if-no-files-found: error
|
|
222
374
|
retention-days: 7
|
|
223
375
|
|
|
224
|
-
|
|
225
|
-
name:
|
|
376
|
+
deploy:
|
|
377
|
+
name: Deploy GitHub Pages
|
|
226
378
|
needs:
|
|
227
379
|
- format
|
|
380
|
+
- lint-code
|
|
381
|
+
- lint-styles
|
|
382
|
+
- lint-markdown
|
|
228
383
|
- spellcheck
|
|
229
|
-
-
|
|
384
|
+
- audit-unused
|
|
385
|
+
- typecheck
|
|
230
386
|
- unit-tests
|
|
231
387
|
- build
|
|
388
|
+
- validate-build
|
|
232
389
|
- browser-tests
|
|
233
390
|
- lighthouse
|
|
234
|
-
runs-on: ubuntu-latest
|
|
235
|
-
|
|
236
|
-
permissions:
|
|
237
|
-
contents: read
|
|
238
|
-
|
|
239
|
-
steps:
|
|
240
|
-
- name: Confirm project checks
|
|
241
|
-
run: echo "All project checks passed."
|
|
242
|
-
|
|
243
|
-
deploy:
|
|
244
|
-
name: Deploy GitHub Pages
|
|
245
|
-
needs:
|
|
246
|
-
- build
|
|
247
|
-
- project
|
|
248
391
|
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
249
392
|
runs-on: ubuntu-latest
|
|
250
393
|
|
|
@@ -256,7 +399,44 @@ jobs:
|
|
|
256
399
|
name: github-pages
|
|
257
400
|
url: ${{ steps.deployment.outputs.page_url }}
|
|
258
401
|
|
|
402
|
+
outputs:
|
|
403
|
+
page-url: ${{ steps.deployment.outputs.page_url }}
|
|
404
|
+
|
|
259
405
|
steps:
|
|
260
406
|
- name: Deploy GitHub Pages
|
|
261
407
|
id: deployment
|
|
262
408
|
uses: actions/deploy-pages@cd2ce8fcbc39b97be8ca5fce6e763baed58fa128 # v5.0.0
|
|
409
|
+
|
|
410
|
+
smoke-deployed:
|
|
411
|
+
name: Verify deployed website
|
|
412
|
+
needs:
|
|
413
|
+
- deploy
|
|
414
|
+
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
|
|
415
|
+
runs-on: ubuntu-latest
|
|
416
|
+
permissions:
|
|
417
|
+
contents: read
|
|
418
|
+
steps:
|
|
419
|
+
- name: Checkout repository
|
|
420
|
+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7
|
|
421
|
+
with:
|
|
422
|
+
persist-credentials: false
|
|
423
|
+
- name: Setup project
|
|
424
|
+
uses: $/.github/actions/setup-project
|
|
425
|
+
with:
|
|
426
|
+
node-version: '26.x'
|
|
427
|
+
- name: Install Chromium
|
|
428
|
+
run: npx playwright install --with-deps chromium
|
|
429
|
+
- name: Verify deployed routes, assets, and mobile layout
|
|
430
|
+
env:
|
|
431
|
+
DEPLOYMENT_URL: ${{ needs.deploy.outputs.page-url }}
|
|
432
|
+
run: npm run test:smoke
|
|
433
|
+
- name: Upload deployed smoke failure evidence
|
|
434
|
+
if: failure()
|
|
435
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
436
|
+
with:
|
|
437
|
+
name: deployed-smoke-results
|
|
438
|
+
path: |
|
|
439
|
+
__RM_INDUSTRIES_FORGE_TEMPLATE_V1_PROJECT_DIRECTORY__/playwright-report
|
|
440
|
+
__RM_INDUSTRIES_FORGE_TEMPLATE_V1_PROJECT_DIRECTORY__/test-results
|
|
441
|
+
if-no-files-found: ignore
|
|
442
|
+
retention-days: 7
|
|
@@ -5,9 +5,15 @@ on: # yamllint disable-line rule:truthy
|
|
|
5
5
|
pull_request:
|
|
6
6
|
branches:
|
|
7
7
|
- main
|
|
8
|
+
paths:
|
|
9
|
+
- '__RM_INDUSTRIES_FORGE_TEMPLATE_V1_PROJECT_PATH_FILTER__'
|
|
10
|
+
- '.github/**'
|
|
8
11
|
push:
|
|
9
12
|
branches:
|
|
10
13
|
- main
|
|
14
|
+
paths:
|
|
15
|
+
- '__RM_INDUSTRIES_FORGE_TEMPLATE_V1_PROJECT_PATH_FILTER__'
|
|
16
|
+
- '.github/**'
|
|
11
17
|
schedule:
|
|
12
18
|
- cron: '__RM_INDUSTRIES_FORGE_TEMPLATE_V1_SECURITY_SCHEDULE_MINUTE__ 5 * * 1'
|
|
13
19
|
|
|
@@ -65,6 +71,7 @@ jobs:
|
|
|
65
71
|
persist-credentials: false
|
|
66
72
|
|
|
67
73
|
- name: Review dependency changes
|
|
74
|
+
continue-on-error: true
|
|
68
75
|
uses: actions/dependency-review-action@a1d282b36b6f3519aa1f3fc636f609c47dddb294 # v5
|
|
69
76
|
with:
|
|
70
77
|
fail-on-severity: high
|
package/dist/template/README.md
CHANGED
|
@@ -41,8 +41,8 @@ reference.
|
|
|
41
41
|
| `npm run build` | Create the production site in `dist/`. |
|
|
42
42
|
| `npm run validate:build` | Validate required output and scan generated text. |
|
|
43
43
|
| `npm run preview` | Serve the production build locally. Run `build` first. |
|
|
44
|
-
| `npm run typecheck` |
|
|
45
|
-
| `npm run astro:check` |
|
|
44
|
+
| `npm run typecheck` | Validate TypeScript, Astro components, content, and diagnostics. |
|
|
45
|
+
| `npm run astro:check` | Run the same Astro diagnostics directly. |
|
|
46
46
|
| `npm run format` | Check formatting with Oxfmt. |
|
|
47
47
|
| `npm run format:fix` | Apply Oxfmt formatting. |
|
|
48
48
|
| `npm run lint` | Run code, CSS, Markdown, and spelling checks. |
|
|
@@ -51,7 +51,7 @@ reference.
|
|
|
51
51
|
| `npm run lint:markdown` | Check Markdown with Markdownlint. |
|
|
52
52
|
| `npm run spellcheck` | Check repository text with cspell. |
|
|
53
53
|
| `npm run audit:unused` | Detect unused files, exports, and dependencies with Knip. |
|
|
54
|
-
| `npm run lighthouse:ci` |
|
|
54
|
+
| `npm run lighthouse:ci` | Enforce Lighthouse scores against an existing build. |
|
|
55
55
|
| `npm test` | Run the `test:unit` command. |
|
|
56
56
|
| `npm run test:unit` | Run deterministic TypeScript unit tests with Vitest. |
|
|
57
57
|
| `npm run test:a11y` | Run focused Playwright and axe accessibility checks. |
|
|
@@ -74,45 +74,42 @@ any deployment base path from the configured canonical site URL.
|
|
|
74
74
|
|
|
75
75
|
The complete command is intentionally high cost. Use `npm run quality:static`
|
|
76
76
|
for the quickest source-only feedback or `npm run quality:core` for every check
|
|
77
|
-
that does not launch a browser.
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
the documented `npm run quality` command as a single ordered pipeline.
|
|
77
|
+
that does not launch a browser. Dependency auditing remains the explicit
|
|
78
|
+
`npm run audit` command. CI executes independent source stages in parallel,
|
|
79
|
+
builds once, and gives that output to validation, browser tests, Lighthouse, and
|
|
80
|
+
deployment.
|
|
82
81
|
|
|
83
82
|
## Continuous integration
|
|
84
83
|
|
|
85
84
|
The generated `.github/workflows/project.yml` runs on pull requests targeting
|
|
86
|
-
`main` and on pushes to `main`.
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
85
|
+
`main` and on pushes to `main`. Formatting, code/style/Markdown linting,
|
|
86
|
+
spelling, unused-code analysis, Astro diagnostics, and unit coverage report
|
|
87
|
+
independently. One production build follows those checks; build validation,
|
|
88
|
+
browser tests, and Lighthouse download and test that same artifact. Deployment
|
|
89
|
+
depends directly on every applicable check and publishes the Pages artifact
|
|
90
|
+
packaged by the build job. A live Chromium smoke test then verifies the deployed
|
|
91
|
+
URL, assets, and mobile layout. There is no aggregate/no-op project job.
|
|
92
|
+
Deployment setup, project-site URLs, custom domains, and environment protections
|
|
93
|
+
are documented in [`docs/github-pages.md`](docs/github-pages.md).
|
|
94
|
+
|
|
95
|
+
The workflow installs dependencies with `npm ci`, caches npm downloads using the
|
|
96
|
+
lockfile, cancels superseded pull-request runs, serializes deployment runs, and
|
|
97
|
+
grants only read access outside deployment. Pull requests receive no secrets or
|
|
98
|
+
write permissions. Coverage, production builds, Lighthouse reports, and browser
|
|
99
99
|
failure evidence are retained for seven days. All third-party actions use
|
|
100
100
|
immutable commit pins.
|
|
101
101
|
|
|
102
102
|
Security automation is included alongside project CI. CodeQL analyzes the
|
|
103
103
|
project's TypeScript and GitHub Actions on pull requests, pushes to `main`, and
|
|
104
|
-
a weekly schedule. Dependency review
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
Zizmor
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
both workflow syntax and security validation pass. Because it is path-filtered,
|
|
114
|
-
do not configure it as a globally required status check; review it whenever an
|
|
115
|
-
automation change causes it to appear.
|
|
104
|
+
a weekly schedule. Dependency review reports introduced dependency risk without
|
|
105
|
+
blocking remediation pull requests. A separate scheduled automation workflow
|
|
106
|
+
validates workflow syntax with Actionlint and scans GitHub Actions with Zizmor.
|
|
107
|
+
Zizmor uploads its findings to GitHub code scanning and fails `Workflow security`
|
|
108
|
+
when it finds an issue. The job receives `security-events: write` only for that
|
|
109
|
+
upload; all other access remains read-only. `Workflow syntax` and `Workflow
|
|
110
|
+
security` run when `.github/**` changes. Because they are path-filtered, do not
|
|
111
|
+
configure them as globally required status checks; require both whenever an
|
|
112
|
+
automation change causes them to appear.
|
|
116
113
|
|
|
117
114
|
Dependabot checks npm and GitHub Actions weekly. Minor and patch npm updates are
|
|
118
115
|
grouped by production or development scope, while major updates remain separate
|
|
@@ -13,8 +13,10 @@ not upload a Pages artifact or run a deployment.
|
|
|
13
13
|
needs a manual production approval.
|
|
14
14
|
|
|
15
15
|
The build job has read-only repository access. The separate deployment job is
|
|
16
|
-
the only job granted `pages: write` and `id-token: write`, and it
|
|
17
|
-
|
|
16
|
+
the only job granted `pages: write` and `id-token: write`, and it depends
|
|
17
|
+
directly on every source, unit, build, validation, browser, and Lighthouse job.
|
|
18
|
+
After deployment, one Chromium smoke test verifies the live URL, assets, and
|
|
19
|
+
mobile layout.
|
|
18
20
|
|
|
19
21
|
## Choose the public URL
|
|
20
22
|
|
|
@@ -12,7 +12,7 @@ npm run quality
|
|
|
12
12
|
```
|
|
13
13
|
|
|
14
14
|
- `quality:static` checks formatting, code, CSS, Markdown, spelling, unused code,
|
|
15
|
-
types, Astro diagnostics
|
|
15
|
+
types, and Astro diagnostics.
|
|
16
16
|
- `quality:core` adds coverage-enforced unit tests, a production build, and
|
|
17
17
|
required-output validation.
|
|
18
18
|
- `quality` adds Playwright browser/accessibility tests and Lighthouse budgets.
|
|
@@ -83,11 +83,11 @@ the validator when introducing a route that is part of the public contract.
|
|
|
83
83
|
|
|
84
84
|
### GitHub Pages does not deploy
|
|
85
85
|
|
|
86
|
-
Open the `Project` workflow first. Deployment
|
|
87
|
-
|
|
88
|
-
environment, Pages source, branch restrictions, URL
|
|
89
|
-
job. Follow the [GitHub Pages guide](../github-pages.md)
|
|
90
|
-
|
|
86
|
+
Open the `Project Continuous Integration` workflow first. Deployment depends
|
|
87
|
+
directly on every applicable source and artifact check. If they pass, inspect
|
|
88
|
+
the `github-pages` environment, Pages source, branch restrictions, URL
|
|
89
|
+
configuration, and deploy job. Follow the [GitHub Pages guide](../github-pages.md)
|
|
90
|
+
rather than bypassing a failed dependency.
|
|
91
91
|
|
|
92
92
|
## Review dependency updates
|
|
93
93
|
|
|
@@ -98,7 +98,13 @@ Dependabot proposes npm and GitHub Actions updates. Before merging one:
|
|
|
98
98
|
3. review changes to `package.json` and `package-lock.json` together;
|
|
99
99
|
4. keep Sveltia updates within the exact content-model compatibility range;
|
|
100
100
|
5. run `npm run audit`, `npm run quality`, and any affected manual check; and
|
|
101
|
-
6.
|
|
101
|
+
6. review the project checks and all security findings before merging.
|
|
102
|
+
|
|
103
|
+
CodeQL and dependency findings report through GitHub code scanning and
|
|
104
|
+
Dependabot alerts rather than blocking ordinary pull requests. Actionlint and
|
|
105
|
+
Zizmor block workflow changes with syntax or security defects. `npm run audit`
|
|
106
|
+
remains an explicit release gate and must pass—or use a reviewed, justified,
|
|
107
|
+
time-bounded exception—before publishing a release.
|
|
102
108
|
|
|
103
109
|
Do not widen `@rm-industries/content-model` peer compatibility inside a
|
|
104
110
|
generated project. Forge publishes tested content-model compatibility first,
|