feat: design & quality uplift (Suspect Web, Case Archive, world switcher, renderer decomposition) #207
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: CI | |
| on: | |
| push: | |
| branches: [main] | |
| pull_request: | |
| branches: [main] | |
| # Cancel a PR's superseded in-flight runs when a new commit is pushed; main runs | |
| # are keyed by ref and never auto-cancelled. | |
| concurrency: | |
| group: ci-${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: ${{ github.event_name == 'pull_request' }} | |
| jobs: | |
| check: | |
| runs-on: ubuntu-latest | |
| strategy: | |
| matrix: | |
| node-version: [24.x] | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Install pnpm | |
| # Version comes from the "packageManager" field in package.json. | |
| uses: pnpm/action-setup@v6 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v5 | |
| with: | |
| node-version: ${{ matrix.node-version }} | |
| cache: "pnpm" | |
| - name: Install dependencies | |
| run: pnpm install --frozen-lockfile | |
| - name: Run checks (prettier, eslint, stylelint, typecheck, vitest, build) | |
| run: pnpm check | |
| # End-to-end Playwright specs. Non-blocking (continue-on-error) and the visual | |
| # snapshot test is excluded: the committed screenshot baselines are | |
| # platform-specific and the Linux baseline can drift from macOS-generated ones, | |
| # so it stays a local/manual check (`pnpm e2e`). This job still surfaces real | |
| # structural/behavioral layout regressions on every PR. | |
| e2e: | |
| runs-on: ubuntu-latest | |
| needs: check | |
| continue-on-error: true | |
| # Hard backstop: e2e runs the suite against a `next dev` server (see | |
| # playwright.config.ts), which cold-compiles each route on first hit; this | |
| # caps a hung run rather than letting it idle for the default 6h. | |
| timeout-minutes: 20 | |
| strategy: | |
| matrix: | |
| node-version: [24.x] | |
| steps: | |
| - uses: actions/checkout@v5 | |
| - name: Install pnpm | |
| uses: pnpm/action-setup@v6 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v5 | |
| with: | |
| node-version: ${{ matrix.node-version }} | |
| cache: "pnpm" | |
| - name: Install dependencies | |
| run: pnpm install --frozen-lockfile | |
| - name: Install Playwright browsers | |
| run: pnpm exec playwright install --with-deps chromium | |
| - name: Run e2e (excluding visual snapshot) | |
| run: pnpm exec playwright test --grep-invert "matches snapshot" |