mirror of
https://github.com/hl-archive-node/nanoreth.git
synced 2025-12-06 10:59:55 +00:00
267 lines
7.9 KiB
YAML
267 lines
7.9 KiB
YAML
# 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:
|
|
engine: [regular, experimental]
|
|
# 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.engine }} - ${{ 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: Modify client for experimental engine
|
|
if: matrix.engine == 'experimental'
|
|
run: |
|
|
sed -ie 's/RUST_LOG=info $reth node $FLAGS/RUST_LOG=info $reth node --engine.experimental $FLAGS/' hivetests/clients/reth/reth.sh
|
|
|
|
- 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: |
|
|
FAILURE_FILE="${{ matrix.engine == 'experimental' && '.github/assets/hive/expected_failures_experimental.yaml' || '.github/assets/hive/expected_failures.yaml' }}"
|
|
find hivetests/workspace/logs -type f -name "*.json" ! -name "hive.json" | xargs -I {} python .github/assets/hive/parse.py {} --exclusion $FAILURE_FILE
|
|
|
|
- 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: Discord Webhook Action
|
|
uses: tsickert/discord-webhook@v6.0.0
|
|
with:
|
|
webhook-url: ${{ secrets.RETH_ALERTS_WEBHOOK }}
|
|
content: "Failed run: https://github.com/paradigmxyz/reth/actions/runs/${{ github.run_id }}"
|