name: Update bench baselines
on:
workflow_dispatch:
pull_request_target:
branches: [main]
types: [closed]
concurrency:
group: ${{ github.workflow }}
env:
BENCH_TOOLCHAIN: 1.98.0
permissions:
contents: read actions: write
jobs:
save:
name: save (${{ matrix.os }})
if: |
(github.event_name == 'workflow_dispatch' && github.ref == 'refs/heads/main') ||
(github.event_name == 'pull_request_target' && github.event.action == 'closed' &&
github.event.pull_request.merged && github.event.pull_request.base.ref == 'main' &&
contains(github.event.pull_request.labels.*.name, 'bench-update'))
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, ubuntu-24.04-arm]
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v7
with:
submodules: true
ref: ${{ github.event.pull_request.merge_commit_sha || github.sha }}
- uses: actions/checkout@v7
with:
repository: bitshifter/glam-bench-baselines
path: benches/gungraun-baselines
token: ${{ secrets.GLAM_BENCH_BASELINES_TOKEN }}
- name: Remove baselines saved by other runners
run: |
find benches/gungraun-baselines -type f -name '*.base@*' -delete
rm -f benches/gungraun-baselines/x86_64.md benches/gungraun-baselines/aarch64.md
find benches/gungraun-baselines -type d -empty -delete
- uses: Swatinem/rust-cache@v2
- run: rustup update --no-self-update ${{ env.BENCH_TOOLCHAIN }}
- run: rustup default ${{ env.BENCH_TOOLCHAIN }}
- run: rustup update --no-self-update nightly
- run: rustup component add rust-src
- run: rustup component add rust-src --toolchain nightly
- name: Install valgrind
run: sudo apt-get update && sudo apt-get install -y valgrind
- name: Install cargo-asm
run: cargo install cargo-show-asm --version 0.2.62 --locked
- run: cargo run --release -p ci -- bench --save --asm
- name: Keep only baseline and asm files
run: |
find benches/gungraun-baselines -type f \
! -name '*.base@*' ! -name 'Cargo.lock' \
! -name 'x86_64.md' ! -name 'aarch64.md' \
! -path 'benches/gungraun-baselines/asm/*' -delete
find benches/gungraun-baselines -type d -empty -delete
- uses: actions/upload-artifact@v7
with:
name: baselines-${{ matrix.os }}
path: benches/gungraun-baselines
if-no-files-found: error
commit:
name: Commit baselines
needs: save
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
with:
repository: bitshifter/glam-bench-baselines
path: baselines
token: ${{ secrets.GLAM_BENCH_BASELINES_TOKEN }}
- name: Clear previous baselines
run: |
cd baselines
rm -rf glam Cargo.lock x86_64.md aarch64.md asm
- uses: actions/download-artifact@v8
with:
pattern: baselines-*
path: baselines
merge-multiple: true
- name: Commit baselines
run: |
cd baselines
git config user.name "github-actions[bot]"
git config user.email "41898282+github-actions[bot]@users.noreply.github.com"
git add -A
if git diff --cached --quiet; then
echo "no baseline changes"
exit 0
fi
git commit -m "chore: update bench baselines from glam-rs@${{ github.event.pull_request.merge_commit_sha || github.sha }}"
git push