# Runs `ethereum/hive` tests. name: hive on: workflow_dispatch: schedule: # every day - cron: "0 0 * * *" env: CARGO_TERM_COLOR: always concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true jobs: prepare-reth: if: github.repository == 'paradigmxyz/reth' timeout-minutes: 45 runs-on: group: Reth steps: - uses: actions/checkout@v4 - run: mkdir artifacts - uses: dtolnay/rust-toolchain@stable - uses: Swatinem/rust-cache@v2 with: cache-on-failure: true - name: Build reth run: | cargo build --features asm-keccak --profile hivetests --bin reth --locked mkdir dist && cp ./target/hivetests/reth ./dist/reth - name: Set up Docker Buildx uses: docker/setup-buildx-action@v3 - name: Build and export reth image uses: docker/build-push-action@v6 with: context: . file: .github/assets/hive/Dockerfile tags: ghcr.io/paradigmxyz/reth:latest outputs: type=docker,dest=./artifacts/reth_image.tar cache-from: type=gha cache-to: type=gha,mode=max - name: Upload reth image uses: actions/upload-artifact@v4 with: name: artifacts path: ./artifacts prepare-hive: if: github.repository == 'paradigmxyz/reth' timeout-minutes: 45 runs-on: group: Reth steps: - uses: actions/checkout@v4 - name: Checkout hive tests uses: actions/checkout@v4 with: repository: ethereum/hive ref: master path: hivetests - uses: actions/setup-go@v5 with: go-version: "^1.13.1" - run: go version - name: Build hive assets run: .github/assets/hive/build_simulators.sh - name: Upload hive assets uses: actions/upload-artifact@v4 with: name: hive_assets path: ./hive_assets test: timeout-minutes: 60 strategy: fail-fast: false matrix: # ethereum/rpc to be deprecated: # https://github.com/ethereum/hive/pull/1117 scenario: - sim: smoke/genesis - sim: smoke/network - sim: ethereum/sync - sim: devp2p limit: discv4 - sim: devp2p limit: eth include: # status - TestStatus # get block headers - TestGetBlockHeaders - TestSimultaneousRequests - TestSameRequestID - TestZeroRequestID # get block bodies - TestGetBlockBodies # malicious handshakes + status - TestMaliciousHandshake - TestMaliciousStatus # test transactions - TestLargeTxRequest - TestTransaction - TestInvalidTxs - TestNewPooledTxs - TestBlobViolations - sim: ethereum/engine limit: engine-exchange-capabilities - sim: ethereum/engine limit: engine-withdrawals - sim: ethereum/engine limit: engine-auth - sim: ethereum/engine limit: engine-api - sim: ethereum/engine limit: cancun # eth_ rpc methods - sim: ethereum/rpc-compat include: - eth_blockNumber - eth_call - eth_chainId - eth_createAccessList - eth_estimateGas - eth_feeHistory - eth_getBalance - eth_getBlockBy - eth_getBlockTransactionCountBy - eth_getCode - eth_getProof - eth_getStorage - eth_getTransactionBy - eth_getTransactionCount - eth_getTransactionReceipt - eth_sendRawTransaction - eth_syncing # debug_ rpc methods - debug_ # Pyspec cancun jobs # TODO: uncomment when https://github.com/ethereum/hive/issues/1147 is fixed #- sim: pyspec # include: [cancun/eip4844] #- sim: pyspec # include: [cancun/eip4788] #- sim: pyspec # include: [cancun/eip6780] #- sim: pyspec # include: [cancun/eip5656] #- sim: pyspec # include: [cancun/eip1153] #- sim: pyspec # include: [cancun/eip7516] # Pyspec shanghai jobs #- sim: pyspec # include: [shanghai/eip3651] #- sim: pyspec # include: [shanghai/eip3855] #- sim: pyspec # include: [shanghai/eip3860] #- sim: pyspec # include: [shanghai/eip4895] # Pyspec merge and earlier jobs #- sim: pyspec # include: [merge/] #- sim: pyspec # include: [berlin/] #- sim: pyspec # include: [istanbul/] #- sim: pyspec # include: [homestead/] #- sim: pyspec # include: [frontier/] needs: - prepare-reth - prepare-hive name: run ${{ matrix.scenario.sim }}${{ matrix.scenario.limit && format(' - {0}', matrix.scenario.limit) }} runs-on: group: Reth permissions: issues: write steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: Download hive assets uses: actions/download-artifact@v4 with: name: hive_assets path: /tmp - name: Download reth image uses: actions/download-artifact@v4 with: name: artifacts path: /tmp - name: Load Docker images run: .github/assets/hive/load_images.sh - name: Move hive binary run: | mv /tmp/hive /usr/local/bin chmod +x /usr/local/bin/hive - name: Checkout hive tests uses: actions/checkout@v4 with: repository: ethereum/hive ref: master path: hivetests - name: Run simulator run: | LIMIT="${{ matrix.scenario.limit }}" TESTS="${{ join(matrix.scenario.include, '|') }}" if [ -n "$LIMIT" ] && [ -n "$TESTS" ]; then FILTER="$LIMIT/$TESTS" elif [ -n "$LIMIT" ]; then FILTER="$LIMIT" elif [ -n "$TESTS" ]; then FILTER="/$TESTS" else FILTER="/" fi echo "filter: $FILTER" .github/assets/hive/run_simulator.sh "${{ matrix.scenario.sim }}" "$FILTER" - name: Parse hive output run: | find hivetests/workspace/logs -type f -name "*.json" ! -name "hive.json" | xargs -I {} python .github/assets/hive/parse.py {} --exclusion .github/assets/hive/expected_failures.yaml - name: Print simulator output if: ${{ failure() }} run: | cat hivetests/workspace/logs/*simulator*.log - name: Print reth client logs if: ${{ failure() }} run: | cat hivetests/workspace/logs/reth/client-*.log notify-on-error: needs: test if: failure() runs-on: group: Reth steps: - name: Slack Webhook Action uses: rtCamp/action-slack-notify@v2 env: SLACK_COLOR: ${{ job.status }} SLACK_MESSAGE: "Failed run: https://github.com/paradigmxyz/reth/actions/runs/${{ github.run_id }}" SLACK_WEBHOOK: ${{ secrets.SLACK_WEBHOOK_URL }}