feat: end early when the human is gone, and confirm the ending #70
Workflow file for this run
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: | |
| jobs: | |
| check: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v7 | |
| - uses: oven-sh/setup-bun@v2 | |
| with: | |
| bun-version: latest | |
| - run: bun install --frozen-lockfile | |
| - name: install chromium for the UI e2e | |
| run: bunx playwright-core install --with-deps chromium | |
| - name: typecheck | |
| run: bun run typecheck | |
| - name: lint (biome + oxlint + relay embed sync) | |
| run: bun run lint | |
| - name: unit + integration tests | |
| run: bun test src/ test-app/ e2e/ui.spec.ts | |
| - name: coverage summary (reporting only) | |
| # Reporting, not an enforced gate — deliberately. deploy.ts and | |
| # webhook.ts are exercised by the live e2e (bun run test:e2e), not by | |
| # unit tests, because unit-testing them would mean mocking the Solari | |
| # SDK, which the anti-slop no-module-mocking rule forbids. A hard unit | |
| # threshold would therefore be a fake gate. The number is here to read. | |
| run: bun test --coverage src/ test-app/ | |
| - name: build | |
| run: bun run build | |
| - name: dist smoke — run the shipped artifact under node | |
| # Pins the CJS-interop path a consumer actually executes; bun-driven | |
| # tests cannot catch dist-only breakage (learned from a broken QR). | |
| run: node scripts/dist-smoke.mjs | |
| # e2e (bun run test:e2e) is intentionally not run in CI: it needs a real | |
| # SOLARI_API_KEY and spends plan quota. It is the pre-publish gate, run | |
| # locally against the live API. |