Arbitrator CI triggered from @joshuacolvin0 of #4090
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.21.x | |
- name: Install custom go-ethereum | |
run: | | |
cd /tmp | |
git clone --branch v1.13.8 --depth 1 https://github.com/ethereum/go-ethereum.git | |
cd go-ethereum | |
# Enable KZG point evaluation precompile early | |
sed -i 's#var PrecompiledContractsBerlin = map\[common.Address\]PrecompiledContract{#\0 common.BytesToAddress([]byte{0x0a}): \&kzgPointEvaluation{},#g' core/vm/contracts.go | |
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: "1.76" | |
components: 'llvm-tools-preview, rustfmt, clippy' | |
- name: Install rust nightly | |
uses: dtolnay/rust-toolchain@nightly | |
id: install-rust-nightly | |
with: | |
toolchain: "nightly-2024-02-04" | |
targets: 'wasm32-wasi, wasm32-unknown-unknown' | |
components: 'rust-src, rustfmt, clippy' | |
- 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 STYLUS_NIGHTLY_VER="+nightly-2024-02-04" | |
- name: Clippy check | |
run: cargo clippy --all --manifest-path arbitrator/Cargo.toml -- -D warnings | |
- name: Run rust tests | |
uses: actions-rs/cargo@v1 | |
with: | |
command: test | |
args: -p arbutil -p prover -p jit -p stylus --release --manifest-path arbitrator/prover/Cargo.toml | |
- name: Rustfmt | |
uses: actions-rs/cargo@v1 | |
with: | |
command: fmt | |
args: -p arbutil -p prover -p jit -p stylus --manifest-path arbitrator/Cargo.toml -- --check | |
- name: Rustfmt - langs/rust | |
uses: actions-rs/cargo@v1 | |
with: | |
command: fmt | |
args: --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 |