Hotfix for playground CDN load in docs #122
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] | |
| workflow_dispatch: | |
| jobs: | |
| # Full test suite on main branch with Node.js matrix | |
| test: | |
| name: Test Suite (Node ${{ matrix.node }}) | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| node: [20, 22, 24] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: ${{ matrix.node }} | |
| cache: 'npm' | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.13' | |
| - uses: mlugg/setup-zig@v2 | |
| with: | |
| version: "0.15.2" | |
| - name: Install dependencies | |
| run: | | |
| pip install "numpy>=2" | |
| npm install | |
| - name: Verify environment | |
| run: | | |
| echo "Node version: $(node --version)" | |
| echo "npm version: $(npm --version)" | |
| python -c "import numpy as np; print(f'NumPy {np.__version__} installed')" | |
| - name: Run linting | |
| run: npm run lint | |
| - name: Run type checking | |
| run: npm run typecheck | |
| - name: Zig dead code check | |
| run: npm run report:zig-dead-code | |
| - name: Run all tests | |
| run: npm test | |
| - name: DType sweep (JS backend) | |
| run: npm run test:dtypes:js | |
| - name: DType sweep (WASM backend) | |
| run: npm run test:dtypes:wasm | |
| - name: Generate test summary | |
| if: always() | |
| run: | | |
| echo "## Test Results (Node ${{ matrix.node }})" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "✅ All tests passed on main branch" >> $GITHUB_STEP_SUMMARY | |
| # Run full unit suite + IO-throws validation in a real browser | |
| test-browser: | |
| name: Test Suite (Browser) | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 24 | |
| cache: 'npm' | |
| - uses: mlugg/setup-zig@v2 | |
| with: | |
| version: "0.15.2" | |
| - name: Install dependencies | |
| run: npm install | |
| - name: Install Playwright browsers | |
| run: npx playwright install --with-deps chromium firefox webkit | |
| - name: Run browser tests | |
| run: npm run test:browser | |
| - name: Generate test summary | |
| if: always() | |
| run: | | |
| echo "## Test Results (Browser — Chromium)" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "✅ All tests passed in Chromium via Playwright" >> $GITHUB_STEP_SUMMARY | |
| # Run tests under Bun | |
| test-bun: | |
| name: Test Suite (Bun) | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 24 | |
| cache: 'npm' | |
| - uses: oven-sh/setup-bun@v2 | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.13' | |
| - uses: mlugg/setup-zig@v2 | |
| with: | |
| version: "0.15.2" | |
| - name: Install dependencies | |
| run: | | |
| pip install "numpy>=2" | |
| npm install | |
| - name: Run tests under Bun | |
| run: npm run test:bun | |
| - name: Generate test summary | |
| if: always() | |
| run: | | |
| echo "## Test Results (Bun)" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "✅ All tests passed under Bun" >> $GITHUB_STEP_SUMMARY | |
| # Run tests under Deno | |
| test-deno: | |
| name: Test Suite (Deno) | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 24 | |
| cache: 'npm' | |
| - uses: denoland/setup-deno@v2 | |
| with: | |
| deno-version: v2.x | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.13' | |
| - uses: mlugg/setup-zig@v2 | |
| with: | |
| version: "0.15.2" | |
| - name: Install dependencies | |
| run: | | |
| pip install "numpy>=2" | |
| npm install | |
| - name: Run tests under Deno | |
| run: npm run test:deno | |
| - name: Generate test summary | |
| if: always() | |
| run: | | |
| echo "## Test Results (Deno)" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "✅ All tests passed under Deno" >> $GITHUB_STEP_SUMMARY | |
| # Generate and upload test coverage | |
| coverage: | |
| name: Coverage Report | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 24 | |
| cache: 'npm' | |
| - uses: actions/setup-python@v5 | |
| with: | |
| python-version: '3.13' | |
| - name: Install dependencies | |
| run: | | |
| pip install "numpy>=2" | |
| npm install | |
| - name: Run tests with coverage | |
| run: npm run test:coverage | |
| - name: Zig export fn test coverage (≥95%) | |
| run: npm run report:zig-coverage | |
| - name: DType coverage report | |
| run: npm run report:dtype-coverage | |
| # - name: Upload coverage reports | |
| # uses: codecov/codecov-action@v4 | |
| # with: | |
| # files: ./coverage/coverage-final.json | |
| # flags: unittests | |
| # fail_ci_if_error: false | |
| # token: ${{ secrets.CODECOV_TOKEN }} | |
| - name: Coverage summary | |
| run: | | |
| echo "## Coverage Report" >> $GITHUB_STEP_SUMMARY | |
| if [ -f coverage/coverage-summary.json ]; then | |
| node -e " | |
| const coverage = require('./coverage/coverage-summary.json'); | |
| const total = coverage.total; | |
| console.log('| Metric | Coverage |'); | |
| console.log('|--------|----------|'); | |
| console.log(\`| Lines | \${total.lines.pct}% |\`); | |
| console.log(\`| Statements | \${total.statements.pct}% |\`); | |
| console.log(\`| Functions | \${total.functions.pct}% |\`); | |
| console.log(\`| Branches | \${total.branches.pct}% |\`); | |
| " >> $GITHUB_STEP_SUMMARY | |
| fi | |
| # Build and validate distribution | |
| build: | |
| name: Build Distribution | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 24 | |
| cache: 'npm' | |
| - uses: mlugg/setup-zig@v2 | |
| with: | |
| version: "0.15.2" | |
| - name: Install dependencies | |
| run: npm install | |
| - name: Build all bundles | |
| run: npm run build | |
| - name: Check bundle sizes | |
| run: | | |
| echo "## Bundle Sizes" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "| Bundle | Size | Gzipped |" >> $GITHUB_STEP_SUMMARY | |
| echo "|--------|------|---------|" >> $GITHUB_STEP_SUMMARY | |
| for file in dist/*.js dist/*.mjs; do | |
| if [ -f "$file" ]; then | |
| size=$(ls -lh "$file" | awk '{print $5}') | |
| gzip -c "$file" > "$file.gz" | |
| gzsize=$(ls -lh "$file.gz" | awk '{print $5}') | |
| rm "$file.gz" | |
| echo "| $(basename $file) | $size | $gzsize |" >> $GITHUB_STEP_SUMMARY | |
| fi | |
| done | |
| - name: Upload build artifacts | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: dist | |
| path: dist/ | |
| retention-days: 30 |