Skip to content

feat: Ethereum prover #37

feat: Ethereum prover

feat: Ethereum prover #37

Workflow file for this run

name: ci-run
on:
pull_request:
push:
branches: [main]
concurrency:
group: check-${{ github.ref }}
cancel-in-progress: true
jobs:
general-checks:
name: general-checks 🧹
runs-on: matterlabs-ci-runner-high-performance
defaults:
run:
working-directory: ./proof_verifier_js/ts
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
submodules: true
- name: Install Rust toolchain
uses: moonrepo/setup-rust@ede6de059f8046a5e236c94046823e2af11ca670 # v1.2.2
with:
inherit-toolchain: true
- uses: taiki-e/install-action@3522286d40783523f9c7880e33f785905b4c20d0 # v2.66.1
with:
tool: wasm-pack
- name: Setup Node.js
uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0
with:
node-version: '22'
- uses: mskelton/setup-yarn@8d0bc12bc7f72a9acfc32019da0381dfcb481df0 # v3.0.0
- name: Install deps
run: yarn install
- name: Build
run: yarn build
license-check:
name: license-check 📜
runs-on: ubuntu-latest
defaults:
run:
working-directory: ./proof_verifier_js/ts
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
- name: Setup Node.js
uses: actions/setup-node@395ad3262231945c25e8478fd5baf05154b1d79f # v6.1.0
with:
node-version: '22'
- name: Install license-checker
run: npm install -g license-checker
- name: Run license checker
run: |
license-checker --production \
--onlyAllow "MIT;Apache-2.0" \
--summary
ethereum-prover-checks:
name: ethereum-prover checks 🧪
runs-on: matterlabs-ci-runner-high-performance
steps:
- uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
with:
submodules: true
- name: Install Rust toolchain
uses: moonrepo/setup-rust@ede6de059f8046a5e236c94046823e2af11ca670 # v1.2.2
with:
inherit-toolchain: true
- name: Install rustfmt and clippy
run: rustup component add rustfmt clippy
- name: Install cargo-nextest
uses: taiki-e/install-action@3522286d40783523f9c7880e33f785905b4c20d0 # v2.66.1
with:
tool: cargo-nextest
- name: Rustfmt
run: cargo fmt -p ethereum_prover -- --check
- name: Clippy
run: cargo clippy -p ethereum_prover -- -D warnings
- name: Tests (nextest)
run: RUST_MIN_STACK=267108864 cargo nextest run -p ethereum_prover
####################################
# Build prover integration tests #
####################################
build-prover-tests:
runs-on: matterlabs-ci-runner-ultra-performance
container:
image: nvidia/cuda:12.9.1-devel-ubuntu22.04
steps:
- name: Checkout code
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
submodules: true
- name: Install Rust toolchain
uses: moonrepo/setup-rust@ede6de059f8046a5e236c94046823e2af11ca670 # v1.2.2
with:
inherit-toolchain: true
- name: Install cargo-nextest
uses: taiki-e/install-action@3522286d40783523f9c7880e33f785905b4c20d0 # v2.66.1
with:
tool: cargo-nextest
- name: Check CUDA version
run: |
nvcc --version
- name: Checkout era-bellman-cuda
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
repository: matter-labs/era-bellman-cuda
ref: main
path: bellman-cuda
fetch-depth: '1'
- name: Cache bellman-cuda
id: bellman-cuda-cache
uses: actions/cache@v4
with:
path: 'bellman-cuda/build'
key: bellman-cuda-${{ hashFiles('bellman-cuda/**') }}
- name: Build bellman-cuda
shell: 'bash -ex {0}'
if: steps.bellman-cuda-cache.outputs.cache-hit != 'true'
run: |
cmake -Bbellman-cuda/build -Sbellman-cuda/ -DCMAKE_BUILD_TYPE=Release
cmake --build bellman-cuda/build/
# Build and archive tests to execute on another machine.
# Use `cargo nextest archive` to make sure that all dependencies are included properly.
- name: Build and archive test
env:
# This is a special mandatory hack to transfer test binary from one machine to another.
# We must use a dummy `./` path addition in the workspace path /home/runner/_work
# to prevent GitHub Actions to replace it to the mapped `/__w` folder in the docker container.
# This is required to make sure that the paths to workspace artifacts like zkos-l1-state.json
# are correct inside prebuilt binary.
# This variable overwrites the default relative `./` in the .cargo/config.toml.
WORKSPACE_DIR: "/opt/./actions-runner/_work/zksync-os-server/zksync-os-server"
BELLMAN_CUDA_DIR: ${{ github.workspace }}/bellman-cuda
run: |
RUST_MIN_STACK=267108864 cargo nextest archive --release -p ethereum_prover \
--test gpu_prover_from_fixture_block --archive-file ${PROVER_GPU_TESTS}.tar.zst
- name: Upload tests
uses: actions/upload-artifact@b7c566a772e6b6bfb58ed0dc250532a479d7789f3 # v6.0.0
with:
name: ${{ env.PROVER_GPU_TESTS }}
path: ${{ env.PROVER_GPU_TESTS }}.tar.zst
if-no-files-found: error
retention-days: 1 # delete sooner to not waste storage
#################################################
# Run prover integration tests on GPU machine #
#################################################
ethereum-prover-gpu-tests:
runs-on: [matterlabs-ci-gpu-runner, hetzner]
needs: build-prover-tests
steps:
- name: Checkout code
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
submodules: true
- name: Install Rust toolchain
uses: moonrepo/setup-rust@ede6de059f8046a5e236c94046823e2af11ca670 # v1.2.2
with:
inherit-toolchain: true
- name: Install cargo-nextest
uses: taiki-e/install-action@3522286d40783523f9c7880e33f785905b4c20d0 # v2.66.1
with:
tool: cargo-nextest
- name: Check Nvidia driver version
run: |
echo $WORKSPACE
pwd
nvidia-smi
- name: Download prebuilt tests
uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
with:
name: ${{ env.PROVER_GPU_TESTS }}
- name: Download CRS setup file
if: steps.cache-crs.outputs.cache-hit != 'true'
env:
# Download CRS file from EU storage for GPU runner
CRS_FILE_URL: https://storage.googleapis.com/matterlabs-setup-keys-europe/setup-keys/setup_compact.key
run: wget -q --show-progress "${CRS_FILE_URL}"
# --workspace-remap is mandatory (!)
# Otherwise, the prebuilt binary will not be able to find its dependencies and fails to execute
- name: Run prover tests on GPU
env:
COMPACT_CRS_FILE: ${{ github.workspace }}/setup_compact.key
RUST_MIN_STACK: 267108864
run: |
ulimit -s 300000
RUN_GPU_TESTS=1 cargo nextest run -p ethereum_prover --test gpu_prover_from_fixture_block
# Special job that allows some of the jobs to be skipped or failed
# requiring others to be successful
pr-checks:
runs-on: ubuntu-latest
if: always()
needs:
- general-checks
- ethereum-prover-checks
- ethereum-prover-gpu-tests
steps:
- name: Decide on PR checks
uses: re-actors/alls-green@05ac9388f0aebcb5727afa17fcccfecd6f8ec5fe # v1.2.2
with:
jobs: ${{ toJSON(needs) }}