| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- name: E2E Tests
- on:
- push:
- branches: [ main, develop ]
- paths:
- - 'web/tests/e2e/**'
- - 'web/src/**'
- - '.github/workflows/e2e-tests.yml'
- pull_request:
- branches: [ main ]
- paths:
- - 'web/tests/e2e/**'
- - 'web/src/**'
- - '.github/workflows/e2e-tests.yml'
- workflow_dispatch:
- jobs:
- e2e-tests:
- runs-on: ubuntu-latest
- timeout-minutes: 30
- services:
- mysql:
- image: mysql:8.0.36
- env:
- MYSQL_DATABASE: test_d8dai
- MYSQL_ROOT_PASSWORD: test_password
- MYSQL_USER: test_user
- MYSQL_PASSWORD: test_password
- options: >-
- --health-cmd="mysqladmin ping"
- --health-interval=10s
- --health-timeout=5s
- --health-retries=3
- ports:
- - 3306:3306
- steps:
- - name: Checkout code
- uses: actions/checkout@v4
- - name: Setup Node.js
- uses: actions/setup-node@v4
- with:
- node-version: '20'
- cache: 'pnpm'
- - name: Install pnpm
- uses: pnpm/action-setup@v2
- with:
- version: 8
- - name: Install dependencies
- run: pnpm install --frozen-lockfile
- - name: Install Playwright browsers
- run: npx playwright install --with-deps chromium
- - name: Setup test environment
- run: |
- cp .env.example .env.test
- echo "DATABASE_URL=mysql://root:test_password@localhost:3306/test_d8dai" >> .env.test
- echo "NODE_ENV=test" >> .env.test
- - name: Run database migrations
- run: |
- export NODE_ENV=test
- pnpm db:migrate
- - name: Run E2E tests
- run: |
- export NODE_ENV=test
- cd web
- pnpm test:e2e --project=chromium
- env:
- E2E_BASE_URL: http://localhost:8080
- - name: Upload test results
- if: always()
- uses: actions/upload-artifact@v4
- with:
- name: playwright-report
- path: tests/e2e/playwright-report/
- retention-days: 7
- - name: Upload test results (JUnit)
- if: always()
- uses: actions/upload-artifact@v4
- with:
- name: test-results
- path: test-results/
- retention-days: 7
- - name: Generate test summary
- if: always()
- uses: test-summary/action@v2
- with:
- paths: test-results/junit.xml
- - name: Analyze test results
- if: always()
- run: |
- cd web
- pnpm test:analyze
- - name: Notify on failure
- if: failure()
- uses: 8398a7/action-slack@v3
- with:
- status: ${{ job.status }}
- channel: '#ci-notifications'
- webhook_url: ${{ secrets.SLACK_WEBHOOK }}
- env:
- SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }}
|