e2e-ci-debug
npx skills add https://github.com/lgariv-dn/frontend-skills --skill e2e-ci-debug
Agent 安装分布
Skill 文档
E2E CI Debug
Debug Playwright E2E test failures from CI with automated artifact downloading, intelligent failure parsing, and local reproduction guidance.
Quick Start
Full debugging workflow:
# 1. Download artifacts from failing CI run
.cursor/skills/e2e-ci-debug/scripts/download-artifacts.sh
# 2. Parse JUnit results to identify failures
.cursor/skills/e2e-ci-debug/scripts/parse-junit.py
# 3. Run local reproduction command (shown by parse-junit.py)
cd dap-workspace && nx affected -t e2e --base=origin/main
# 4. Clean up downloaded artifacts (Important!)
.cursor/skills/e2e-ci-debug/scripts/cleanup-artifacts.sh
Output: Failing spec name, error message, file location, stack trace, and local reproduction command.
Workflow E2E Test Structure
Main Workflow E2E Tests
- Path:
dap-workspace/tests/workflow/typescript/ - Config:
playwright.config.ts - Test Directory:
tests/e2e/builder/– Workflow builder tests (9 spec files)catalog/– Catalog navigation tests (2 spec files)visual-diff/– Visual regression tests (1 spec file)
- Projects:
sanityâsetupâe2e(dependency chain) - Reports:
reports/typescript-playwright/workflow/- HTML:
playwright-report/ - JUnit:
junit.xml
- HTML:
- Base URL:
WORKFLOW_BASE_URLenv var orhttp://localhost:4200
Component-Level E2E Tests
- Path:
dap-workspace/libs/workflow/workflow-fe/workflow-fe-e2e/ - Config:
playwright.config.ts - Test Directory:
src/ - WebServer: Auto-starts
workflow-root-feonhttp://localhost:4200 - Used for component-level testing within workflow libraries
CI Workflow Context
PR E2E Tests
When they run:
- Automatically on pull requests via
dispatcher.ymlâpr-core.yamlâpr-processor.yml - Only affected E2E tests execute (via
nx affected -t e2e)
How to find them:
# List PR checks
gh pr checks
# View specific run
gh run view <run_id> --log
# Download PR E2E artifacts
gh run download <run_id> -n <artifact-name>
Workflow chain:
.github/workflows/dispatcher.yml– PR entry point.github/workflows/pr-core.yaml– Runs test, lint, docker, deploy jobspr-processor.yml(external) – Handles deployment and E2E execution
Local Debugging
Run workflow E2E tests locally before pushing to CI:
Run Workflow E2E Project
cd dap-workspace
# Run full workflow E2E suite (with project dependencies)
nx e2e tests-workflow-typescript --project=e2e
# Run only sanity tests
nx e2e tests-workflow-typescript --project=sanity
Run Affected E2E Tests
cd dap-workspace
# Compare against main branch
nx affected -t e2e --base=origin/main
# Compare against specific branch
nx affected -t e2e --base=origin/v4.0
Run Specific Test File
cd dap-workspace/tests/workflow/typescript
# Run single spec
npx playwright test tests/e2e/builder/workflow-builder.e2e.spec.ts
# Run specific suite
npx playwright test tests/e2e/builder
# Run with UI mode for debugging
npx playwright test --ui
# Run with headed browser
npx playwright test --headed
View Local Test Reports
cd dap-workspace
# Open HTML report for workflow tests
npx playwright show-report reports/typescript-playwright/workflow/playwright-report
PR Checks Debugging
E2E Test Failures
-
Find failing E2E job:
gh pr checks # Look for "Run E2E Tests" or similar job names -
Download artifacts:
# Use the download-artifacts.sh script (auto-detects current PR) .cursor/skills/e2e-ci-debug/scripts/download-artifacts.sh # Or manually with run ID .cursor/skills/e2e-ci-debug/scripts/download-artifacts.sh <run_id> -
Parse failures:
.cursor/skills/e2e-ci-debug/scripts/parse-junit.py -
Reproduce locally:
cd dap-workspace nx affected -t e2e --base=origin/<base-branch>
Unit Test Failures
# View test job logs
gh run view <run_id> --log --job <job_id>
# Find the specific test command in logs
# Usually: nx affected -t test --base=origin/<base-branch>
# Run locally
cd dap-workspace
nx affected -t test --base=origin/main
Lint Failures
# View lint job logs
gh run view <run_id> --log --job <job_id>
# Run locally
cd dap-workspace
nx affected -t lint --base=origin/main
# Auto-fix many issues
nx affected -t lint --base=origin/main --fix
Docker Build Failures
# View docker job logs
gh run view <run_id> --log --job <job_id>
# Look for:
# - Docker build errors
# - Missing dependencies
# - Build context issues
# - Registry authentication problems
Utility Scripts
All scripts are located in the skill’s scripts/ directory. After installation via npx add-skill, they’ll be at .cursor/skills/e2e-ci-debug/scripts/
download-artifacts.sh
Downloads Playwright test artifacts from GitHub Actions for the current PR.
Usage:
# Auto-detect from current PR
./download-artifacts.sh
# Specify run ID
./download-artifacts.sh <run_id>
# Specify run ID and artifact name
./download-artifacts.sh <run_id> <artifact_name>
What it does:
- Fetches Playwright report archives from GitHub Actions
- Extracts to
playwright-results/directory - Cleans up ZIP files after extraction
parse-junit.py
Parses JUnit XML from Playwright results and extracts structured failure information, including paths to failure screenshots for AI model analysis.
Usage:
# Parse default location
./parse-junit.py
# Parse specific file
./parse-junit.py path/to/junit.xml
# Output as JSON (includes screenshot/trace/video paths)
./parse-junit.py --json
# Show screenshot paths for AI model analysis
./parse-junit.py --screenshots
# Open HTML report after parsing
./parse-junit.py --open-report
# Show help
./parse-junit.py --help
Output includes:
- Test name and status
- Error message
- File location (spec file:line number)
- Stack trace
- Screenshot paths (absolute paths for AI model to read with Read tool)
- Trace file paths (for Playwright trace viewer)
- Video paths (if video recording was enabled)
- Local reproduction command for workflow tests
Output Formats:
- Text (default): Human-readable with colors and emojis, shows artifact paths inline
- JSON (
--json): Structured output withscreenshots,traces, andvideosarrays per failure
AI Model Integration: The screenshot paths are absolute, allowing AI models to directly read the images using the Read tool to visually analyze where Playwright failed.
find-failing-job.sh
Finds failing E2E jobs from recent PR workflow runs.
Usage:
# List recent PR workflow runs
./find-failing-job.sh
# Find specific workflow
./find-failing-job.sh "PR Deploy Core"
Output:
- Recent workflow runs with status
- Run ID and job IDs for failed E2E tests
- Command to download artifacts
cleanup-artifacts.sh
Removes all downloaded Playwright artifacts after debugging.
Usage:
./cleanup-artifacts.sh
What it removes:
playwright-results/directory*-playwright-results.zipfiles- Any other temporary E2E debug files
Safety:
- Idempotent (safe to run multiple times)
- Confirms cleanup with file count and freed disk space
Common Failure Patterns
Test Timeout
Symptom: Test exceeds timeout (default: 30s for sanity, 120s for setup, 30s for e2e)
Solutions:
- Check for network delays or slow API responses
- Increase timeout in
playwright.config.tsif legitimate - Look for missing
awaiton async operations
Element Not Found
Symptom: Selector not found or Element is not visible
Solutions:
- Verify element exists in the DOM
- Check for timing issues (add proper waits)
- Inspect for dynamic class names or IDs
- Use data-testid attributes instead of classes
Setup/Seed Failures
Symptom: setup project fails before e2e tests can run
Solutions:
- Check database seeding in
tests/*/typescript/seed/*.setup.ts - Verify API endpoints are accessible
- Ensure authentication/tokens are valid
Flaky Tests
Symptom: Test passes locally but fails in CI (or vice versa)
Solutions:
- Check for race conditions
- Avoid hard-coded waits (
page.waitForTimeout()) - Use proper Playwright assertions with auto-retry
- Verify test isolation (no shared state)
Additional Resources
For detailed workflow documentation, artifact paths, and Playwright configuration details, see reference.md.
When to Use This Skill
Use this skill when:
- A PR has failing E2E checks and you need to debug
- You want to reproduce CI E2E failures locally
- You need to understand E2E test structure and locations
- You’re debugging flaky or timing-related test failures in PRs