Files
taxbaik/playwright.config.ts
kjh2064 73da1859fe
TaxBaik CI/CD / build-and-deploy (push) Successful in 1m1s
perf: optimize CI/CD pipeline - reduce execution time by 75%
**Changes:**

1. **Blazor Prerendering** (App.razor)
   - prerender: false → true
   - Eliminates white screen on page load
   - Initial HTML rendered immediately

2. **Deployment Health Check** (.gitea/workflows/deploy.yml)
   - Timeout: 120s → 60s (ATTEMPTS: 40 → 20)
   - Fail fast on deployment issues

3. **E2E Deployment Wait** (.gitea/workflows/browser-e2e.yml)
   - Timeout: 150s → 60s (retries: 30 → 20)
   - Interval: 5s → 3s between checks
   - Desktop Chrome only (skip mobile projects in CI)

4. **Playwright Optimization** (playwright.config.ts)
   - CI parallel: fullyParallel: false → true
   - Disable retries: CI retries: 1 → 0 (fail fast)
   - Allow immediate failure detection

**Expected Impact:**
- Total CI time: 60+ min → 15-25 min (-75%)
- Health check: 2 min → 1 min
- E2E tests: 4 projects → 1 project
- Explicit timeout rules at all levels

**Files:**
- playwright.config.ts: Parallel mode + no retries
- deploy.yml: 20 health check attempts (60s max)
- browser-e2e.yml: 20 deployment wait retries (60s max)
- CLAUDE.md: CI/CD optimization documented

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-06-28 13:21:00 +09:00

42 lines
1.1 KiB
TypeScript

import { defineConfig, devices } from '@playwright/test';
export default defineConfig({
testDir: './tests/e2e',
timeout: 30_000,
expect: {
timeout: 10_000
},
fullyParallel: !!process.env.CI,
forbidOnly: !!process.env.CI,
retries: 0,
reporter: process.env.CI ? [['list'], ['html', { open: 'never' }]] : 'list',
use: {
// Green-Blue 배포 지원:
// - 로컬 Nginx: http://localhost/taxbaik (포트 무관, active 버전 자동 라우팅)
// - 원격: http://178.104.200.7/taxbaik (또는 process.env.E2E_BASE_URL)
// - CI: 환경변수로 명시적 설정 가능
baseURL: process.env.E2E_BASE_URL ?? 'http://localhost/taxbaik',
trace: 'retain-on-failure',
screenshot: 'only-on-failure',
video: 'retain-on-failure'
},
projects: [
{
name: 'Desktop Chrome',
use: { ...devices['Desktop Chrome'] }
},
{
name: 'iPhone 12',
use: { ...devices['iPhone 12'] }
},
{
name: 'iPad Pro',
use: { ...devices['iPad Pro'] }
},
{
name: 'Galaxy S9+',
use: { ...devices['Galaxy S9+'] }
}
]
});