name: CI on: pull_request: types: [opened, synchronize, reopened] permissions: contents: read concurrency: group: ci-${{ github.event.pull_request.number || github.ref }} cancel-in-progress: true jobs: frontend: name: Frontend tests and lint if: github.event.pull_request.head.repo.full_name != github.repository runs-on: ubuntu-latest steps: - name: Check out repository uses: actions/checkout@v4 - name: Set up Node.js uses: actions/setup-node@v4 with: node-version: 22 cache: npm - name: Install JavaScript dependencies run: npm ci - name: Run JavaScript tests run: npm test - name: Run ESLint run: npm run lint backend: name: Python tests and static checks if: github.event.pull_request.head.repo.full_name != github.repository runs-on: ubuntu-latest steps: - name: Check out repository uses: actions/checkout@v4 - name: Set up Python uses: actions/setup-python@v5 with: python-version: "3.10" cache: pip - name: Install Python dependencies run: python -m pip install --upgrade pip && python -m pip install -e ".[dev]" - name: Run Python tests run: python -m pytest - name: Run Ruff run: python -m ruff check __init__.py core - name: Check Python syntax run: python -m compileall -q __init__.py core