name: Criterion Compare
description: Run Criterion on the PR and base branch, then compare baselines with critcmp.
inputs:
branchName:
description: Base branch to compare against.
required: true
cwd:
description: Directory where the benchmark crate lives.
required: true
benchName:
description: Criterion benchmark target to run.
required: true
criterionArgs:
description: Extra arguments to pass to Criterion after `--`.
required: false
default: ""
runs:
using: composite
steps:
- name: Install critcmp
shell: bash
run: cargo install critcmp
- name: Benchmark changes
shell: bash
working-directory: ${{ inputs.cwd }}
run: cargo bench --bench "${{ inputs.benchName }}" -- ${{ inputs.criterionArgs }} --save-baseline changes
- name: Fetch base branch
shell: bash
run: git fetch --depth=1 origin "${{ inputs.branchName }}"
- name: Check out base branch
shell: bash
run: git checkout --detach FETCH_HEAD
- name: Benchmark base
shell: bash
working-directory: ${{ inputs.cwd }}
run: cargo bench --bench "${{ inputs.benchName }}" -- ${{ inputs.criterionArgs }} --save-baseline base
- name: Compare baselines
shell: bash
working-directory: ${{ inputs.cwd }}
run: |
set -o pipefail
{
echo "### Benchmark comparison: ${{ inputs.benchName }}"
echo
echo '```'
critcmp base changes
echo '```'
} | tee -a "$GITHUB_STEP_SUMMARY"