name: frontend-tests on: pull_request: branches: [main] paths: - 'src/**' - 'package.json' - 'package-lock.json' - 'vitest.config.ts' - 'vite.config.ts' - 'tsconfig.json' - '.github/workflows/frontend-tests.yml' - '.github/frontend-hot-path-files.txt' - 'scripts/check-frontend-hot-path-coverage.sh' - 'scripts/check-css-import-graph.mjs' push: branches: [main] paths: - 'src/**' - 'package.json' - 'package-lock.json' - 'vitest.config.ts' - 'vite.config.ts' - 'tsconfig.json' - '.github/workflows/frontend-tests.yml' - '.github/frontend-hot-path-files.txt' - 'scripts/check-frontend-hot-path-coverage.sh' - 'scripts/check-css-import-graph.mjs' workflow_dispatch: permissions: contents: read jobs: test: name: vitest run runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v5 - uses: actions/setup-node@v6 with: node-version: 'lts/*' cache: 'npm' - run: npm ci - name: vitest run: npm test typecheck: name: tsc --noEmit runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v5 - uses: actions/setup-node@v6 with: node-version: 'lts/*' cache: 'npm' - run: npm ci - name: tsc run: npx tsc --noEmit coverage: name: vitest --coverage (baseline + hot-path file gate) runs-on: ubuntu-24.04 steps: - uses: actions/checkout@v5 - uses: actions/setup-node@v6 with: node-version: 'lts/*' cache: 'npm' - name: install jq run: sudo apt-get update && sudo apt-get install -y jq - run: npm ci - name: vitest run --coverage run: npx vitest run --coverage - name: hot-path file coverage gate run: bash scripts/check-frontend-hot-path-coverage.sh - uses: actions/upload-artifact@v4 with: name: frontend-coverage-lcov path: coverage/lcov.info if-no-files-found: error