diff --git a/.github/workflows/hive-devnet-2.yaml b/.github/workflows/hive-devnet-2.yaml new file mode 100644 index 0000000..ec1a21b --- /dev/null +++ b/.github/workflows/hive-devnet-2.yaml @@ -0,0 +1,208 @@ +name: Hive - BAL Devnet 2 +on: + schedule: + - cron: '45 12 * * *' + workflow_dispatch: + # Note: We're limited to 10 inputs + inputs: + client: + type: string + # TODO: add back ethrex (no bal-devnet-2 branch yet) + default: '"go-ethereum","nethermind","nimbus-el","erigon", "besu", "reth"' + description: Comma-separated list of clients to test .e.g go-ethereum, besu, reth, nethermind, erigon, nimbus-el + simulator: + type: string + # TODO: add back "ethereum/eels/consume-rlp" + default: >- + "ethereum/eels/consume-engine" + description: >- + Comma-separated list of simulators to test + .e.g ethereum/rpc-compat, ethereum/eels/consume-engine, ethereum/eels/consume-rlp, ethereum/eels/execute-blobs + 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_repos). + 'docker' will use the docker registry and tag (See client_images). + options: + - docker + - git + common_client_tag: + type: string + description: >- + If provided, this tag will be used for all clients, overriding individual tags/branches in client_repos and client_images + default: 'bal-devnet-2' + client_repos: + type: string + default: | + { + "geth": "ethereum/go-ethereum@master", + "besu": "hyperledger/besu@main", + "reth": "paradigmxyz/reth@main", + "nethermind": "NethermindEth/nethermind@master", + } + description: 'JSON object containing client versions in format {"client": "repo@tag", ...}' + client_images: + type: string + default: | + { + "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 docker images in format {"client": "registry:tag", ...}' + +env: + # Proxy + GOPROXY: "${{ vars.GOPROXY }}" + # Hive action environment variables + S3_BUCKET: hive-results + S3_PATH: bal + S3_PUBLIC_URL: https://hive.ethpandaops.io/#/test/bal/ + INSTALL_RCLONE_VERSION: v1.68.2 + EELS_BUILD_ARG_FIXTURES: https://github.com/ethereum/execution-spec-tests/releases/download/bal%40v3.0.1/fixtures_bal.tar.gz + EELS_BUILD_ARG_BRANCH: forks/amsterdam + # Flags used for all simulators + GLOBAL_EXTRA_FLAGS: >- + --client.checktimelimit=300s + --docker.buildoutput + # Docker-specific flags (only used when client_source is 'docker') + DOCKER_AUTH_FLAGS: >- + --docker.auth + # Flags used for the ethereum/eels/consume-engine simulator + EELS_ENGINE_FLAGS: >- + --sim.parallelism=6 + --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.parallelism=6 + --sim.buildarg fixtures=${EELS_BUILD_ARG_FIXTURES} + --sim.buildarg branch=${EELS_BUILD_ARG_BRANCH} + --sim.loglevel=3 + # Flags used for the ethereum/eels/execute simulator + EELS_EXECUTE_FLAGS: >- + --sim.buildarg branch=${EELS_BUILD_ARG_BRANCH} + # 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.client_config_schedule.outputs.hive_repo || + steps.client_config_dispatch.outputs.hive_repo + }} + hive_tag: >- + ${{ + steps.client_config_schedule.outputs.hive_tag || + steps.client_config_dispatch.outputs.hive_tag + }} + # client_config contains the YAML client config for Hive + client_config: >- + ${{ + steps.client_config_schedule.outputs.client_config || + steps.client_config_dispatch.outputs.client_config + }} + # client_source to determine if we need docker auth + client_source: >- + ${{ + github.event_name == 'schedule' && 'git' || + inputs.client_source + }} + steps: + - uses: ethpandaops/hive-github-action/helpers/client-config@1aa8d73dad34de13afbb3113ab16c1a462d2fbc3 # v0.5.0 + if: github.event_name == 'schedule' + name: 'Client config: schedule' + id: client_config_schedule + with: + common_client_tag: 'bal-devnet-2' + client_source: 'git' + hive_version: 'ethereum/hive@master' + goproxy: ${{ env.GOPROXY }} + + - uses: ethpandaops/hive-github-action/helpers/client-config@1aa8d73dad34de13afbb3113ab16c1a462d2fbc3 # v0.5.0 + if: github.event_name == 'workflow_dispatch' + name: 'Client config: workflow_dispatch' + id: client_config_dispatch + with: + client_repos: ${{ inputs.client_repos }} + client_images: ${{ inputs.client_images }} + common_client_tag: ${{ inputs.common_client_tag }} + client_source: ${{ inputs.client_source }} + hive_version: ${{ inputs.hive_version }} + goproxy: ${{ env.GOPROXY }} + + test: + timeout-minutes: 2160 + needs: prepare + env: + # BAL-specific environment variables + HIVE_PARALLEL_TX_PROCESSING_DISABLED: "true" + HIVE_AMSTERDAM_TIMESTAMP: "1759250952" + runs-on: >- + ${{ + matrix.simulator == 'ethereum/rpc-compat' && 'ubuntu-latest' || + contains(matrix.simulator, 'ethereum/eels/') && 'self-hosted-ghr-size-ccx33-x64' || + 'ubuntu-latest' + }} + concurrency: + group: >- + ${{ github.head_ref || inputs }}-${{ matrix.client }}-${{ matrix.simulator }} + strategy: + fail-fast: false + matrix: + # TODO: add back besu, reth, ethrex (no bal-devnet-2 branch yet) + client: >- + ${{ fromJSON(format('[{0}]', inputs.client || ' + "go-ethereum", + "nethermind", + "nimbus-el", + "erigon" + '))}} + # TODO: add back "ethereum/eels/consume-rlp" + simulator: >- + ${{ fromJSON(format('[{0}]', inputs.simulator || ' + "ethereum/eels/consume-engine" + '))}} + steps: + - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + - uses: ethpandaops/hive-github-action/helpers/self-hosted-runner-dependencies@1aa8d73dad34de13afbb3113ab16c1a462d2fbc3 # v0.5.0 + if: runner.environment != 'github-hosted' + - uses: ethpandaops/actions/docker-login@a91b7a8dd6a264f5e845ac2aa52d2d6f24e6d01d + with: + username: ethpandaops + password: ${{ secrets.DOCKERHUB_TOKEN }} + - uses: ethpandaops/hive-github-action@1aa8d73dad34de13afbb3113ab16c1a462d2fbc3 # v0.5.0 + 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 }} + ${{ needs.prepare.outputs.client_source == 'docker' && env.DOCKER_AUTH_FLAGS || '' }} + ${{ matrix.simulator == 'ethereum/eels/consume-engine' && env.EELS_ENGINE_FLAGS || '' }} + ${{ matrix.simulator == 'ethereum/eels/consume-rlp' && env.EELS_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 + website_upload: true