fix(ci): move hive setup to its own job so we only do it once #932
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: L1 | |
on: | |
push: | |
branches: ["main"] | |
merge_group: | |
pull_request: | |
branches: ["**"] | |
paths-ignore: | |
- "README.md" | |
- "LICENSE" | |
- "**/README.md" | |
- "**/docs/**" | |
- "crates/vm/levm/**" # We run this in a separate workflow | |
concurrency: | |
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} | |
cancel-in-progress: true | |
env: | |
RUST_VERSION: 1.81.0 | |
jobs: | |
lint: | |
# "Lint" is a required check, don't change the name | |
name: Lint | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v4 | |
- name: Rustup toolchain install | |
uses: dtolnay/rust-toolchain@stable | |
with: | |
toolchain: ${{ env.RUST_VERSION }} | |
components: rustfmt, clippy | |
- name: Add Rust Cache | |
uses: Swatinem/rust-cache@v2 | |
- name: Run cargo check | |
run: cargo check | |
- name: Run cargo build | |
run: | | |
cargo build | |
- name: Run cargo clippy | |
run: | | |
cargo clippy --all-targets --all-features --workspace --exclude ethrex-prover -- -D warnings | |
- name: Run cargo fmt | |
run: | | |
cargo fmt --all -- --check | |
test: | |
# "Test" is a required check, don't change the name | |
name: Test | |
runs-on: ubuntu-latest | |
steps: | |
- name: Checkout sources | |
uses: actions/checkout@v4 | |
- name: Rustup toolchain install | |
uses: dtolnay/rust-toolchain@stable | |
with: | |
toolchain: ${{ env.RUST_VERSION }} | |
- name: Caching | |
uses: Swatinem/rust-cache@v2 | |
- name: Download test vectors | |
run: | | |
make download-test-vectors | |
- name: Run tests | |
run: | | |
make test | |
docker_build: | |
# "Build Docker" is a required check, don't change the name | |
name: Build Docker | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Set up Docker Buildx | |
uses: docker/setup-buildx-action@v3 | |
- name: Build Docker image | |
uses: docker/build-push-action@v6 | |
with: | |
context: . | |
file: ./Dockerfile | |
load: true | |
tags: ethrex | |
outputs: type=docker,dest=/tmp/ethrex_image.tar | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: ethrex_image | |
path: /tmp/ethrex_image.tar | |
setup-hive: | |
name: "Setup Hive" | |
runs-on: ubuntu-latest | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Setup Hive | |
run: make setup-hive | |
- name: Upload artifacts | |
uses: actions/upload-artifact@v4 | |
with: | |
name: hive_executable | |
path: hive/hive | |
run-assertoor: | |
name: Assertoor - ${{ matrix.name }} | |
runs-on: ubuntu-latest | |
needs: [docker_build] | |
if: ${{ github.event_name != 'merge_group' }} | |
strategy: | |
matrix: | |
include: | |
- name: Transaction Check | |
enclave_name: "ethrex-assertoor-tx" | |
ethereum_package_args: "./.github/config/assertoor/network_params_tx.yaml" | |
- name: Blobs & Stability Check | |
enclave_name: "ethrex-assertoor-blob" | |
ethereum_package_args: "./.github/config/assertoor/network_params_blob.yaml" | |
steps: | |
- uses: actions/checkout@v4 | |
- name: Download etherex image artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: ethrex_image | |
path: /tmp | |
- name: Load image | |
run: | | |
docker load --input /tmp/ethrex_image.tar | |
- name: Run assertoor | |
uses: ethpandaops/kurtosis-assertoor-github-action@v1 | |
with: | |
enclave_name: ${{ matrix.enclave_name }} | |
kurtosis_version: "1.4.2" | |
ethereum_package_url: "github.com/lambdaclass/ethereum-package" | |
ethereum_package_branch: "ethrex-integration" | |
ethereum_package_args: ${{ matrix.ethereum_package_args }} | |
run-hive: | |
name: Hive - ${{ matrix.name }} | |
runs-on: ubuntu-latest | |
needs: [docker_build, setup-hive] | |
if: ${{ github.event_name != 'merge_group' }} | |
strategy: | |
matrix: | |
include: | |
- name: "Rpc Compat tests" | |
simulation: ethereum/rpc-compat | |
test_pattern: /eth_chainId|eth_getTransactionByBlockHashAndIndex|eth_getTransactionByBlockNumberAndIndex|eth_getCode|eth_getStorageAt|eth_call|eth_getTransactionByHash|eth_getBlockByHash|eth_getBlockByNumber|eth_createAccessList|eth_getBlockTransactionCountByNumber|eth_getBlockTransactionCountByHash|eth_getBlockReceipts|eth_getTransactionReceipt|eth_blobGasPrice|eth_blockNumber|ethGetTransactionCount|debug_getRawHeader|debug_getRawBlock|debug_getRawTransaction|debug_getRawReceipts|eth_estimateGas|eth_getBalance|eth_sendRawTransaction|eth_getProof|eth_getLogs | |
- name: "Devp2p discv4 tests" | |
simulation: devp2p | |
test_pattern: discv4 | |
- name: "Devp2p snap tests" | |
simulation: devp2p | |
test_pattern: /AccountRange|StorageRanges|ByteCodes|TrieNodes | |
- name: "Devp2p eth tests" | |
simulation: devp2p | |
test_pattern: eth/Status|GetBlockHeaders|SimultaneousRequests|SameRequestID|ZeroRequestID|GetBlockBodies|MaliciousHandshake|MaliciousStatus|Transaction|InvalidTxs|NewPooledTxs | |
- name: "Engine Auth and EC tests" | |
simulation: ethereum/engine | |
test_pattern: engine-(auth|exchange-capabilities)/ | |
- name: "Cancun Engine tests" | |
simulation: ethereum/engine | |
test_pattern: "engine-cancun/Blob Transactions On Block 1|Blob Transaction Ordering, Single|Blob Transaction Ordering, Multiple Accounts|Replace Blob Transactions|Parallel Blob Transactions|ForkchoiceUpdated|GetPayload|NewPayloadV3 After Cancun|NewPayloadV3 Before Cancun|NewPayloadV3 Versioned Hashes|Incorrect BlobGasUsed|Bad Hash|ParentHash equals BlockHash|RPC:|in ForkchoiceState|Unknown|Invalid PayloadAttributes|Unique|Re-Execute Payload|In-Order Consecutive Payload|Multiple New Payloads|Valid NewPayload->|NewPayload with|Payload Build after|Build Payload with|Invalid Missing Ancestor ReOrg, StateRoot|Re-Org Back to|Re-org to Previously|Safe Re-Org to Side Chain|Transaction Re-Org|Re-Org Back into Canonical Chain, Depth=5|Suggested Fee Recipient Test|PrevRandao Opcode|Invalid NewPayload|Fork ID: Genesis=0|Fork ID: Genesis=1, Cancun=0|Fork ID: Genesis=1, Cancun=2 |Fork ID: Genesis=1, Cancun=2, BlocksBeforePeering=1|Fork ID: Genesis=1, Cancun=2, Shanghai=[^1]|Pre-Merge" | |
- name: "Paris Engine tests" | |
simulation: ethereum/engine | |
test_pattern: "engine-api/RPC|Re-Org Back to Canonical Chain From Syncing Chain|Re-org to Previously Validated Sidechain Payload|Re-Org Back into Canonical Chain, Depth=5|Safe Re-Org|Transaction Re-Org|Inconsistent|Suggested Fee|PrevRandao|Fork ID|Unknown|Invalid PayloadAttributes|Bad Hash|Unique Payload ID|Re-Execute Payload|In-Order|Multiple New Payloads|Valid NewPayload|NewPayload with|Invalid NewPayload|Payload Build|Invalid NewPayload, Transaction|ParentHash equals|Build Payload|Invalid Missing Ancestor ReOrg" | |
steps: | |
- name: Download ethrex image artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: ethrex_image | |
path: /tmp | |
- name: Download hive artifact | |
uses: actions/download-artifact@v4 | |
with: | |
name: hive_executable | |
path: /tmp | |
- name: Load image | |
run: | | |
docker load --input /tmp/ethrex_image.tar | |
- name: Checkout sources | |
uses: actions/checkout@v4 | |
- name: Rustup toolchain install | |
uses: dtolnay/rust-toolchain@stable | |
with: | |
toolchain: ${{ env.RUST_VERSION }} | |
- name: Setup Go | |
uses: actions/setup-go@v5 | |
- name: Setup Hive | |
run: make setup-hive | |
- name: Run Hive Simulation | |
run: cd tmp && ./hive --client ethrex --sim ${{ matrix.simulation }} --sim.limit "${{ matrix.test_pattern }}" --sim.parallelism 4 | |
# The purpose of this job is to add it as a required check in GitHub so that we don't have to add every individual job as a required check | |
all-tests: | |
# "Integration Test" is a required check, don't change the name | |
name: Integration Test | |
runs-on: ubuntu-latest | |
needs: [run-assertoor, run-hive] | |
# Make sure this job runs even if the previous jobs failed or were skipped | |
if: ${{ always() && needs.run-assertoor.result != 'skipped' && needs.run-hive.result != 'skipped' }} | |
steps: | |
- name: Check if any job failed | |
run: | | |
if [ "${{ needs.run-assertoor.result }}" != "success" ]; then | |
echo "Job Assertoor Tx Check failed" | |
exit 1 | |
fi | |
if [ "${{ needs.run-hive.result }}" != "success" ]; then | |
echo "Job Hive failed" | |
exit 1 | |
fi |