Quick start
Add a few lines to your CI and open a PR. prperf measures your Ruby benchmark with the open-source rperf profiler and reports base→head on the Check Run, without ever blocking CI. Public repositories need no App install.
Setup
bin/rails runner "".
push (the default branch) and
pull_request. The action writes the Check Run with the
workflow token — no install needed.
Drop this in .github/workflows/prperf.yml:
name: prperf
on:
push:
branches: [main, master] # records the base (default branch; list both so main or master works)
pull_request: # compared against the base
jobs:
bench:
runs-on: ubuntu-latest
permissions:
contents: read # checkout
id-token: write # OIDC upload (no secrets)
checks: write # write the Check Run (public repos)
pull-requests: write # sticky comment (public repos)
steps:
- uses: actions/checkout@v6
- uses: ruby/setup-ruby@v1
with: { bundler-cache: true }
- uses: rperf-dev/prperf-action@v1
with:
run: bin/rails runner "" # your measurement command (step 1) — no rperf incantation
Put rperf in your Gemfile (a group :rperf
is fine) so the action can measure with it — it runs your run:
command under rperf, unchanged. Threshold
alerts, multiple benchmarks (benchmark), comment control
(comment), and run count (count, default 3, median)
are available too.
Results
On each PR, the result shows up right in the PR's Checks as a summary compared against the base. A comment is posted only when a threshold is exceeded, and the flamegraph diff shows which method got heavier.
Every PR and push also records a measurement, so you can browse the history over time at prperf.atdot.net.
prperf never blocks CI and needs no secrets. PRs from forks can't be measured (no OIDC token), and during the free beta only public repositories are supported (private repositories arrive with paid plans).
Next, the full guide — setup, writing good benchmarks, and reading the results — is in the prperf manual.