name: CI on: push: branches: [main] pull_request: branches: [main] jobs: lint-format: name: Lint & Format runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Node.js uses: actions/setup-node@v4 with: node-version: '22' cache: 'npm' - name: Install dependencies run: npm ci - name: Check formatting (Prettier) run: npm run format:check - name: Lint (ESLint) run: npm run lint build: name: Build runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Node.js uses: actions/setup-node@v4 with: node-version: '22' cache: 'npm' - name: Install dependencies run: npm ci - name: Build production bundle run: npm run build test: name: Tests (${{ matrix.browser }}) runs-on: ubuntu-latest strategy: fail-fast: false matrix: browser: [firefox, chromium] steps: - uses: actions/checkout@v4 - name: Set up Node.js uses: actions/setup-node@v4 with: node-version: '22' cache: 'npm' - name: Install Node dependencies run: npm ci - name: Set up Python uses: actions/setup-python@v5 with: python-version: '3.11' cache: 'pip' cache-dependency-path: tests/requirements.txt - name: Install Python dependencies run: pip install -r tests/requirements.txt - name: Install Playwright browsers run: python -m playwright install --with-deps ${{ matrix.browser }} - name: Run tests run: python -m pytest tests/ --browser ${{ matrix.browser }} -v env: CI: true