|
# Runs a Jepsen test - cas-register (no nemesis) by default.
|
|
# See inputs for various options.
|
|
# Repo: https://github.com/tendermint/jepsen
|
|
#
|
|
# If you want to test a new breaking version of Tendermint, you'll need to
|
|
# update the Merkleeyes ABCI app and 'merkleeyesUrl' input accordingly. You can
|
|
# upload a new tarball to
|
|
# https://github.com/tendermint/jepsen/releases/tag/0.2.1.
|
|
#
|
|
# Manually triggered.
|
|
name: jepsen
|
|
on:
|
|
workflow_dispatch:
|
|
inputs:
|
|
workload:
|
|
description: 'Test workload to run: (cas-register | set)'
|
|
required: true
|
|
default: 'cas-register'
|
|
nemesis:
|
|
description: 'Nemesis to use: (none | clocks | single-partitions | half-partitions | ring-partitions | split-dup-validators | peekaboo-dup-validators | changing-validators | crash | truncate-tendermint | truncate-merkleeyes)'
|
|
required: true
|
|
default: 'none'
|
|
dupOrSuperByzValidators:
|
|
description: '"--dup-validators" (multiple validators share the same key) and(or) "--super-byzantine-validators" (byzantine validators have just shy of 2/3 the voting weight)'
|
|
required: false
|
|
default: ''
|
|
concurrency:
|
|
description: 'How many workers should we run? Must be an integer and >= 10, optionally followed by n (e.g. 3n) to multiply by the number of nodes.'
|
|
required: true
|
|
default: 10
|
|
timeLimit:
|
|
description: 'Excluding setup and teardown, how long should a test run for, in seconds?'
|
|
required: true
|
|
default: 60
|
|
tendermintUrl:
|
|
description: 'Where to grab the Tendermint tarball (w/ linux/amd64 binary)'
|
|
required: true
|
|
default: 'https://github.com/melekes/katas/releases/download/0.2.0/tendermint.tar.gz'
|
|
merkleeyesUrl:
|
|
description: 'Where to grab the Merkleeyes tarball (w/ linux/amd64 binary)'
|
|
required: true
|
|
default: 'https://github.com/tendermint/jepsen/releases/download/0.2.1/merkleeyes_0.1.7.tar.gz'
|
|
|
|
jobs:
|
|
jepsen-test:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: Checkout the Jepsen repository
|
|
uses: actions/checkout@v3
|
|
with:
|
|
repository: 'tendermint/jepsen'
|
|
|
|
- name: Start a Jepsen cluster in background
|
|
working-directory: docker
|
|
run: ./bin/up --daemon
|
|
|
|
- name: Run the test
|
|
run: docker exec -i jepsen-control bash -c 'source /root/.bashrc; cd /jepsen/tendermint; lein run test --nemesis ${{ github.event.inputs.nemesis }} --workload ${{ github.event.inputs.workload }} --concurrency ${{ github.event.inputs.concurrency }} --tendermint-url ${{ github.event.inputs.tendermintUrl }} --merkleeyes-url ${{ github.event.inputs.merkleeyesUrl }} --time-limit ${{ github.event.inputs.timeLimit }} ${{ github.event.inputs.dupOrSuperByzValidators }}'
|
|
|
|
- name: Archive results
|
|
uses: actions/upload-artifact@v2
|
|
with:
|
|
name: results
|
|
path: tendermint/store/latest
|
|
retention-days: 3
|