import { defineConfig, devices } from '@playwright/test'; import * as path from 'path'; import { fileURLToPath } from 'url'; import { playwrightArtifactDirNames } from './src/lib/playwrightPhaseArtifacts'; /** * Ubuntu Server headless UI acceptance config (DOCREV runtime). * Enable only when RUN_UI_ACCEPTANCE=1 against a real dev stack — no mocks. * Script never touches docker; UI_PHASE=post-restart is a second run after host restart. * outputDir / HTML report are split by UI_PHASE so post-restart cannot wipe main traces. */ const runAcceptance = process.env.RUN_UI_ACCEPTANCE === '1'; const __dirname = path.dirname(fileURLToPath(import.meta.url)); const evidenceRoot = process.env.UI_ACCEPTANCE_ASSETS_DIR ? path.resolve(process.env.UI_ACCEPTANCE_ASSETS_DIR) : path.resolve( __dirname, '../.doc/test-reports/assets/2026-09-14-controlled-content-ui-acceptance', ); const phaseDirs = playwrightArtifactDirNames(process.env.UI_PHASE); export default defineConfig({ testDir: './e2e', fullyParallel: false, forbidOnly: !!process.env.CI, retries: 0, workers: 1, timeout: 600_000, outputDir: path.join(evidenceRoot, phaseDirs.outputDirName), reporter: [ ['list'], ['html', { open: 'never', outputFolder: path.join(evidenceRoot, phaseDirs.reportDirName) }], ], use: { baseURL: process.env.BASE_URL || 'http://127.0.0.1:8080', headless: true, actionTimeout: 30_000, locale: 'zh-CN', trace: runAcceptance ? 'on' : 'off', screenshot: runAcceptance ? 'on' : 'off', video: runAcceptance ? 'on' : 'off', }, projects: [ { name: 'chromium', use: { ...devices['Desktop Chrome'] }, }, ], });