name: CI on: push: branches: [main] # Prose cannot break a build. Provider JSON can, so it is NOT ignored — # the last step here fails if any providers/*.json stops parsing. paths-ignore: - '**/*.md' - 'docs/**' - 'demo/**' - '.gitignore' - 'LICENSE' pull_request: paths-ignore: - '**/*.md' - 'docs/**' - 'demo/**' - '.gitignore' - 'LICENSE' workflow_dispatch: concurrency: group: ci-${{ github.ref }} cancel-in-progress: true jobs: build-test: name: build & test (node ${{ matrix.node }}) runs-on: ubuntu-latest strategy: fail-fast: false matrix: # 22 is the floor the package declares; 24 catches breakage early. node: ['22', '24'] steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: node-version: ${{ matrix.node }} cache: npm - run: npm ci --no-audit --no-fund - name: Typecheck and build run: npm run build - name: Test run: node --test packages/*/test/*.test.ts - name: Verify every shipped provider file parses run: | node --input-type=module -e " import { Registry } from './packages/core/dist/registry.js'; const reg = new Registry({ dir: 'providers', env: {} }); const errors = reg.issues().filter(i => i.level === 'error'); for (const i of reg.issues()) console.log(\`[\${i.level}] \${i.file}: \${i.message}\`); if (errors.length) { console.error(\`\${errors.length} provider file(s) failed to parse\`); process.exit(1); } console.log(\`ok — \${reg.all().length} providers loaded\`); "