9088dcffb9
- site image: multi-stage node build -> unprivileged nginx (non-root, read-only) - nginx: CSP + security headers, immutable asset caching, revalidated HTML, canonical trailing slash, preserved /Linkedin 301, legacy-WP 410s, custom 404 - externalise theme-init so CSP uses script-src 'self' (no inline hash) - prod + dev compose; .env.example; relay Dockerfile fixed (image ships app user) - Gitea Actions: quality, e2e, lighthouse budgets, relay build, image push on main - verified: both images build; relay healthz 200; site serves EN/NO with CSP + redirect Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
21 lines
691 B
JSON
21 lines
691 B
JSON
{
|
|
"ci": {
|
|
"collect": {
|
|
"staticDistDir": "./dist",
|
|
"url": ["http://localhost/index.html", "http://localhost/projects/jobtrack/index.html"],
|
|
"numberOfRuns": 1
|
|
},
|
|
"assert": {
|
|
"assertions": {
|
|
"categories:performance": ["error", { "minScore": 0.95 }],
|
|
"categories:accessibility": ["error", { "minScore": 1 }],
|
|
"categories:seo": ["error", { "minScore": 1 }],
|
|
"largest-contentful-paint": ["error", { "maxNumericValue": 1800 }],
|
|
"cumulative-layout-shift": ["error", { "maxNumericValue": 0.02 }],
|
|
"total-blocking-time": ["error", { "maxNumericValue": 100 }],
|
|
"unused-javascript": "off"
|
|
}
|
|
}
|
|
}
|
|
}
|