name: Test 'on': pull_request: branches: - main - feat/workforce-bundle-product push: branches: - main - feat/workforce-bundle-product permissions: contents: read jobs: web-local-smoke: name: Run Web + Local Brain Smoke runs-on: ubuntu-latest timeout-minutes: 25 steps: - name: Checkout code uses: actions/checkout@v4 - name: Set up Node.js uses: actions/setup-node@v4 with: node-version: 20 - name: Install frontend dependencies run: npm install --ignore-scripts - name: Install uv uses: astral-sh/setup-uv@v5 with: enable-cache: true - name: Set up Python run: uv python install 3.11 - name: Install backend dependencies run: | cd backend uv sync - name: Run web + local brain smoke run: bash scripts/smoke-web-local-brain.sh frontend-quality: name: Run Frontend Guardrails runs-on: ubuntu-latest timeout-minutes: 30 steps: - name: Checkout code uses: actions/checkout@v4 with: fetch-depth: 0 ref: ${{ github.event.pull_request.head.sha || github.sha }} - name: Set up Node.js uses: actions/setup-node@v4 with: node-version: 20 - name: Install frontend dependencies run: npm install --ignore-scripts - name: Run type check run: npm run type-check - name: Reject new Vitest failures relative to target env: VITEST_BASE_SHA: ${{ github.event.pull_request.base.sha || github.event.before }} VITEST_HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }} run: node scripts/check-vitest-regressions.mjs - name: Upload Vitest comparison reports if: always() uses: actions/upload-artifact@v4 with: name: vitest-regression-reports path: test-results/regression/*.xml if-no-files-found: error - name: Check Electron Access Guard run: bash scripts/check-electron-access.sh - name: Design tokens (engine + no hard-coded colors in UI) run: npm run check:design-tokens - name: Check frontend formatting env: FORMAT_BASE_SHA: ${{ github.event.pull_request.base.sha || github.event.before }} FORMAT_HEAD_SHA: ${{ github.event.pull_request.head.sha || github.sha }} run: node scripts/check-changed-format.mjs pytest: name: Run Python Tests runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Install uv uses: astral-sh/setup-uv@v5 with: enable-cache: true - name: Set up Python run: uv python install 3.11 - name: Install dependencies run: | cd backend uv sync - name: Run unit tests run: | cd backend uv run pytest tests/app -v