| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 |
- name: Tests
- on:
- push:
- branches: [ "main", "feature/*" ]
- paths:
- - '**.py'
- - 'requirements*.txt'
- - 'pyproject.toml'
- - 'tests/**'
- - 'frontend/**'
- - '.github/workflows/test.yml'
- pull_request:
- branches: [ "main" ]
- paths:
- - '**.py'
- - 'requirements*.txt'
- - 'pyproject.toml'
- - 'tests/**'
- - 'frontend/**'
- - '.github/workflows/test.yml'
- # Allow manual trigger
- workflow_dispatch:
- jobs:
- # Backend tests
- test:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- - name: Set up Python 3.11
- uses: actions/setup-python@v5
- with:
- python-version: '3.11'
- cache: 'pip'
- - name: Install dependencies
- run: |
- python -m pip install --upgrade pip
- pip install -r requirements.txt
- pip install -r requirements-dev.txt
- - name: Run unit tests with coverage
- env:
- CI: true
- run: |
- pytest tests/unit/ -v --cov=modules --cov=main --cov-report=xml --cov-report=term-missing
- - name: Upload coverage reports to Codecov
- uses: codecov/codecov-action@v4
- if: always()
- with:
- file: ./coverage.xml
- fail_ci_if_error: false
- verbose: true
- env:
- CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }}
- lint:
- runs-on: ubuntu-latest
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- - name: Set up Python 3.11
- uses: actions/setup-python@v5
- with:
- python-version: '3.11'
- cache: 'pip'
- - name: Install linting dependencies
- run: |
- python -m pip install --upgrade pip
- pip install ruff
- - name: Run Ruff linter
- run: |
- ruff check --output-format=github .
- continue-on-error: true
- # Frontend unit/integration tests
- frontend-test:
- runs-on: ubuntu-latest
- defaults:
- run:
- working-directory: frontend
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- - name: Set up Node.js
- uses: actions/setup-node@v4
- with:
- node-version: '20'
- cache: 'npm'
- cache-dependency-path: frontend/package-lock.json
- - name: Install dependencies
- run: npm ci
- - name: Run Vitest tests
- run: npm test
- - name: Run Vitest with coverage
- run: npm run test:coverage
- continue-on-error: true
- # Frontend E2E tests
- frontend-e2e:
- runs-on: ubuntu-latest
- timeout-minutes: 10
- defaults:
- run:
- working-directory: frontend
- steps:
- - name: Checkout repository
- uses: actions/checkout@v4
- - name: Set up Node.js
- uses: actions/setup-node@v4
- with:
- node-version: '20'
- cache: 'npm'
- cache-dependency-path: frontend/package-lock.json
- - name: Install dependencies
- run: npm ci
- - name: Install Playwright browsers
- run: npx playwright install --with-deps chromium
- - name: Run Playwright tests
- run: npm run test:e2e
- env:
- CI: true
- - name: Upload Playwright report
- uses: actions/upload-artifact@v4
- if: failure()
- with:
- name: playwright-report
- path: frontend/playwright-report/
- retention-days: 7
|