BenchmarkCI.jl provides an easy way to run benchmark suite via GitHub Actions. It only needs a minimal setup if there is a benchmark suite declared by BenchmarkTools.jl / PkgBenchmark.jl API.
Warning This package is still experimental. Make sure to fix the version number in your CI setup.
BenchmarkCI.jl requires PkgBenchmark.jl to work.  See
Defining a benchmark suite · PkgBenchmark.jl
for more information.  BenchmarkCI.jl also requires a Julia project
benchmark/Project.toml that is used for running the benchmark.
Create (say) .github/workflows/benchmark.yml with the following
configuration:
name: Run benchmarks
on:
  pull_request:
jobs:
  Benchmark:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: julia-actions/setup-julia@latest
        with:
          version: 1
      - uses: julia-actions/julia-buildpkg@latest
      - name: Install dependencies
        run: julia -e 'using Pkg; pkg"add PkgBenchmark BenchmarkCI@0.1"'
      - name: Run benchmarks
        run: julia -e 'using BenchmarkCI; BenchmarkCI.judge()'
      - name: Post results
        run: julia -e 'using BenchmarkCI; BenchmarkCI.postjudge()'
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}If you don't want to benchmark your code for every push of every PR, then you can conditionally trigger the jobs on a label:
name: Run benchmarks
on:
  pull_request:
    types: [labeled, opened, synchronize, reopened]
# Only trigger the benchmark job when you add `run benchmark` label to the PR
jobs:
  Benchmark:
    runs-on: ubuntu-latest
    if: contains(github.event.pull_request.labels.*.name, 'run benchmark')
    steps:
      - uses: actions/checkout@v2
      - uses: julia-actions/setup-julia@latest
        with:
          version: 1
      - uses: julia-actions/julia-buildpkg@latest
      - name: Install dependencies
        run: julia -e 'using Pkg; pkg"add PkgBenchmark BenchmarkCI@0.1"'
      - name: Run benchmarks
        run: julia -e 'using BenchmarkCI; BenchmarkCI.judge()'
      - name: Post results
        run: julia -e 'using BenchmarkCI; BenchmarkCI.postjudge()'
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}If benchmark/Manifest.toml is checked into the repository,
benchmark/Project.toml must include parent project as well.  Run
dev .. in benchmark/ directory to add it:
shell> cd ~/.julia/dev/MyProject/
shell> cd benchmark/
(@v1.x) pkg> activate .
Activating environment at `~/.julia/dev/MyProject/benchmark/Project.toml`
(benchmark) pkg> dev ..
It is recommended to add following two lines in .gitignore:
/.benchmarkci
/benchmark/*.json
This is useful for running BenchmarkCI locally (see below).
Posting the benchmark result as a comment for every push for each PR
may be too noisy.  In such case, using
BenchmarkCI.displayjudgement() instead of BenchmarkCI.postjudge()
may be useful.
      - name: Print judgement
        run: julia -e 'using BenchmarkCI; BenchmarkCI.displayjudgement()'Alternatively, the benchmark result and report markdown can be pushed
to a git branch benchmark-results
(example).
      - name: Push results
        run: julia -e "using BenchmarkCI; BenchmarkCI.pushresult()"
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
          SSH_KEY: ${{ secrets.DOCUMENTER_KEY }}This method can also be used in Travis CI.  See
this example .travis.yml.
WARNING: Storage format may be changed across releases.
shell> cd ~/.julia/dev/MyProject/
julia> using BenchmarkCI
julia> BenchmarkCI.judge()
...
julia> BenchmarkCI.displayjudgement()
...