bench: fail CI on kernel value mismatch #59
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: Publish Wiki & Deploy Site | |
| on: | |
| push: | |
| branches: | |
| - main | |
| paths: | |
| - 'book/**' | |
| - 'website/**' | |
| - 'crates/**' | |
| - 'Cargo.toml' | |
| - 'Cargo.lock' | |
| - '.env.markflow' | |
| - '.github/workflows/wiki.yml' | |
| workflow_dispatch: | |
| permissions: | |
| contents: write | |
| pages: write | |
| id-token: write | |
| concurrency: | |
| group: pages | |
| cancel-in-progress: true | |
| jobs: | |
| publish-wiki: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Prepare wiki content | |
| run: | | |
| mkdir -p wiki | |
| # Copy book files to wiki directory | |
| cp book/README.md wiki/Home.md | |
| cp book/01-introduction.md wiki/01-Introduction.md | |
| cp book/02-getting-started.md wiki/02-Getting-Started.md | |
| cp book/03-using-the-cli.md wiki/03-Using-the-CLI.md | |
| cp book/04-grammar-syntax.md wiki/04-Grammar-Syntax.md | |
| cp book/05-semantic-actions.md wiki/05-Semantic-Actions.md | |
| cp book/06-typed-ast.md wiki/06-The-TypedAST.md | |
| cp book/07-typed-ast-builder.md wiki/07-TypedAST-Builder.md | |
| cp book/08-zig-example.md wiki/08-Zig-Example.md | |
| cp book/09-reference.md wiki/09-Reference.md | |
| cp book/10-packaging-distribution.md wiki/10-Packaging-Distribution.md | |
| cp book/11-hir-builder.md wiki/11-HIR-Builder.md | |
| cp book/12-embedding-sdk.md wiki/12-Embedding-SDK.md | |
| cp book/13-async-runtime.md wiki/13-Async-Runtime.md | |
| cp book/14-runtime-plugins.md wiki/14-Runtime-Plugins.md | |
| cp book/15-building-dsls.md wiki/15-Building-DSLs.md | |
| cp book/16-image-pipeline-dsl.md wiki/16-Image-Pipeline-DSL.md | |
| # Fix internal links for wiki format | |
| sed -i 's|\./01-introduction\.md|01-Introduction|g' wiki/*.md | |
| sed -i 's|\./02-getting-started\.md|02-Getting-Started|g' wiki/*.md | |
| sed -i 's|\./03-using-the-cli\.md|03-Using-the-CLI|g' wiki/*.md | |
| sed -i 's|\./04-grammar-syntax\.md|04-Grammar-Syntax|g' wiki/*.md | |
| sed -i 's|\./05-semantic-actions\.md|05-Semantic-Actions|g' wiki/*.md | |
| sed -i 's|\./06-typed-ast\.md|06-The-TypedAST|g' wiki/*.md | |
| sed -i 's|\./07-typed-ast-builder\.md|07-TypedAST-Builder|g' wiki/*.md | |
| sed -i 's|\./08-zig-example\.md|08-Zig-Example|g' wiki/*.md | |
| sed -i 's|\./09-reference\.md|09-Reference|g' wiki/*.md | |
| sed -i 's|\./10-packaging-distribution\.md|10-Packaging-Distribution|g' wiki/*.md | |
| sed -i 's|\./11-hir-builder\.md|11-HIR-Builder|g' wiki/*.md | |
| sed -i 's|\./12-embedding-sdk\.md|12-Embedding-SDK|g' wiki/*.md | |
| sed -i 's|\./13-async-runtime\.md|13-Async-Runtime|g' wiki/*.md | |
| sed -i 's|\./14-runtime-plugins\.md|14-Runtime-Plugins|g' wiki/*.md | |
| sed -i 's|\./15-building-dsls\.md|15-Building-DSLs|g' wiki/*.md | |
| sed -i 's|\./16-image-pipeline-dsl\.md|16-Image-Pipeline-DSL|g' wiki/*.md | |
| - name: Upload wiki | |
| uses: Andrew-Chen-Wang/github-wiki-action@v4 | |
| with: | |
| path: wiki/ | |
| token: ${{ secrets.GITHUB_TOKEN }} | |
| benchmark: | |
| name: bench (${{ matrix.kernel }}) | |
| runs-on: ubuntu-latest | |
| # Matrix-per-kernel mirrors rayzor's CI shape: each kernel gets a | |
| # fresh GHA runner so cumulative thermal/cache throttling from | |
| # heavy earlier kernels (mandelbrot, nbody) doesn't bleed into the | |
| # later light ones. `fail-fast: false` keeps one bad kernel from | |
| # cancelling the rest of the sweep. | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| kernel: | |
| - mandelbrot | |
| - nbody | |
| - nbody_ref | |
| - fib | |
| - inlined_call | |
| - free_function_call | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Setup Rust toolchain | |
| uses: dtolnay/rust-toolchain@stable | |
| - name: Cache cargo artifacts | |
| uses: Swatinem/rust-cache@v2 | |
| with: | |
| key: bench-runner | |
| - name: Install LLVM 21 | |
| run: | | |
| wget -qO llvm.sh https://apt.llvm.org/llvm.sh | |
| chmod +x llvm.sh | |
| sudo ./llvm.sh 21 all | |
| echo "LLVM_SYS_211_PREFIX=/usr/lib/llvm-21" >> "$GITHUB_ENV" | |
| - name: Run benchmark (${{ matrix.kernel }}) | |
| env: | |
| RUST_MIN_STACK: 134217728 | |
| # Median-of-9 + per-kernel runner = honest x86_64 numbers. | |
| # 9 samples dampens GHA shared-tenant noise (variable CPU | |
| # clock, neighbour load, thermal throttling) meaningfully | |
| # below the typical 10-20% single-run drift; per-kernel | |
| # matrix means the extra runs don't serialize with the rest | |
| # of the sweep. `--filter` runs only this matrix entry's | |
| # kernel; the JSON naturally ends up with just that kernel's | |
| # data plus meta. `--features llvm-backend` exercises the | |
| # full tier-up ladder so the `zyntax-tiered-llvm` column | |
| # reflects honest LLVM-tier numbers. | |
| run: | | |
| mkdir -p bench-out | |
| cargo run --release --package zynml --example bench_runner --features llvm-backend -- \ | |
| --out bench-out/results-${{ matrix.kernel }}.json \ | |
| --filter ${{ matrix.kernel }} \ | |
| --runs 9 | |
| - name: Upload partial benchmark result | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: bench-${{ matrix.kernel }} | |
| path: bench-out/results-${{ matrix.kernel }}.json | |
| retention-days: 90 | |
| benchmark-aggregate: | |
| name: Aggregate benchmark results | |
| needs: benchmark | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Download all per-kernel results | |
| uses: actions/download-artifact@v4 | |
| with: | |
| pattern: bench-* | |
| path: bench-parts | |
| merge-multiple: true | |
| - name: Merge into single results.json | |
| # jq deep-merge across all per-kernel partials. Each partial | |
| # already carries the same `meta` block (same commit/date/os/ | |
| # arch), so the merge keeps whichever lands last — harmless. | |
| # Per-kernel objects accumulate under their kernel name; the | |
| # final results.json has the shape the static page expects. | |
| run: | | |
| ls -la bench-parts/ | |
| mkdir -p bench-out | |
| jq -s 'reduce .[] as $x ({}; . * $x)' bench-parts/*.json > bench-out/results.json | |
| cat bench-out/results.json | jq 'keys' | |
| - name: Upload merged benchmark results | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: benchmark-results | |
| path: bench-out/results.json | |
| retention-days: 90 | |
| deploy-site: | |
| needs: benchmark-aggregate | |
| runs-on: ubuntu-latest | |
| environment: | |
| name: github-pages | |
| url: ${{ steps.deployment.outputs.page_url }} | |
| steps: | |
| - name: Checkout repository | |
| uses: actions/checkout@v4 | |
| - name: Download benchmark results | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: benchmark-results | |
| path: bench-out | |
| - name: Install Markflow | |
| run: curl -sL https://raw.githubusercontent.com/darmie/markflow/main/install.sh | bash | |
| - name: Build site | |
| run: | | |
| export PATH="$HOME/.markflow:$PATH" | |
| mkdir -p site | |
| # Copy website landing page and assets to site root | |
| cp website/index.html site/index.html | |
| cp website/og-image.png site/og-image.png | |
| cp website/favicon.ico site/favicon.ico | |
| cp website/favicon.svg site/favicon.svg | |
| cp website/apple-touch-icon.png site/apple-touch-icon.png | |
| cp website/icon-192x192.png site/icon-192x192.png | |
| cp website/site.webmanifest site/site.webmanifest | |
| touch site/.nojekyll | |
| echo "zyntax.org" > site/CNAME | |
| # Build book docs with Markflow into /book subdirectory | |
| markflow build --prebake --source ./book --output ./site/book --config .env.markflow | |
| # Publish benchmark page + CI-produced results.json | |
| mkdir -p site/benchmark | |
| cp website/benchmark/index.html site/benchmark/index.html | |
| cp bench-out/results.json site/benchmark/results.json | |
| # Verify book output exists | |
| ls -la site/book/ | |
| ls -la site/benchmark/ | |
| - name: Configure Pages | |
| uses: actions/configure-pages@v5 | |
| - name: Upload Pages artifact | |
| uses: actions/upload-pages-artifact@v3 | |
| with: | |
| path: ./site | |
| - name: Deploy to GitHub Pages | |
| id: deployment | |
| uses: actions/deploy-pages@v4 |