name: Hive - Generic on: workflow_dispatch: inputs: client: type: string default: '["go-ethereum","reth","nethermind","nimbus-el","besu","erigon","ethrex"]' description: JSON array of clients to test .e.g go-ethereum, besu, reth, nethermind, erigon, nimbus-el, ethrex client_matrix: type: choice options: - "true" - "false" default: "true" description: If "true", run each client in a separate matrix job. If "false", run all clients together in a single job. simulator: type: string default: >- [ "devp2p", "ethereum/consensus", "ethereum/eels/consume-engine", "ethereum/eels/consume-rlp", "ethereum/engine", "ethereum/graphql", "ethereum/rpc-compat" ] description: JSON array of simulators to test .e.g ethereum/rpc-compat, ethereum/eels/consume-engine, ethereum/eels/consume-rlp hive_version: type: string default: ethereum/hive@master description: GitHub repository and tag for hive (repo@tag) client_source: type: choice description: >- How client images should be sourced. 'git' will use the github repo and tag (See client_config repos). 'docker' will use the docker registry and tag (See client_config images). options: - docker - git default: git client_config: type: string default: | { "repos": { "geth": "ethereum/go-ethereum@master", "besu": "hyperledger/besu@main", "reth": "paradigmxyz/reth@main", "nethermind": "NethermindEth/nethermind@master", "erigon": "erigontech/erigon@main", "nimbusel": "status-im/nimbus-eth1@master", "ethrex": "lambdaclass/ethrex@main" }, "images": { "geth": "docker.ethquokkaops.io/dh/ethpandaops/geth:master", "besu": "docker.ethquokkaops.io/dh/ethpandaops/besu:main", "reth": "docker.ethquokkaops.io/dh/ethpandaops/reth:main", "nethermind": "docker.ethquokkaops.io/dh/ethpandaops/nethermind:master", "erigon": "docker.ethquokkaops.io/dh/ethpandaops/erigon:main", "nimbusel": "docker.ethquokkaops.io/dh/ethpandaops/nimbus-eth1:master", "ethrex": "ghcr.io/lambdaclass/ethrex:main" } } description: 'JSON object containing client configuration with "repos" and "images" objects for git and docker sources respectively' extra_flags: type: string default: "" description: Additional flags to append to the hive command concurrency_group: type: string default: "default" description: Concurrency group for the workflow workflow_artifact_upload: description: "Upload test results as an workflow artifact" required: false default: "false" timeout_minutes: type: string default: "2880" description: "Timeout in minutes for the test job (default: 2880 = 2 days)" env: # Proxy GOPROXY: "${{ vars.GOPROXY }}" # Hive action environment variables S3_BUCKET: hive-results S3_PATH: generic S3_PUBLIC_URL: https://hive.ethpandaops.io/#/test/generic/ INSTALL_RCLONE_VERSION: v1.68.2 EELS_BUILD_ARG_FIXTURES: https://github.com/ethereum/execution-spec-tests/releases/download/v5.3.0/fixtures_stable.tar.gz # Bump to develop soon (TM) EELS_BUILD_ARG_BRANCH: forks/osaka # Flags used for all simulators GLOBAL_EXTRA_FLAGS: >- --client.checktimelimit=180s --sim.parallelism=4 --docker.auth --docker.buildoutput # Flags used for the ethereum/eels/consume-engine simulator EELS_ENGINE_FLAGS: >- --sim.buildarg fixtures=${EELS_BUILD_ARG_FIXTURES} --sim.buildarg branch=${EELS_BUILD_ARG_BRANCH} --sim.loglevel=3 # Flags used for the ethereum/eels/consume-rlp simulator EELS_RLP_FLAGS: >- --sim.buildarg fixtures=${EELS_BUILD_ARG_FIXTURES} --sim.buildarg branch=${EELS_BUILD_ARG_BRANCH} --sim.loglevel=3 # Flags used for the ethereum/rpc-compat simulator RPC_COMPAT_FLAGS: >- --sim.loglevel=3 # Flags used for the ethereum/consensus simulator CONSENSUS_FLAGS: >- --sim.loglevel=3 # Flags used for the ethereum/graphql simulator GRAPHQL_FLAGS: >- --sim.loglevel=3 jobs: prepare: runs-on: ubuntu-latest outputs: # Hive version hive_repo: ${{ steps.client_config.outputs.hive_repo }} hive_tag: ${{ steps.client_config.outputs.hive_tag }} # client_config contains the YAML client config for Hive client_config: ${{ steps.client_config.outputs.client_config }} steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - uses: ethpandaops/hive-github-action/helpers/client-config@1aa8d73dad34de13afbb3113ab16c1a462d2fbc3 # v0.5.0 name: "Client config" id: client_config with: client_repos: ${{ toJSON(fromJSON(inputs.client_config).repos) }} client_images: ${{ toJSON(fromJSON(inputs.client_config).images) }} client_source: ${{ inputs.client_source }} hive_version: ${{ inputs.hive_version }} goproxy: ${{ env.GOPROXY }} test: timeout-minutes: ${{ fromJSON(inputs.timeout_minutes) }} needs: prepare runs-on: >- ${{ matrix.simulator == 'ethereum/consensus' && 'self-hosted-ghr-size-m-x64' || matrix.simulator == 'ethereum/engine' && 'self-hosted-ghr-size-m-x64' || matrix.simulator == 'ethereum/sync' && 'self-hosted-ghr-size-xl-x64' || contains(matrix.simulator, 'ethereum/eels/') && 'self-hosted-ghr-size-ccx33-x64' || 'ubuntu-latest' }} concurrency: group: >- ${{ github.head_ref || inputs.concurrency_group }}-${{ matrix.client }}-${{ matrix.simulator }} strategy: fail-fast: false matrix: client: >- ${{ inputs.client_matrix == 'true' && fromJSON(inputs.client) || fromJSON(format('["{0}"]', join(fromJSON(inputs.client), '-'))) }} simulator: ${{ fromJSON(inputs.simulator)}} steps: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 - uses: ethpandaops/actions/docker-login@a91b7a8dd6a264f5e845ac2aa52d2d6f24e6d01d with: username: ethpandaops password: ${{ secrets.DOCKERHUB_TOKEN }} - uses: ethpandaops/hive-github-action/helpers/self-hosted-runner-dependencies@09050fc75bae8a10b1876a0826ca4114ea9ed6e8 # v0.6.3 if: runner.environment != 'github-hosted' - uses: ethpandaops/hive-github-action@master # v0.6.x-unreleased with: hive_repository: ${{ needs.prepare.outputs.hive_repo }} hive_version: ${{ needs.prepare.outputs.hive_tag }} client: ${{ inputs.client_matrix == 'true' && matrix.client || join(fromJSON(inputs.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/consensus' && env.CONSENSUS_FLAGS || '' }} ${{ matrix.simulator == 'ethereum/eels/consume-engine' && env.EELS_ENGINE_FLAGS || '' }} ${{ matrix.simulator == 'ethereum/eels/consume-rlp' && env.EELS_RLP_FLAGS || '' }} ${{ inputs.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: ${{ inputs.workflow_artifact_upload }} website_upload: false website_index_generation: false