This repository has been archived by the owner on Apr 19, 2024. It is now read-only.
ci: run benchmarks on every pr and alert if perf is worse #178
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: On Pull Request | |
on: | |
pull_request: | |
branches: [ master, main ] | |
jobs: | |
test: | |
name: test | |
strategy: | |
matrix: | |
go-version: | |
- 1.20.x | |
- 1.21.x | |
os: [ ubuntu-latest ] | |
runs-on: ${{ matrix.os }} | |
steps: | |
- name: Checkout | |
uses: actions/checkout@master | |
- name: Fetch git tags | |
run: git fetch --tags | |
- name: Version consistency check | |
run: ./contrib/check-version.sh | |
- name: Set up Go | |
uses: actions/setup-go@v2 | |
with: | |
go-version: ${{ matrix.go-version }} | |
- run: go env | |
- name: Cache deps | |
uses: actions/cache@v2 | |
with: | |
path: ~/go/pkg/mod | |
key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} | |
restore-keys: | | |
${{ runner.os }}-go- | |
- name: Install deps | |
run: go mod download | |
- name: Test | |
run: go test -v -race -p=1 -count=1 | |
go-bench: | |
runs-on: ubuntu-latest | |
timeout-minutes: 30 | |
steps: | |
- name: Checkout code | |
uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 # to be able to retrieve the last commit in master branch | |
- name: Set up Go | |
uses: actions/setup-go@v4 | |
with: | |
go-version-file: './go.mod' | |
cache-dependency-path: './go.sum' | |
check-latest: true | |
- name: Run benchmark and store the output to a file | |
run: | | |
set -o pipefail | |
make bench | tee ${{ github.sha }}_bench_output.txt | |
- name: Get Main branch SHA | |
id: get-master-branch-sha | |
run: | | |
SHA=$(git rev-parse origin/master) | |
echo "sha=$SHA" >> $GITHUB_OUTPUT | |
- name: Get benchmark JSON from main branch | |
uses: actions/cache/restore@v3 | |
with: | |
path: ./cache/benchmark-data.json | |
key: ${{ steps.get-master-branch-sha.outputs.sha }}-${{ runner.os }}-go-benchmark | |
fail-on-cache-miss: true | |
- name: Compare benchmarks | |
uses: benchmark-action/github-action-benchmark@v1 | |
if: success() | |
with: | |
alert-threshold: "200%" | |
# What benchmark tool the output.txt came from | |
tool: 'go' | |
# Where the output from the benchmark tool is stored | |
output-file-path: ${{ github.sha }}_bench_output.txt | |
# Where the benchmarks in main are (to compare) | |
external-data-json-path: ./cache/benchmark-data.json | |
# Do not save the data | |
save-data-file: false | |
# Workflow will fail when an alert happens | |
fail-on-alert: true | |
github-token: ${{ secrets.GITHUB_TOKEN }} | |
# Enable Job Summary for PRs | |
summary-always: true | |