Skip to content

Hive - Devnet 5

Hive - Devnet 5 #19

name: Hive - Devnet 5
on:
schedule:
- cron: '45 16 * * *'
workflow_dispatch:
# Note: We're limited to 10 inputs
inputs:
client:
type: string
default: '"go-ethereum","besu","reth","nethermind","erigon"'
description: Comma-separated list of clients to test .e.g go-ethereum, besu, reth, nethermind, erigon
simulator:
type: string
default: '"ethereum/rpc-compat","ethereum/eest/consume-engine","ethereum/eest/consume-rlp"'
description: Comma-separated list of simulators to test .e.g ethereum/rpc-compat, ethereum/eest/consume-engine, ethereum/eest/consume-rlp
hive_version:
type: string
default: ethereum/hive@master
description: GitHub repository and tag for hive (repo@tag)
geth_version:
type: string
default: s1na/go-ethereum@prague-devnet-5
description: GitHub repository and tag for go-ethereum (repo@tag)
besu_version:
type: string
default: hyperledger/besu@main
description: GitHub repository and tag for besu (repo@tag)
reth_version:
type: string
default: paradigmxyz/reth@main
description: GitHub repository and tag for reth (repo@tag)
nethermind_version:
type: string
default: NethermindEth/nethermind@pectra-devnet-5
description: GitHub repository and tag for nethermind (repo@tag)
erigon_version:
type: string
default: erigontech/erigon@main
description: Docker image and tag for erigon (image@tag)
env:
S3_BUCKET: hive-results
S3_PATH: pectra-devnet-5
S3_PUBLIC_URL: https://hive.ethpandaops.io/pectra-devnet-5
INSTALL_RCLONE_VERSION: v1.68.2
GLOBAL_EXTRA_FLAGS: >-
--sim.buildarg fixtures=https://github.com/ethereum/execution-spec-tests/releases/download/pectra-devnet-5%40v1.2.0/fixtures_pectra-devnet-5.tar.gz
--client.checktimelimit=60s
--sim.parallelism=4
jobs:
prepare:
runs-on: ubuntu-latest
outputs:
# Hive version
hive_repo: ${{ steps.parse.outputs.hive_repo }}
hive_tag: ${{ steps.parse.outputs.hive_tag }}
# Versions of the clients
geth_repo: ${{ steps.parse.outputs.geth_repo }}
geth_tag: ${{ steps.parse.outputs.geth_tag }}
geth_docker_image_tag: ${{ steps.parse.outputs.geth_docker_image_tag }}
besu_repo: ${{ steps.parse.outputs.besu_repo }}
besu_tag: ${{ steps.parse.outputs.besu_tag }}
besu_docker_image_tag: ${{ steps.parse.outputs.besu_docker_image_tag }}
reth_repo: ${{ steps.parse.outputs.reth_repo }}
reth_tag: ${{ steps.parse.outputs.reth_tag }}
reth_docker_image_tag: ${{ steps.parse.outputs.reth_docker_image_tag }}
nethermind_repo: ${{ steps.parse.outputs.nethermind_repo }}
nethermind_tag: ${{ steps.parse.outputs.nethermind_tag }}
nethermind_docker_image_tag: ${{ steps.parse.outputs.nethermind_docker_image_tag }}
erigon_image: ${{ steps.parse.outputs.erigon_image }}
erigon_tag: ${{ steps.parse.outputs.erigon_tag }}
erigon_docker_image_tag: ${{ steps.parse.outputs.erigon_docker_image_tag }}
# client_config contains the YAML client config for Hive
client_config: ${{ steps.client_config.outputs.config }}
steps:
- id: parse
run: |
# Default client versions
GETH_DEFAULT="s1na/go-ethereum@prague-devnet-5"
BESU_DEFAULT="hyperledger/besu@main"
RETH_DEFAULT="paradigmxyz/reth@main"
NETHERMIND_DEFAULT="NethermindEth/nethermind@pectra-devnet-5"
ERIGON_DEFAULT="erigontech/erigon@main"
# Parse geth
echo "geth_repo=$(echo ${GETH_VERSION:-$GETH_DEFAULT} | cut -d@ -f1)" >> $GITHUB_OUTPUT
echo "geth_tag=$(echo ${GETH_VERSION:-$GETH_DEFAULT} | cut -d@ -f2)" >> $GITHUB_OUTPUT
echo "geth_docker_image_tag=geth_$(echo ${GETH_VERSION:-$GETH_DEFAULT} | sed 's/[@\/]/_/g' | tr '[:upper:]' '[:lower:]')" >> $GITHUB_OUTPUT
# Parse besu
echo "besu_repo=$(echo ${BESU_VERSION:-$BESU_DEFAULT} | cut -d@ -f1)" >> $GITHUB_OUTPUT
echo "besu_tag=$(echo ${BESU_VERSION:-$BESU_DEFAULT} | cut -d@ -f2)" >> $GITHUB_OUTPUT
echo "besu_docker_image_tag=besu_$(echo ${BESU_VERSION:-$BESU_DEFAULT} | sed 's/[@\/]/_/g' | tr '[:upper:]' '[:lower:]')" >> $GITHUB_OUTPUT
# Parse reth
echo "reth_repo=$(echo ${RETH_VERSION:-$RETH_DEFAULT} | cut -d@ -f1)" >> $GITHUB_OUTPUT
echo "reth_tag=$(echo ${RETH_VERSION:-$RETH_DEFAULT} | cut -d@ -f2)" >> $GITHUB_OUTPUT
echo "reth_docker_image_tag=reth_$(echo ${RETH_VERSION:-$RETH_DEFAULT} | sed 's/[@\/]/_/g' | tr '[:upper:]' '[:lower:]')" >> $GITHUB_OUTPUT
# Parse nethermind
echo "nethermind_repo=$(echo ${NETHERMIND_VERSION:-$NETHERMIND_DEFAULT} | cut -d@ -f1)" >> $GITHUB_OUTPUT
echo "nethermind_tag=$(echo ${NETHERMIND_VERSION:-$NETHERMIND_DEFAULT} | cut -d@ -f2)" >> $GITHUB_OUTPUT
echo "nethermind_docker_image_tag=nethermind_$(echo ${NETHERMIND_VERSION:-$NETHERMIND_DEFAULT} | sed 's/[@\/]/_/g' | tr '[:upper:]' '[:lower:]')" >> $GITHUB_OUTPUT
# Parse erigon
echo "erigon_image=$(echo ${ERIGON_VERSION:-$ERIGON_DEFAULT} | cut -d@ -f1)" >> $GITHUB_OUTPUT
echo "erigon_tag=$(echo ${ERIGON_VERSION:-$ERIGON_DEFAULT} | cut -d@ -f2)" >> $GITHUB_OUTPUT
echo "erigon_docker_image_tag=erigon_$(echo ${ERIGON_VERSION:-$ERIGON_DEFAULT} | sed 's/[@\/]/_/g' | tr '[:upper:]' '[:lower:]')" >> $GITHUB_OUTPUT
# Parse hive
echo "hive_repo=$(echo ${HIVE_VERSION:-$HIVE_DEFAULT} | cut -d@ -f1)" >> $GITHUB_OUTPUT
echo "hive_tag=$(echo ${HIVE_VERSION:-$HIVE_DEFAULT} | cut -d@ -f2)" >> $GITHUB_OUTPUT
env:
GETH_VERSION: ${{ inputs.geth_version }}
BESU_VERSION: ${{ inputs.besu_version }}
RETH_VERSION: ${{ inputs.reth_version }}
NETHERMIND_VERSION: ${{ inputs.nethermind_version }}
ERIGON_VERSION: ${{ inputs.erigon_version }}
- id: client_config
run: |
cat << 'EOF' >> $GITHUB_OUTPUT
config<<ENDCONFIG
- client: go-ethereum
nametag: ${{ steps.parse.outputs.geth_docker_image_tag }}
dockerfile: git
build_args:
github: ${{ steps.parse.outputs.geth_repo }}
tag: ${{ steps.parse.outputs.geth_tag }}
- client: besu
nametag: ${{ steps.parse.outputs.besu_docker_image_tag }}
dockerfile: git
build_args:
github: ${{ steps.parse.outputs.besu_repo }}
tag: ${{ steps.parse.outputs.besu_tag }}
- client: reth
nametag: ${{ steps.parse.outputs.reth_docker_image_tag }}
dockerfile: git
build_args:
github: ${{ steps.parse.outputs.reth_repo }}
tag: ${{ steps.parse.outputs.reth_tag }}
- client: nethermind
nametag: ${{ steps.parse.outputs.nethermind_docker_image_tag }}
dockerfile: git
build_args:
github: ${{ steps.parse.outputs.nethermind_repo }}
tag: ${{ steps.parse.outputs.nethermind_tag }}
- client: erigon
nametag: ${{ steps.parse.outputs.erigon_docker_image_tag }}
build_args:
baseimage: ${{ steps.parse.outputs.erigon_image }}
tag: ${{ steps.parse.outputs.erigon_tag }}
ENDCONFIG
EOF
test:
needs: prepare
runs-on: >-
${{
matrix.simulator == 'ethereum/rpc-compat' && 'ubuntu-latest' ||
contains(matrix.simulator, 'ethereum/eest/') && 'self-hosted-ghr-size-m-x64' ||
'ubuntu-latest'
}}
concurrency:
group: >-
${{ github.head_ref || inputs }}-${{ matrix.client }}-${{ matrix.simulator }}
strategy:
fail-fast: false
matrix:
client: ${{ fromJSON(format('[{0}]', inputs.client || '"go-ethereum","besu","reth","nethermind","erigon"')) }}
simulator: ${{ fromJSON(format('[{0}]', inputs.simulator || '"ethereum/rpc-compat","ethereum/eest/consume-engine","ethereum/eest/consume-rlp"')) }}
steps:
- uses: actions/checkout@v4
- uses: ./.github/actions/hive-deps
if: runner.environment != 'github-hosted'
- uses: ethpandaops/hive-github-action@master
with:
hive_repository: ${{ needs.prepare.outputs.hive_repo }}
hive_version: ${{ needs.prepare.outputs.hive_tag }}
client: ${{ matrix.client }}
simulator: ${{ matrix.simulator }}
client_config: ${{ needs.prepare.outputs.client_config }}
extra_flags: ${{ env.GLOBAL_EXTRA_FLAGS }}
s3_upload: true
s3_bucket: ${{ env.S3_BUCKET }}
s3_path: ${{ env.S3_PATH }}
s3_public_url: ${{ env.S3_PUBLIC_URL }}
rclone_config: ${{ secrets.HIVE_RCLONE_CONFIG }}
rclone_version: ${{ env.INSTALL_RCLONE_VERSION }}
workflow_artifact_upload: true