PlaywrightのE2E失敗・flakyをローカル/CIの両方で切り分けて修正する。PRのDiff実行(--only-changed)を維持しつつ、終了コード判定の不整合、GitHub Actions失敗、artifact/trace解析、再現性確認が必要なときに使う。
Playwright E2Eの「落ちるべきときに落ちる」状態を担保しながら、flakyの根因を潰すための実行手順を定義する。
--only-changed を崩さずに、CIとローカルを同じ条件で検証する。
最初に静的チェックを通す:
cd application
npm run lint
npm run check
次にCI相当コマンドを実行する:
npm run e2e -- \
--reporter=line \
--only-changed=origin/main \
--pass-with-no-tests \
--fail-on-flaky-tests
失敗シナリオを絞って連続実行する:
npm run e2e -- src/test/e2e/scenario/signup-basic.test.ts \
--project=chromium \
--repeat-each=5 \
--retries=0 \
--reporter=line
run特定:
gh run list --branch <branch> --workflow e2e.yaml --limit 5
gh run watch <run_id> --exit-status
ログ抽出:
gh run view <run_id> --job <job_id> --log
gh APIエラー時はartifactを優先する:
mkdir -p artifacts/run-<run_id>
gh run download <run_id> -n playwright-test-results-diff-<run_id>-1 -D artifacts/run-<run_id>
必ず見る:
error-context.mdtest-failed-1.pngvideo.webm確認ポイント:
/signup or /login or /trends)ログイン中... でdisabled)必要に応じてtrace内ネットワークを確認:
unzip -p <trace.zip> 0-trace.network | rg "/api/v2/auth/"
waitForResponse依存を減らし、URL/表示状態中心に判定するtoPassのタイムアウトをシナリオ単位で延長するSUPABASE_URL / SUPABASE_ANON_KEY の注入経路を確認する毎ループで実行する:
npm run lintnpm run check--repeat-eachgh run watchで結果確認終了条件: