# earth-now.co # Author: Simon-Pierre Boucher # Contact: contact@spboucher.ai # File: .github/workflows/ci.yml # Purpose: CI — mandatory header lint, strict typecheck, full test suite and build (incl. widget size gate) on every push/PR name: CI on: push: branches: [main] pull_request: concurrency: group: ci-${{ github.ref }} cancel-in-progress: true jobs: ci: runs-on: ubuntu-latest timeout-minutes: 20 env: ENABLE_RT_POLLERS: "0" steps: - uses: actions/checkout@v4 - uses: pnpm/action-setup@v4 # version is read from package.json "packageManager" - uses: actions/setup-node@v4 with: # jsdom 30 → undici 8 needs markAsUncloneable (Node >= 22.9) node-version: 22 cache: pnpm - name: Install run: pnpm install --frozen-lockfile - name: Header lint (mandatory author header on every source file) run: npx tsx scripts/check-headers.ts - name: Typecheck (strict, all packages) run: pnpm typecheck - name: Tests (golden, property-based, client/server consistency) run: pnpm test - name: Build (apps + widget ≤ 15 KB gzip gate) run: pnpm build