name: Benchmark Pull Requests
on:
pull_request:
jobs:
compare-branches:
runs-on: ubuntu-latest
permissions:
pull-requests: write
steps:
- uses: actions/checkout@v6
- name: Setup environment
uses: ./.github/actions/setup-env
- name: Checkout base branch
uses: actions/checkout@v6
with:
ref: ${{ github.event.pull_request.base.ref }}
fetch-depth: 0
- name: Create a benchmark baseline
run: mise run bench:create '' base || echo "Could not create baseline"
- name: Checkout PR branch
run: git checkout ${{ github.event.pull_request.head.ref }}
- name: Run hyperfine benchmarks
run: mise run bench:hyperfine -- -- --export-markdown hyperfine.md
- name: Run benchmarks on head branch and format output
run: |
echo '### Benchmark Results' > results.md
echo '' >> results.md
echo '#### Hyperfine' >> results.md
echo '' >> results.md
echo '```' >> results.md
cat hyperfine.md >> results.md
echo '```' >> results.md
echo '' >> results.md
echo '#### Criterion' >> results.md
echo '' >> results.md
if ! cargo bench -p ixa-bench -- --baseline base 2>&1; then
echo "Note: A comparison could not be generated. Maybe you added new benchmarks?" >> results.md
mise run bench:criterion 2>&1
else
echo '```' >> results.md
cargo run -q -p ixa-bench --bin check_criterion_regressions >> results.md
echo '```' >> results.md
fi
- name: Add comment to PR
run: |
gh pr comment ${{ github.event.pull_request.number }} \
--repo ${{ github.repository }} \
--body-file results.md
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}