Phase 8: Gitea CI — runner probe + PR gating jobs (fast-checks + api) #3

Merged
luckberg merged 66 commits from gsd/phase-08-gitea-ci into main 2026-06-11 16:11:42 -04:00
2 changed files with 80 additions and 0 deletions
Showing only changes of commit 44fea2c5e2 - Show all commits
+15
View File
@@ -0,0 +1,15 @@
/**
* global-setup.ts — Phase 7 Plan 02 will implement this
*
* Placeholder to satisfy Playwright config path resolution.
* Plan 02 replaces this with:
* - health poll on baseURL/health (D-08 readiness gate)
* - mysql2 DB seed: TRUNCATE + INSERT onto calendar id=10 + lists for user 1 (D-05/D-06/D-07)
*
* Run:
* pnpm --filter @familysync/pwa test:e2e
*/
export default async function globalSetup(): Promise<void> {
// Implemented in Plan 02
}
+65
View File
@@ -0,0 +1,65 @@
/**
* Playwright configuration — Phase 7 Mobile Test Harness
*
* Two-profile device matrix: iPhone 14/WebKit + Pixel 7/Chromium
* Auth: DEV_AUTH_BYPASS=true on the API (never storageState — D-01/Pitfall 14)
* SW: serviceWorkers: 'block' on both profiles (D-02/Pitfall 15)
* baseURL: env-driven PLAYWRIGHT_BASE_URL (D-08/Rule 8)
* webServer: manages Vite only — API+MariaDB+Redis stay compose-managed (D-10)
*
* Run:
* pnpm --filter @familysync/pwa test:e2e
* pnpm --filter @familysync/pwa exec playwright test --project=pixel
*/
import { defineConfig, devices } from '@playwright/test'
export default defineConfig({
testDir: './e2e',
testMatch: '**/*.spec.ts',
fullyParallel: true,
retries: process.env.CI ? 2 : 0,
workers: process.env.CI ? 1 : undefined,
reporter: process.env.CI ? 'github' : 'list',
// Plan 02 creates this file — forward-declared, resolves at runtime
globalSetup: './e2e/global-setup.ts',
use: {
// env-driven per D-08/Rule 8 — never a hardcoded host
baseURL: process.env.PLAYWRIGHT_BASE_URL ?? 'http://localhost:5173',
trace: 'on-first-retry',
video: 'on-first-retry',
screenshot: 'only-on-failure',
},
projects: [
{
// iPhone 14: 390×844 viewport, WebKit engine, Mobile Safari UA, hasTouch: true
// Device descriptor confirmed: playwright deviceDescriptorsSource.json
name: 'iphone',
use: {
...devices['iPhone 14'],
// serviceWorkers: 'block' prevents the injectManifest sw.js (Workbox) from
// intercepting requests — satisfies D-02 / Pitfall 15
serviceWorkers: 'block',
},
},
{
// Pixel 7: 412×915 viewport, Chromium engine, Chrome Android UA, hasTouch: true
name: 'pixel',
use: {
...devices['Pixel 7'],
serviceWorkers: 'block',
},
},
],
// D-10: manage Vite only; API+MariaDB+Redis are compose-managed
// reuseExistingServer: reuse operator's pnpm dev locally; start fresh in CI
webServer: {
command: 'pnpm --filter @familysync/pwa dev',
url: process.env.PLAYWRIGHT_BASE_URL ?? 'http://localhost:5173',
reuseExistingServer: !process.env.CI,
timeout: 120_000,
},
})