import { defineConfig, devices } from '@playwright/test' export default defineConfig({ testDir: './tests/e2e', timeout: process.env.CI ? 60 * 1000 : 30 * 1000, // Longer timeout in CI expect: { timeout: process.env.CI ? 10000 : 5000, // Longer expect timeout in CI }, fullyParallel: true, forbidOnly: !!process.env.CI, retries: process.env.CI ? 2 : 0, workers: process.env.CI ? 1 : undefined, reporter: process.env.CI ? [['list'], ['junit', { outputFile: 'playwright-results.xml' }]] : 'html', use: { baseURL: 'http://localhost:5173', trace: 'on-first-retry', headless: process.env.CI ? true : false, // CI-specific browser optimizations actionTimeout: process.env.CI ? 15000 : 0, navigationTimeout: process.env.CI ? 45000 : 30000, // Longer for network instability // Network resilience settings ...(process.env.CI && { // Retry failed requests automatically extraHTTPHeaders: { 'Cache-Control': 'no-cache', }, // Ignore HTTPS errors in CI (self-signed certs, etc.) ignoreHTTPSErrors: true, // Wait longer for network operations timeout: 60000, }), }, projects: process.env.CI ? [ // CI Environment: Only run Chromium for reliability in Docker { name: 'chromium', use: { ...devices['Desktop Chrome'], headless: true, launchOptions: { args: [ '--no-sandbox', '--disable-setuid-sandbox', '--disable-dev-shm-usage', '--disable-background-timer-throttling', '--disable-backgrounding-occluded-windows', '--disable-renderer-backgrounding', // Network resilience args '--disable-extensions', '--disable-plugins', '--disable-images', // Faster loading, reduce network load '--aggressive-cache-discard', // Increase network timeouts '--network-quiet-timeout=10000', '--disable-background-networking', ] }, }, } ] : [ // Local Development: Run all browsers { name: 'chromium', use: { ...devices['Desktop Chrome'], }, }, { name: 'firefox', use: { ...devices['Desktop Firefox'], }, }, { name: 'webkit', use: { ...devices['Desktop Safari'], }, } ], webServer: { command: 'yarn dev', url: 'http://localhost:5173', reuseExistingServer: !process.env.CI, timeout: process.env.CI ? 180 * 1000 : 120 * 1000, // Longer startup timeout in CI stderr: 'pipe', stdout: 'pipe', } })