This repository contains automated testing workflows for Ethereum execution clients using Hive, a system for running integration tests against Ethereum clients.
Hive Tests runs comprehensive compatibility and conformance tests across multiple Ethereum execution clients to ensure they properly implement the Ethereum protocol. The tests are executed automatically on a daily schedule and can also be triggered manually.
The following Ethereum execution clients are tested:
- Besu - Enterprise-grade Java Ethereum client
- Erigon - High-performance Ethereum client
- EthereumJS - JavaScript implementation of Ethereum
- Ethrex - Rust-based Ethereum client
- go-ethereum (Geth) - The Go implementation of Ethereum
- Nethermind - .NET Ethereum client
- Nimbus-EL - Nim-based Ethereum execution layer client
- Reth - Rust-based Ethereum execution client
The repository runs various test simulators including:
- devp2p
- ethereum/consensus
- ethereum/eels/consume-engine
- ethereum/eels/consume-enginex
- ethereum/eels/consume-rlp
- ethereum/engine
- ethereum/graphql
- ethereum/rpc-compat
- ethereum/sync
Tests run via GitHub Actions. See the generic.yaml workflow for more details. This is the main workflow that is triggered by the scheduled workflows.
The repository includes additional specialized workflows that target specific consensus testing scenarios which take a long time to run. These workflows run on a different schedules and have different timeouts:
sim-devp2p.yamlsim-ethereum-consensus-legacy-cancun.yamlsim-ethereum-consensus-legacy.yamlsim-ethereum-consensus.yamlsim-ethereum-eels-consume-engine.yamlsim-ethereum-eels-consume-enginex.yamlsim-ethereum-eels-consume-rlp.yamlsim-ethereum-engine.yamlsim-ethereum-graphql.yamlsim-ethereum-rpc-compat.yamlsim-ethereum-sync.yaml
These workflows are lightweight dispatchers that trigger the main generic.yaml workflow with specific parameters for targeted testing scenarios. They use different concurrency groups to avoid conflicts and can be manually triggered through the GitHub Actions interface.
You can manually trigger test runs through the GitHub Actions interface with customizable parameters:
- Client Selection: Choose which clients to test
- Simulator Selection: Choose which test simulators to run
- Client Sources: Pick a client file (
client_file) or paste an inline hive client file (client_config), see below - Hive Version: Specify the Hive repository and branch to use
There's a index workflow that runs periodically and generates a index of the test results and uploads it to the S3 bucket. See the generate-index.yaml workflow for more details.
Test results are automatically uploaded to:
- S3 Storage: Results are stored in the
hive-resultsbucket - Public Dashboard: Available at https://hive.ethpandaops.io/
- GitHub Artifacts: Downloadable from the workflow runs
How each client is obtained is defined by hive client files under .github/configs/hive/, one pair per client set:
<set>.yamlis what the workflows run: the best available source per client. Clients with a prebuilt ethpandaops image for the set use it; a client without one is built from source inside the run.<set>-git.yamlbuilds every client from source, for tip-of-branch runs when an image is stale or missing.
master.yaml serves the generic.yaml workflow; the devnet workflows each have their own set. A manual dispatch picks a file with the client_file input, or replaces it entirely with an inline hive client file in client_config, for example to test a branch or an image that is not in the repository configuration.
Tests run on a combination of:
- GitHub-hosted runners for lighter test suites
- Self-hosted runners for resource-intensive tests (consensus, engine, eels simulators)
This project is licensed under the GNU General Public License v3.0 - see the LICENSE file for details.
This repository is part of the Ethereum testing infrastructure maintained by EthPandaOps. For issues or contributions related to the Hive testing framework itself, please visit the main Hive repository.