Skip to content

chore(deps)(deps-dev): bump @types/node from 24.12.2 to 25.5.2 in /e2e #35

chore(deps)(deps-dev): bump @types/node from 24.12.2 to 25.5.2 in /e2e

chore(deps)(deps-dev): bump @types/node from 24.12.2 to 25.5.2 in /e2e #35

Workflow file for this run

name: E2E Tests
on:
pull_request:
branches: [main]
paths:
- 'frontend/**'
- 'app/**'
- 'e2e/**'
- '.github/workflows/e2e-tests.yml'
push:
branches: [main]
paths:
- 'frontend/**'
- 'app/**'
- 'e2e/**'
- '.github/workflows/e2e-tests.yml'
workflow_dispatch:
schedule:
# Run nightly at 3 AM UTC for full suite
- cron: '0 3 * * *'
permissions:
contents: read
actions: write
jobs:
# Quick critical tests on PRs
critical-tests:
name: Critical E2E Tests
runs-on: ubuntu-latest
timeout-minutes: 30
if: github.event_name == 'pull_request'
services:
postgres:
image: postgres:16
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: transcripts
ports:
- 5434:5432
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'npm'
cache-dependency-path: |
frontend/package-lock.json
e2e/package-lock.json
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
cache: 'pip'
- name: Install Python dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements-dev.txt
pip install -r requirements.txt
- name: Apply database schema
env:
DATABASE_URL: postgresql://postgres:postgres@localhost:5434/transcripts
run: |
PGPASSWORD=postgres psql -h localhost -U postgres -p 5434 -d transcripts -f sql/schema.sql
- name: Install frontend dependencies
run: |
cd frontend
npm ci
- name: Install E2E dependencies
run: |
cd e2e
npm ci
npx playwright install --with-deps chromium
- name: Build frontend
run: |
cd frontend
npm run build
- name: Start backend API
env:
DATABASE_URL: postgresql+psycopg://postgres:postgres@localhost:5434/transcripts
SESSION_SECRET: test-secret-key-for-ci-only
FRONTEND_ORIGIN: http://localhost:5173
LOG_LEVEL: INFO
run: |
nohup uvicorn app.main:app --host 0.0.0.0 --port 8000 > api.log 2>&1 &
echo $! > api.pid
sleep 5
# Wait for API to be ready
for i in {1..30}; do
if curl -f http://localhost:8000/health 2>/dev/null; then
echo "API is ready"
break
fi
echo "Waiting for API..."
sleep 2
done
- name: Start frontend dev server
run: |
cd frontend
nohup npm run dev > ../frontend.log 2>&1 &
echo $! > ../frontend.pid
sleep 5
# Wait for frontend to be ready
for i in {1..30}; do
if curl -f http://localhost:5173 2>/dev/null; then
echo "Frontend is ready"
break
fi
echo "Waiting for frontend..."
sleep 2
done
- name: Seed test database
env:
DATABASE_URL: postgresql://postgres:postgres@localhost:5434/transcripts
run: |
cd e2e
npm run seed-db
- name: Run critical E2E tests
env:
PLAYWRIGHT_BASE_URL: http://localhost:5173
run: |
cd e2e
npx playwright test tests/auth.spec.ts tests/job-creation.spec.ts tests/search.spec.ts --project=chromium --reporter=list,html
- name: Upload test artifacts
if: always()
uses: actions/upload-artifact@v4
with:
name: playwright-report-critical
path: |
e2e/playwright-report/
e2e/test-results/
retention-days: 7
- name: Upload logs on failure
if: failure()
uses: actions/upload-artifact@v4
with:
name: service-logs-critical
path: |
api.log
frontend.log
retention-days: 7
- name: Cleanup
if: always()
run: |
[ -f api.pid ] && kill $(cat api.pid) || true
[ -f frontend.pid ] && kill $(cat frontend.pid) || true
# Full test suite on main branch and nightly
full-suite:
name: Full E2E Test Suite
runs-on: ubuntu-latest
timeout-minutes: 45
if: github.event_name == 'push' || github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
strategy:
fail-fast: false
matrix:
browser: [chromium, firefox, webkit]
services:
postgres:
image: postgres:16
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: transcripts
ports:
- 5434:5432
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'npm'
cache-dependency-path: |
frontend/package-lock.json
e2e/package-lock.json
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
cache: 'pip'
- name: Install Python dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements-dev.txt
pip install -r requirements.txt
- name: Apply database schema
env:
DATABASE_URL: postgresql://postgres:postgres@localhost:5434/transcripts
run: |
PGPASSWORD=postgres psql -h localhost -U postgres -p 5434 -d transcripts -f sql/schema.sql
- name: Install frontend dependencies
run: |
cd frontend
npm ci
- name: Install E2E dependencies
run: |
cd e2e
npm ci
npx playwright install --with-deps ${{ matrix.browser }}
- name: Build frontend
run: |
cd frontend
npm run build
- name: Start backend API
env:
DATABASE_URL: postgresql+psycopg://postgres:postgres@localhost:5434/transcripts
SESSION_SECRET: test-secret-key-for-ci-only
FRONTEND_ORIGIN: http://localhost:5173
LOG_LEVEL: INFO
run: |
nohup uvicorn app.main:app --host 0.0.0.0 --port 8000 > api.log 2>&1 &
echo $! > api.pid
sleep 5
for i in {1..30}; do
if curl -f http://localhost:8000/health 2>/dev/null; then
echo "API is ready"
break
fi
echo "Waiting for API..."
sleep 2
done
- name: Start frontend dev server
run: |
cd frontend
nohup npm run dev > ../frontend.log 2>&1 &
echo $! > ../frontend.pid
sleep 5
for i in {1..30}; do
if curl -f http://localhost:5173 2>/dev/null; then
echo "Frontend is ready"
break
fi
echo "Waiting for frontend..."
sleep 2
done
- name: Seed test database
env:
DATABASE_URL: postgresql://postgres:postgres@localhost:5434/transcripts
run: |
cd e2e
npm run seed-db
- name: Run E2E tests (${{ matrix.browser }})
env:
PLAYWRIGHT_BASE_URL: http://localhost:5173
run: |
cd e2e
npx playwright test --project=${{ matrix.browser }} --reporter=list,html
- name: Upload test artifacts
if: always()
uses: actions/upload-artifact@v4
with:
name: playwright-report-${{ matrix.browser }}
path: |
e2e/playwright-report/
e2e/test-results/
retention-days: 7
- name: Upload logs on failure
if: failure()
uses: actions/upload-artifact@v4
with:
name: service-logs-${{ matrix.browser }}
path: |
api.log
frontend.log
retention-days: 7
- name: Cleanup
if: always()
run: |
[ -f api.pid ] && kill $(cat api.pid) || true
[ -f frontend.pid ] && kill $(cat frontend.pid) || true
# Mobile tests
mobile-tests:
name: Mobile E2E Tests
runs-on: ubuntu-latest
timeout-minutes: 30
if: github.event_name == 'schedule' || github.event_name == 'workflow_dispatch'
services:
postgres:
image: postgres:16
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: transcripts
ports:
- 5434:5432
options: >-
--health-cmd pg_isready
--health-interval 10s
--health-timeout 5s
--health-retries 5
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: 20
cache: 'npm'
cache-dependency-path: |
frontend/package-lock.json
e2e/package-lock.json
- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: '3.11'
cache: 'pip'
- name: Install Python dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements-dev.txt
pip install -r requirements.txt
- name: Apply database schema
env:
DATABASE_URL: postgresql://postgres:postgres@localhost:5434/transcripts
run: |
PGPASSWORD=postgres psql -h localhost -U postgres -p 5434 -d transcripts -f sql/schema.sql
- name: Install frontend dependencies
run: |
cd frontend
npm ci
- name: Install E2E dependencies
run: |
cd e2e
npm ci
npx playwright install --with-deps chromium webkit
- name: Build frontend
run: |
cd frontend
npm run build
- name: Start backend API
env:
DATABASE_URL: postgresql+psycopg://postgres:postgres@localhost:5434/transcripts
SESSION_SECRET: test-secret-key-for-ci-only
FRONTEND_ORIGIN: http://localhost:5173
LOG_LEVEL: INFO
run: |
nohup uvicorn app.main:app --host 0.0.0.0 --port 8000 > api.log 2>&1 &
echo $! > api.pid
sleep 5
for i in {1..30}; do
if curl -f http://localhost:8000/health 2>/dev/null; then
echo "API is ready"
break
fi
echo "Waiting for API..."
sleep 2
done
- name: Start frontend dev server
run: |
cd frontend
nohup npm run dev > ../frontend.log 2>&1 &
echo $! > ../frontend.pid
sleep 5
for i in {1..30}; do
if curl -f http://localhost:5173 2>/dev/null; then
echo "Frontend is ready"
break
fi
echo "Waiting for frontend..."
sleep 2
done
- name: Seed test database
env:
DATABASE_URL: postgresql://postgres:postgres@localhost:5434/transcripts
run: |
cd e2e
npm run seed-db
- name: Run mobile E2E tests
env:
PLAYWRIGHT_BASE_URL: http://localhost:5173
run: |
cd e2e
npx playwright test --project='Mobile Chrome' --project='Mobile Safari' --reporter=list,html
- name: Upload test artifacts
if: always()
uses: actions/upload-artifact@v4
with:
name: playwright-report-mobile
path: |
e2e/playwright-report/
e2e/test-results/
retention-days: 7
- name: Upload logs on failure
if: failure()
uses: actions/upload-artifact@v4
with:
name: service-logs-mobile
path: |
api.log
frontend.log
retention-days: 7
- name: Cleanup
if: always()
run: |
[ -f api.pid ] && kill $(cat api.pid) || true
[ -f frontend.pid ] && kill $(cat frontend.pid) || true
test-summary:
name: E2E Test Summary
runs-on: ubuntu-latest
needs: [critical-tests]
if: always()
steps:
- name: Generate summary
run: |
echo "# E2E Test Summary" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "✅ E2E tests completed" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "See individual job results above for details." >> $GITHUB_STEP_SUMMARY