Hive - Devnet 5 #39
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: 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","ethereumjs"' | |
description: Comma-separated list of clients to test .e.g go-ethereum, besu, reth, nethermind, erigon, ethereumjs | |
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@master | |
description: GitHub repository and tag for nethermind (repo@tag) | |
erigon_version: | |
type: string | |
default: erigontech/erigon@main | |
description: GitHub repository and tag for erigon (repo@tag) | |
ethereumjs_version: | |
type: string | |
default: ethereumjs/ethereumjs-monorepo@master | |
description: GitHub repository and tag for ethereumjs (repo@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 | |
EEST_BUILD_ARG_FIXTURES: https://github.com/ethereum/execution-spec-tests/releases/download/pectra-devnet-5%40v1.3.0/fixtures_pectra-devnet-5.tar.gz | |
EEST_BUILD_ARG_BRANCH: [email protected] | |
# Flags used for all simulators | |
GLOBAL_EXTRA_FLAGS: >- | |
--client.checktimelimit=60s | |
--sim.parallelism=4 | |
--docker.buildoutput | |
# Flags used for the ethereum/eest/consume-engine simulator | |
EEST_ENGINE_FLAGS: >- | |
--sim.buildarg fixtures=${EEST_BUILD_ARG_FIXTURES} | |
--sim.buildarg branch=${EEST_BUILD_ARG_BRANCH} | |
--sim.limit "fork_CancunToPrague or fork_Prague" | |
--sim.loglevel=3 | |
# Flags used for the ethereum/eest/consume-rlp simulator | |
EEST_RLP_FLAGS: >- | |
--sim.buildarg fixtures=${EEST_BUILD_ARG_FIXTURES} | |
--sim.buildarg branch=${EEST_BUILD_ARG_BRANCH} | |
--sim.limit "fork_CancunToPrague or fork_Prague" | |
--sim.loglevel=3 | |
# Flags used for the ethereum/rpc-compat simulator | |
RPC_COMPAT_FLAGS: >- | |
--sim.loglevel=3 | |
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 }} | |
ethereumjs_repo: ${{ steps.parse.outputs.ethereumjs_repo }} | |
ethereumjs_tag: ${{ steps.parse.outputs.ethereumjs_tag }} | |
ethereumjs_docker_image_tag: ${{ steps.parse.outputs.ethereumjs_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@master" | |
ERIGON_DEFAULT="erigontech/erigon@main" | |
ETHEREUMJS_DEFAULT="ethereumjs/ethereumjs-monorepo@master" | |
# 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=$(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=$(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=$(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=$(echo ${NETHERMIND_VERSION:-$NETHERMIND_DEFAULT} | sed 's/[@\/]/_/g' | tr '[:upper:]' '[:lower:]')" >> $GITHUB_OUTPUT | |
# Parse erigon | |
echo "erigon_repo=$(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=$(echo ${ERIGON_VERSION:-$ERIGON_DEFAULT} | sed 's/[@\/]/_/g' | tr '[:upper:]' '[:lower:]')" >> $GITHUB_OUTPUT | |
# Parse ethereumjs | |
echo "ethereumjs_repo=$(echo ${ETHEREUMJS_VERSION:-$ETHEREUMJS_DEFAULT} | cut -d@ -f1)" >> $GITHUB_OUTPUT | |
echo "ethereumjs_tag=$(echo ${ETHEREUMJS_VERSION:-$ETHEREUMJS_DEFAULT} | cut -d@ -f2)" >> $GITHUB_OUTPUT | |
echo "ethereumjs_docker_image_tag=$(echo ${ETHEREUMJS_VERSION:-$ETHEREUMJS_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 }} | |
ETHEREUMJS_VERSION: ${{ inputs.ethereumjs_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 }} | |
dockerfile: git | |
build_args: | |
github: ${{ steps.parse.outputs.erigon_repo }} | |
tag: ${{ steps.parse.outputs.erigon_tag }} | |
- client: ethereumjs | |
nametag: ${{ steps.parse.outputs.ethereumjs_docker_image_tag }} | |
dockerfile: git | |
build_args: | |
github: ${{ steps.parse.outputs.ethereumjs_repo }} | |
tag: ${{ steps.parse.outputs.ethereumjs_tag }} | |
ENDCONFIG | |
EOF | |
test: | |
timeout-minutes: 540 # 9 hours | |
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","ethereumjs"')) }} | |
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 }} | |
${{ matrix.simulator == 'ethereum/rpc-compat' && env.RPC_COMPAT_FLAGS || '' }} | |
${{ matrix.simulator == 'ethereum/eest/consume-engine' && env.EEST_ENGINE_FLAGS || '' }} | |
${{ matrix.simulator == 'ethereum/eest/consume-rlp' && env.EEST_RLP_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 |