Skip to content

Performance Test Set-up (1) #618

Performance Test Set-up (1)

Performance Test Set-up (1) #618

Workflow file for this run

name: Go
on:
push:
branches: [master]
pull_request:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
BASE_SHA: ${{ github.before || github.event.pull_request.base.sha }}
BASE_BRANCH: ${{ github.base_ref || github.ref }}
TARGET_SHA: ${{ github.sha }}
BENCH_COUNT: 7
jobs:
code-quality:
name: Code Quality
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v4
- name: Install Go
uses: actions/setup-go@v5
with:
go-version: "1.21"
- name: go mod download
run: go mod download
- name: go fmt
run: make go.fmt
- name: check diff
run: |
if ! [ -z "$(git diff)" ]; then
echo "Detected changes that have not been committed to the repository"
echo "Please run 'make go.fmt'"
echo "git diff:"
git diff
exit 1
fi
- name: go vet
run: make go.vet
tests:
name: Run Tests
runs-on: ubuntu-latest
steps:
- name: Check out Code
uses: actions/checkout@v4
- name: Install Go
uses: actions/setup-go@v5
with:
go-version: "1.21"
- name: go mod download
run: go mod download
- name: Run tests
run: make go.test
benchmarks:
permissions:
contents: read # for actions/checkout to fetch code
pull-requests: write # for marocchino/sticky-pull-request-comment to create or update PR comment
name: Run Benchmarks
runs-on: ubuntu-latest
steps:
- name: Check out Code
uses: actions/checkout@v4
- name: Install Go
uses: actions/setup-go@v5
with:
go-version: "1.21"
- name: go mod download
run: |
go mod download
go install golang.org/x/perf/cmd/benchstat@latest
- name: Gather CPU info
id: cpuinfo
run: |
echo "model=$(cat /proc/cpuinfo | awk -F ': ' '/model name/ { print $2; exit }')" >> $GITHUB_OUTPUT
echo count=$(nproc) >> $GITHUB_OUTPUT
- name: Install Dqlite
run: |
sudo add-apt-repository -y ppa:dqlite/dev
sudo apt install libdqlite-dev
- name: Run benchmarks
id: bench
run: |
set -o pipefail
go test \
-timeout 1h \
-tags libsqlite3 -v -p 1 ./... \
-benchmem -count $BENCH_COUNT \
-run "^$$" -bench . \
| tee bench-$TARGET_SHA.txt
- name: Restore base benchmark result
id: bench-cache
uses: actions/cache@v4
with:
path: |
bench-${{ env.BASE_SHA }}.txt
key: ${{ runner.os }}-${{ steps.cpuinfo.outputs.model }}-${{ steps.cpuinfo.outputs.count }}-bench-${{ env.BENCH_COUNT }}-${{ github.workflow_sha }}-${{ env.BASE_SHA }}
- name: Run benchmark for base code
if: steps.bench-cache.outputs.cache-hit != 'true'
run: |
set -o pipefail
git fetch origin $BASE_BRANCH
git reset --hard $BASE_SHA
go test \
-timeout 1h \
-tags libsqlite3 -v -p 1 ./... \
-benchmem -count $BENCH_COUNT \
-run "^$$" -bench . \
| tee bench-$BASE_SHA.txt
git reset --hard $TARGET_SHA
- name: Benchmark stats
id: stats
run: |
GOPATH=$(realpath $(go env GOPATH))
echo "current<<EOF" >> $GITHUB_OUTPUT && \
$GOPATH/bin/benchstat After=bench-$TARGET_SHA.txt | tee -a $GITHUB_OUTPUT && \
echo EOF >> $GITHUB_OUTPUT
echo "diff<<EOF" >> $GITHUB_OUTPUT && \
$GOPATH/bin/benchstat Before=bench-$BASE_SHA.txt After=bench-$TARGET_SHA.txt | tee -a $GITHUB_OUTPUT && \
echo EOF >> $GITHUB_OUTPUT
- name: Publish benchmark result
if: github.event_name == 'pull_request'
continue-on-error: true
uses: marocchino/sticky-pull-request-comment@v2
with:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
header: Benchmarks
message: |
### Benchmark Result
```
${{ steps.stats.outputs.diff }}
```
<details><summary>Current status</summary>
```
${{ steps.stats.outputs.current }}
```
</details>
build:
name: Build k8s-dqlite
runs-on: ubuntu-latest
steps:
- name: Check out code
uses: actions/checkout@v4
- name: Install Go
uses: actions/setup-go@v5
with:
go-version: "1.21"
- name: Build static binaries
run: |
make -j static
./bin/static/k8s-dqlite --help
./bin/static/k8s-dqlite migrator --help
./bin/static/dqlite --help
- name: Build shared binaries
run: |
make -j dynamic
./bin/dynamic/k8s-dqlite --help
./bin/dynamic/k8s-dqlite migrator --help
./bin/dynamic/dqlite --help