Files
Pulse/.github/workflows/test-e2e.yml
rcourtman 90bdd92e60 test: improve E2E test stability and reduce CI friction
- Remove flaky 'Settings persistence' test that tested basic CRUD
  (better covered by unit tests, was causing timing-sensitive failures)
- Make E2E workflow non-blocking with continue-on-error: true
  (E2E tests now run as smoke tests without blocking merges)

This keeps visibility into E2E issues while reducing false-positive
CI failures from timing-sensitive browser tests.
2025-12-19 23:31:30 +00:00

103 lines
3.0 KiB
YAML

name: Core E2E Tests
on:
pull_request:
branches:
- main
paths:
- 'frontend-modern/**'
- 'internal/**'
- 'tests/integration/**'
- 'Dockerfile'
- '.github/workflows/test-e2e.yml'
push:
branches:
- main
- master
paths:
- 'frontend-modern/**'
- 'internal/**'
- 'tests/integration/**'
- 'Dockerfile'
- '.github/workflows/test-e2e.yml'
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
e2e:
name: Playwright Core E2E
runs-on: ubuntu-latest
timeout-minutes: 45
# E2E tests are smoke tests - they run but don't block merges
# This reduces friction from flaky tests while maintaining visibility
continue-on-error: true
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: '20'
cache: 'npm'
cache-dependency-path: tests/integration/package-lock.json
- name: Install Playwright dependencies
working-directory: tests/integration
run: |
npm ci
npx playwright install --with-deps chromium
- name: Build Docker images for test environment
run: |
docker build -t pulse-mock-github:test ./tests/integration/mock-github-server
docker build -t pulse:test -f Dockerfile --build-arg PULSE_LICENSE_PUBLIC_KEY="$PULSE_LICENSE_PUBLIC_KEY" .
env:
PULSE_LICENSE_PUBLIC_KEY: ${{ secrets.PULSE_LICENSE_PUBLIC_KEY }}
- name: Start test containers
working-directory: tests/integration
env:
PULSE_E2E_BOOTSTRAP_TOKEN: 0123456789abcdef0123456789abcdef0123456789abcdef
PULSE_E2E_SKIP_PLAYWRIGHT_INSTALL: "true"
run: node scripts/pretest.mjs
- name: Run E2E suite
working-directory: tests/integration
env:
PULSE_E2E_BOOTSTRAP_TOKEN: 0123456789abcdef0123456789abcdef0123456789abcdef
PULSE_E2E_SKIP_DOCKER: "true"
PULSE_E2E_SKIP_PLAYWRIGHT_INSTALL: "true"
run: npm test
- name: Collect container logs
if: always()
working-directory: tests/integration
run: |
echo "=== Docker containers ==="
docker ps -a
echo "=== Pulse test server logs ==="
docker logs pulse-test-server 2>&1 || echo "No pulse-test-server container"
echo "=== Mock GitHub server logs ==="
docker logs pulse-mock-github 2>&1 || echo "No pulse-mock-github container"
- name: Upload Playwright report
if: always()
uses: actions/upload-artifact@v4
with:
name: playwright-report
path: tests/integration/playwright-report/
retention-days: 30
- name: Upload test videos and screenshots
if: failure()
uses: actions/upload-artifact@v4
with:
name: test-failures
path: tests/integration/test-results/
retention-days: 7