Skip to content

Commit

Permalink
ci(core): standarize all CIs with required checks (#1334)
Browse files Browse the repository at this point in the history
**Motivation**
Required checks in Github works in a weird way, it is based on the job
name. So we will define a couple of required checks:
- Lint
- Test
- Build Docker
- Integration Test

Each team will have one or more workflow, prepended with "ci_". There
they need to define all the above jobs. If there are multiple jobs with
the same name, they are all required.

For the merge queue, we keep it minimal and aim only to avoid breaking
changes that should be caught by the Rust compiler or linter. We don't
want to run heavy integration tests since those will be run on the push
event anyway.

**Description**
- Standardized ci workflows
- Standardized job names
- Simplified Hive to don't overuse makefiles (we don't need the build
capabilities)
- Added Integration Test job
- Re-added ci-skipped workflow for documentation changes.
  • Loading branch information
mpaulucci authored Nov 28, 2024
1 parent 58e95af commit 87ec9df
Show file tree
Hide file tree
Showing 10 changed files with 275 additions and 224 deletions.
75 changes: 0 additions & 75 deletions .github/workflows/ci.yaml

This file was deleted.

203 changes: 203 additions & 0 deletions .github/workflows/ci_l1.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,203 @@
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@v5
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

run-assertoor:
name: Assertoor - Stability Check
runs-on: ubuntu-latest
needs: [docker_build]
if: ${{ github.event_name != 'merge_group' }}
steps:
- uses: actions/checkout@v4

- name: Download artifacts
uses: actions/download-artifact@v4
with:
name: ethrex_image
path: /tmp

- name: Load image
run: |
docker load --input /tmp/ethrex_image.tar
- name: Setup kurtosis testnet and run assertoor tests
uses: ethpandaops/kurtosis-assertoor-github-action@v1
with:
kurtosis_version: "1.4.2"
ethereum_package_url: "github.com/lambdaclass/ethereum-package"
ethereum_package_branch: "ethrex-integration"
ethereum_package_args: "./test_data/network_params.yaml"

run-hive:
name: Hive - ${{ matrix.name }}
runs-on: ubuntu-latest
needs: [docker_build]
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
- 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|ForkchoiceUpdatedV3 Modifies Payload ID on Different Beacon Root|NewPayloadV3 After Cancun|NewPayloadV3 Versioned Hashes|Incorrect BlobGasUsed|Bad Hash|ParentHash equals BlockHash|RPC:|in ForkchoiceState|Unknown|Invalid PayloadAttributes|Unique|ForkchoiceUpdated Version on Payload Request|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 In|Re-Org Back into Canonical Chain, Depth=5|Suggested Fee Recipient Test|PrevRandao Opcode|Invalid NewPayload, [^R][^e]|Fork ID Genesis=0, Cancun=0|Fork ID Genesis=0, Cancun=1|Fork ID Genesis=1, Cancun=0|Fork ID Genesis=1, Cancun=2, Shanghai=2
steps:
- name: Download artifacts
uses: actions/download-artifact@v4
with:
name: ethrex_image
path: /tmp

- name: Load image
run: |
docker load --input /tmp/ethrex_image.tar
- name: Checkout sources
uses: actions/checkout@v3

- name: Rustup toolchain install
uses: dtolnay/rust-toolchain@stable
with:
toolchain: ${{ env.RUST_VERSION }}

- name: Setup Go
uses: actions/setup-go@v3

- name: Setup Hive
run: make setup-hive

- name: Run Hive Simulation
run: cd hive && ./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 failed"
exit 1
fi
if [ "${{ needs.run-hive.result }}" != "success" ]; then
echo "Job Hive failed"
exit 1
fi
6 changes: 3 additions & 3 deletions .github/workflows/ci_l2.yaml
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
name: CI (L2)
name: L2
on:
push:
branches: ["main"]
merge_group:
pull_request:
branches: ["**"]
paths:
Expand All @@ -17,7 +16,8 @@ env:

jobs:
test:
name: Test
# "Integration Test" is a required check, don't change the name
name: Integration Test
runs-on: ubuntu-latest
steps:
- name: Checkout sources
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
name: L2 Contracts CI
name: L2 Contracts
on:
push:
branches: ["main"]
merge_group:
pull_request:
branches: ["**"]
paths:
Expand All @@ -13,8 +12,9 @@ concurrency:
cancel-in-progress: true

jobs:
test_compilation:
name: Compile Contracts
test:
# "Test" is a required check, don't change the name
name: Test
runs-on: ubuntu-latest
steps:
- name: Checkout sources
Expand Down
Original file line number Diff line number Diff line change
@@ -1,8 +1,7 @@
name: L2 Prover CI
name: L2 Prover
on:
push:
branches: ["main"]
merge_group:
pull_request:
branches: ["**"]
paths:
Expand All @@ -14,6 +13,7 @@ concurrency:

jobs:
lint:
# "Lint" is a required check, don't change the name
name: Lint
runs-on: ubuntu-latest
strategy:
Expand All @@ -32,8 +32,9 @@ jobs:
- name: ${{ matrix.action.command }} Command
run: cargo ${{ matrix.action.command }} ${{ matrix.action.args }}

build_and_test:
name: Build and Test RISC-V zkVM program
test:
# "Test" is a required check, don't change the name
name: Test
runs-on: ubuntu-latest
steps:
- name: Checkout sources
Expand Down
10 changes: 6 additions & 4 deletions .github/workflows/ci_levm.yaml
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
name: CI LEVM
name: LEVM

on:
push:
branches: ["main"]
merge_group:
pull_request:
branches: ["**"]
paths:
Expand All @@ -19,7 +18,8 @@ env:

jobs:
ef-test:
name: EF Tests
# "Integration Test" is a required check, don't change the name
name: Integration Test
runs-on: ubuntu-latest
steps:
- name: Checkout sources
Expand All @@ -43,7 +43,8 @@ jobs:
cd crates/vm/levm
make run-evm-ef-tests
test:
name: Tests
# "Test" is a required check, don't change the name
name: Test
runs-on: ubuntu-latest
steps:
- name: Checkout sources
Expand Down Expand Up @@ -87,6 +88,7 @@ jobs:
cd crates/vm/levm
make revm-comparison
lint:
# "Lint" is a required check, don't change the name
name: Lint
runs-on: ubuntu-latest
steps:
Expand Down
Loading

0 comments on commit 87ec9df

Please sign in to comment.