Skip to content

bench: fail CI on kernel value mismatch #59

bench: fail CI on kernel value mismatch

bench: fail CI on kernel value mismatch #59

Workflow file for this run

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