Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Accept benchmark results based on a PR label #1238

Draft
wants to merge 2 commits into
base: main
Choose a base branch
from
Draft
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
105 changes: 71 additions & 34 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -146,10 +146,71 @@ jobs:
if: matrix.test-set == 'no-thunks-safe'
run: cabal test ouroboros-consensus:consensus-test ouroboros-consensus:doctest ouroboros-consensus:infra-test ouroboros-consensus:storage-test ouroboros-consensus-cardano:byron-test ouroboros-consensus-cardano:shelley-test ouroboros-consensus-diffusion:infra-test ouroboros-consensus-protocol:protocol-test -j --test-show-details=streaming

- name: Identify benchmark executables
run: |
cp $(cabal list-bin mempool-bench) mempool-bench

- name: Upload benchmark executables
uses: actions/upload-artifact@v4
with:
name: benchmark-exes-${{ runner.os }}-${{ matrix.ghc }}
path: mempool-bench
retention-days: 1

# NB: build the haddocks at the end to avoid unecessary recompilations.
# We build the haddocks only for one GHC version.
- name: Build Haddock documentation
if: |
github.event_name == 'push'
&& github.ref == 'refs/heads/main'
&& matrix.ghc=='9.6.6'
run: |
# need for latex, dvisvgm and standalone
sudo apt install texlive-latex-extra texlive-latex-base
# cabal-docspec doesn't work with XDG https://github.com/phadej/cabal-extras/issues/136
sed -i 's_-- store-dir:_store-dir: /home/runner/.local/state/cabal/store_g' ~/.config/cabal/config
export CABAL_CONFIG=~/.config/cabal/config

./scripts/docs/haddocks.sh
tar vzcf haddocks.tgz ./docs/website/static/haddocks

- name: Upload haddocks as an artifact
if: |
github.event_name == 'push'
&& github.ref == 'refs/heads/main'
&& matrix.ghc=='9.6.6'
uses: actions/upload-artifact@v4
with:
name: haddocks
path: haddocks.tgz
retention-days: 1

benchmarks:
name: Run benchmarks
needs: build-test-bench-haddocks

runs-on: ubuntu-latest
strategy:
fail-fast: false
matrix:
ghc: ["8.10.7", "9.6.6", "9.10.1"]

env:
ACCEPT_BENCHMARKS: ${{ contains(github.event.pull_request.labels.*.name, 'acceptable benchmarks') }}
BENCH_OPTIONS: ""

steps:
- uses: actions/checkout@v4

- name: Download benchmark executables
uses: actions/download-artifact@v4
with:
name: benchmark-exes-${{ runner.os }}-${{ matrix.ghc }}

- name: Create baseline-benchmark
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
run: |
cabal new-run ouroboros-consensus:mempool-bench -- \
./mempool-bench \
--timeout=60 --csv mempool-benchmarks.csv \
+RTS -T

Expand All @@ -163,7 +224,6 @@ jobs:
# then we will save the same results we just restored.
- name: Cache benchmark baseline results
uses: actions/cache@v4
if: matrix.variant == 'default'
with:
path: baseline-mempool-benchmarks.csv
key: baseline-mempool-benchmarks-${{ runner.os }}-${{ matrix.ghc }}-${{ github.run_id }}
Expand All @@ -174,6 +234,13 @@ jobs:
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
run: cp mempool-benchmarks.csv baseline-mempool-benchmarks.csv

# The `fail-if-slower` value is determined ad-hoc based on the variability
# we observed in our benchmarks.
- name: Set benchmark options (accept)
if: ${{ !env.ACCEPT_BENCHMARKS }}
run: |
echo "BENCH_OPTIONS='--fail-if-slower 100'" >> "GITHUB_ENV"

# TODO: this will be necessary when we publish the benchmarks results.
# - name: Upload mempool benchmark baseline results
# if: github.event_name == 'push' && github.ref == 'refs/heads/main'
Expand All @@ -182,49 +249,19 @@ jobs:
# name: baseline-mempool-benchmarks
# path: baseline-mempool-benchmarks.csv

# The `fail-if-slower` value is determined ad-hoc based on the variability
# we observed in our benchmarks.
- name: Run mempool benchmarks on pull requests
if: ${{ github.event_name == 'pull_request' }}
run: |
if [ -f baseline-mempool-benchmarks.csv ]; then
cabal new-run ouroboros-consensus:mempool-bench -- \
./mempool-bench \
--timeout=60 --baseline baseline-mempool-benchmarks.csv \
--fail-if-slower 100 \
${{ env.BENCH_OPTIONS }} \
+RTS -T
else
echo "No baseline benchmarks found. This likely happened when adding a new GHC version to the build matrix."
echo "Benchmarks comparison skipped."
fi

# NB: build the haddocks at the end to avoid unecessary recompilations.
# We build the haddocks only for one GHC version.
- name: Build Haddock documentation
if: |
github.event_name == 'push'
&& github.ref == 'refs/heads/main'
&& matrix.ghc=='9.6.6'
run: |
# need for latex, dvisvgm and standalone
sudo apt install texlive-latex-extra texlive-latex-base
# cabal-docspec doesn't work with XDG https://github.com/phadej/cabal-extras/issues/136
sed -i 's_-- store-dir:_store-dir: /home/runner/.local/state/cabal/store_g' ~/.config/cabal/config
export CABAL_CONFIG=~/.config/cabal/config

./scripts/docs/haddocks.sh
tar vzcf haddocks.tgz ./docs/website/static/haddocks

- name: Upload haddocks as an artifact
if: |
github.event_name == 'push'
&& github.ref == 'refs/heads/main'
&& matrix.ghc=='9.6.6'
uses: actions/upload-artifact@v4
with:
name: haddocks
path: haddocks.tgz
retention-days: 1

deploy-documentation:
name: Deploy documentation to GitHub Pages
if: github.event_name == 'push' && github.ref == 'refs/heads/main'
Expand Down
Loading