name: CI on: push: pull_request: permissions: contents: read jobs: quality: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 with: submodules: recursive - uses: astral-sh/setup-uv@v6 with: python-version: '3.12' enable-cache: true - uses: actions/setup-node@v4 with: node-version: 22 cache: npm cache-dependency-path: web/package-lock.json - name: Install Python dependencies run: uv sync --locked --all-groups - name: Install web dependencies run: npm --prefix web ci - name: Verify generated contracts run: make schemas api-types && git diff --exit-code -- schema web/src/generated && git -C agents/gewu diff --exit-code -- contracts - name: Verify pack manifest run: python agents/gewu/scripts/manifest_tool.py verify - name: Python quality gates run: make check typecheck boundaries test - name: Web quality gates run: make web-check - name: Build web application run: npm --prefix web run build - name: Install browser run: npm --prefix web exec playwright install --with-deps chromium - name: Browser tests run: make browser-test - name: Check whitespace run: git diff --check && git -C agents/gewu diff --check - name: Upload Playwright report if: failure() uses: actions/upload-artifact@v4 with: name: playwright-report path: web/playwright-report/ if-no-files-found: ignore