Test #43
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
| # Full test suite: harness + every model (Julia version matrix) + frontend. | |
| # Also reusable (workflow_call) — benchmark.yml runs it as a gate so that | |
| # benchmarks are never recorded on a red test suite (design/architecture.md). | |
| name: Test | |
| on: | |
| pull_request: | |
| push: | |
| branches: [main] | |
| paths-ignore: | |
| - "data/results/**" # benchmark bot commits must not trigger CI (loop avoidance) | |
| schedule: | |
| - cron: "0 6 * * 1" # weekly Monday 06:00 UTC | |
| workflow_dispatch: | |
| workflow_call: | |
| permissions: | |
| contents: read | |
| # Run JS-based actions (checkout, setup-julia, setup-node, and the actions/cache + | |
| # pyTooling steps vendored inside julia-actions/cache) on Node 24 — Node 20 is deprecated. | |
| env: | |
| FORCE_JAVASCRIPT_ACTIONS_TO_NODE24: "true" | |
| jobs: | |
| harness: | |
| name: Harness (Julia ${{ matrix.julia }}) | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| julia: ["1.10", "1.11", "1.12"] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: julia-actions/setup-julia@v2 | |
| with: | |
| version: ${{ matrix.julia }} | |
| - uses: julia-actions/cache@v2 | |
| - name: Run harness tests (no model subprocesses) | |
| env: | |
| RXBENCH_SKIP_SMOKE: "1" # smoke runs in the models job below | |
| run: julia --project=benchmarks/harness -e 'using Pkg; Pkg.instantiate(); Pkg.test()' | |
| models: | |
| name: ${{ matrix.model }} (Julia ${{ matrix.julia }}) | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| model: [coin_toss, iid_normal, linear_regression, kalman, gaussian_mixture] | |
| julia: ["1.10", "1.11", "1.12"] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: julia-actions/setup-julia@v2 | |
| with: | |
| version: ${{ matrix.julia }} | |
| - uses: julia-actions/cache@v2 | |
| - name: Resolve and test | |
| env: | |
| USE_DEV: "false" | |
| LOG_USING_RXINFER: "false" | |
| JULIA_FASTCHOLESKY_THROW_ERROR_NON_SYMMETRIC: "1" | |
| THROW_ON_INFERENCE_ERROR_HINT: "true" | |
| # Pkg.update() re-resolves the committed Manifest for this Julia version | |
| # (manifests are resolved on the latest stable; LTS may need different versions). | |
| run: julia --project=models/${{ matrix.model }} -e 'using Pkg; Pkg.update(); Pkg.test()' | |
| smoke: | |
| name: End-to-end smoke (Julia ${{ matrix.julia }}) | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| julia: ["1.12"] | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: julia-actions/setup-julia@v2 | |
| with: | |
| version: ${{ matrix.julia }} | |
| - uses: julia-actions/cache@v2 | |
| - name: Instantiate all projects | |
| run: | | |
| julia --project=benchmarks/harness -e 'using Pkg; Pkg.instantiate()' | |
| for d in models/*/; do m=$(basename "$d"); | |
| julia --project=models/$m -e 'using Pkg; Pkg.update()' | |
| done | |
| - name: Smoke benchmark run (tiny sizes, temp output) | |
| env: | |
| RXBENCH_SMOKE: "1" | |
| RXBENCH_HARDWARE_ID: github-actions-ubuntu | |
| USE_DEV: "false" | |
| LOG_USING_RXINFER: "false" | |
| JULIA_FASTCHOLESKY_THROW_ERROR_NON_SYMMETRIC: "1" | |
| THROW_ON_INFERENCE_ERROR_HINT: "true" | |
| run: julia --project=benchmarks/harness benchmarks/harness/bin/run_benchmarks.jl | |
| frontend: | |
| name: Frontend (lint, typecheck, tests, static build) | |
| runs-on: ubuntu-latest | |
| defaults: | |
| run: | |
| working-directory: frontend | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| cache: npm | |
| cache-dependency-path: frontend/package-lock.json | |
| - run: npm ci | |
| - run: npm run lint | |
| - run: npm run typecheck | |
| - run: npm run test | |
| - run: npm run build | |
| - name: Verify the build is fully static (hard rule) | |
| run: npm run check-static |