Skip to content

Hotfix for playground CDN load in docs #122

Hotfix for playground CDN load in docs

Hotfix for playground CDN load in docs #122

Workflow file for this run

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