import { defineConfig, devices } from '@playwright/test'; const port = Number(process.env.PLAYWRIGHT_PORT ?? 4173); const baseURL = process.env.PLAYWRIGHT_BASE_URL ?? `http://127.0.0.1:${port}`; const isCI = Boolean(process.env.CI); const skipWebServer = process.env.PLAYWRIGHT_SKIP_WEB_SERVER === '1' || process.env.PLAYWRIGHT_SKIP_WEB_SERVER === 'true'; export default defineConfig({ testDir: './tests/e2e', outputDir: 'test-results/playwright', timeout: 45_000, expect: { timeout: 10_000, }, fullyParallel: true, forbidOnly: isCI, retries: isCI ? 2 : 0, workers: isCI ? 2 : undefined, reporter: isCI ? [ ['github'], ['html', { open: 'never', outputFolder: 'playwright-report' }], ] : [ ['list'], ['html', { open: 'never', outputFolder: 'playwright-report' }], ], use: { baseURL, actionTimeout: 15_000, navigationTimeout: 30_000, colorScheme: 'dark', permissions: ['clipboard-read', 'clipboard-write'], screenshot: 'only-on-failure', trace: 'retain-on-failure', video: 'retain-on-failure', }, projects: [ { name: 'chromium', use: { ...devices['Desktop Chrome'], viewport: { width: 1440, height: 900 }, }, }, ], webServer: skipWebServer ? undefined : { command: `npm run build && npm run preview -- --host 127.0.0.1 --port ${port}`, url: baseURL, timeout: 120_000, reuseExistingServer: !isCI, stdout: 'pipe', stderr: 'pipe', }, });