ixa 1.0.0

A framework for building agent-based models
Documentation
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 }}
          # This fetches all branches so we can compare the PR branch with the base branch
          fetch-depth: 0

      - name: Create a benchmark baseline
        run: mise run bench:create '' base || echo "Could not create baseline"

      - name: Checkout PR branch
        # The checkout is done manually to avoid cleaning up the baseline benchmark
        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 }}