Arbitrator CI triggered from @rauljordan of bold-review #4720
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: Arbitrator CI | |
run-name: Arbitrator CI triggered from @${{ github.actor }} of ${{ github.head_ref }} | |
on: | |
workflow_dispatch: | |
inputs: | |
enable_tmate: | |
type: boolean | |
description: 'Enable tmate' | |
required: false | |
default: false | |
merge_group: | |
pull_request: | |
paths: | |
- 'arbitrator/**' | |
- 'contracts' | |
- '.github/workflows/arbitrator-ci.yml' | |
- 'Makefile' | |
push: | |
branches: | |
- master | |
env: | |
RUST_BACKTRACE: 1 | |
# RUSTFLAGS: -Dwarnings # TODO: re-enable after wasmer upgrade | |
WABT_VERSION: 1.0.32 | |
jobs: | |
arbitrator: | |
name: Run Arbitrator tests | |
runs-on: ubuntu-8 | |
steps: | |
- name: Setup tmate session | |
uses: mxschmitt/action-tmate@v3 | |
if: ${{ github.event_name == 'workflow_dispatch' && inputs.enable_tmate }} | |
with: | |
detached: true | |
- name: Checkout | |
uses: actions/checkout@v4 | |
with: | |
submodules: recursive | |
- name: Install Ubuntu dependencies | |
run: | | |
sudo apt-get update && sudo apt-get install -y \ | |
build-essential cmake lld-14 libudev-dev | |
sudo ln -s /usr/bin/wasm-ld-14 /usr/local/bin/wasm-ld | |
- name: Install go | |
uses: actions/setup-go@v4 | |
with: | |
go-version: 1.23.x | |
- name: Install custom go-ethereum | |
run: | | |
cd /tmp | |
git clone --branch v1.14.11 --depth 1 https://github.com/ethereum/go-ethereum.git | |
cd go-ethereum | |
go build -o /usr/local/bin/geth ./cmd/geth | |
- name: Setup nodejs | |
uses: actions/setup-node@v3 | |
with: | |
node-version: '18' | |
cache: 'yarn' | |
cache-dependency-path: '**/yarn.lock' | |
- name: Install rust stable | |
uses: dtolnay/rust-toolchain@stable | |
with: | |
toolchain: 'stable' | |
components: 'llvm-tools-preview, rustfmt, clippy' | |
- name: Install rust nightly | |
uses: dtolnay/rust-toolchain@nightly | |
id: install-rust-nightly | |
with: | |
toolchain: 'nightly-2024-08-06' | |
targets: 'wasm32-wasi, wasm32-unknown-unknown' | |
components: 'rust-src, rustfmt, clippy' | |
- name: Set STYLUS_NIGHTLY_VER environment variable | |
run: echo "STYLUS_NIGHTLY_VER=+$(rustup toolchain list | grep '^nightly' | head -n1 | cut -d' ' -f1)" >> "$GITHUB_ENV" | |
- name: Cache Rust intermediate build products | |
uses: actions/cache@v3 | |
with: | |
path: | | |
~/.cargo/bin/ | |
~/.cargo/registry/index/ | |
~/.cargo/registry/cache/ | |
~/.cargo/git/db/ | |
arbitrator/target/ | |
arbitrator/wasm-libraries/target/ | |
key: ${{ runner.os }}-cargo-${{ steps.install-rust.outputs.rustc_hash }}-full-${{ hashFiles('arbitrator/Cargo.lock') }} | |
restore-keys: | | |
${{ runner.os }}-cargo-${{ steps.install-rust.outputs.rustc_hash }}-full- | |
${{ runner.os }}-cargo-${{ steps.install-rust.outputs.rustc_hash }}- | |
- name: Cache wabt build | |
id: cache-wabt | |
uses: actions/cache@v3 | |
with: | |
path: ~/wabt-prefix | |
key: ${{ runner.os }}-wabt-${{ env.WABT_VERSION }} | |
- name: Install latest wabt | |
if: steps.cache-wabt.outputs.cache-hit != 'true' | |
run: | | |
cd "$(mktemp -d)" | |
git clone --recursive -b "$WABT_VERSION" https://github.com/WebAssembly/wabt . | |
mkdir build | |
cd build | |
mkdir -p ~/wabt-prefix | |
cmake .. -DCMAKE_INSTALL_PREFIX="$HOME/wabt-prefix" | |
make -j | |
make install | |
- name: Install Foundry | |
uses: foundry-rs/foundry-toolchain@v1 | |
- name: Cache cbrotli | |
uses: actions/cache@v3 | |
id: cache-cbrotli | |
with: | |
path: | | |
target/include/brotli/ | |
target/lib-wasm/ | |
target/lib/libbrotlicommon-static.a | |
target/lib/libbrotlienc-static.a | |
target/lib/libbrotlidec-static.a | |
key: ${{ runner.os }}-brotli-3-${{ hashFiles('scripts/build-brotli.sh') }}-${{ hashFiles('.github/workflows/arbitrator-ci.yaml') }} | |
restore-keys: ${{ runner.os }}-brotli-2- | |
- name: Build cbrotli-local | |
if: steps.cache-cbrotli.outputs.cache-hit != 'true' | |
run: ./scripts/build-brotli.sh -l | |
- name: Setup emsdk | |
if: steps.cache-cbrotli.outputs.cache-hit != 'true' | |
uses: mymindstorm/setup-emsdk@v12 | |
with: | |
# Make sure to set a version number! | |
version: 3.1.6 | |
# This is the name of the cache folder. | |
# The cache folder will be placed in the build directory, | |
# so make sure it doesn't conflict with anything! | |
actions-cache-folder: 'emsdk-cache' | |
no-cache: true | |
- name: Build cbrotli-wasm | |
if: steps.cache-cbrotli.outputs.cache-hit != 'true' | |
run: ./scripts/build-brotli.sh -w | |
- name: Add wabt to path | |
run: echo "$HOME/wabt-prefix/bin" >> "$GITHUB_PATH" | |
- name: Make arbitrator libraries | |
run: make -j wasm-ci-build | |
- name: Clippy check | |
run: cargo clippy --all --manifest-path arbitrator/Cargo.toml -- -D warnings | |
- name: Run rust tests | |
run: cargo test -p arbutil -p prover -p jit -p stylus --release --manifest-path arbitrator/prover/Cargo.toml | |
- name: Rustfmt | |
run: cargo fmt -p arbutil -p prover -p jit -p stylus --manifest-path arbitrator/Cargo.toml -- --check | |
- name: Rustfmt - langs/rust | |
run: cargo fmt --all --manifest-path arbitrator/langs/rust/Cargo.toml -- --check | |
- name: Make proofs from test cases | |
run: make -j test-gen-proofs | |
- name: Start geth server | |
run: | | |
geth --dev --http --http.port 8545 & | |
sleep 2 | |
- name: Run proof validation tests | |
run: | | |
npm install --global yarn | |
cd contracts | |
yarn install | |
yarn build | |
yarn build:forge:yul | |
yarn hardhat --network localhost test test/prover/*.ts |