Skip to content

Mopro cli supporting web platform #1288

Mopro cli supporting web platform

Mopro cli supporting web platform #1288

name: Build and Test
on:
push:
pull_request:
types:
- opened
- synchronize
- reopened
- ready_for_review
env:
CARGO_TERM_COLOR: always
jobs:
# TODO: Add a job to run clippy
lint:
runs-on: ubuntu-latest
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
steps:
- uses: actions/checkout@v4
- name: Check formatting
run: cargo fmt --all -- --check
cli:
runs-on: ubuntu-latest
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
steps:
- uses: actions/checkout@v4
- name: Install cli
run: |
cd cli
cargo install --path .
mopro --help
test-ffi-halo2:
runs-on: ubuntu-latest
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
steps:
- uses: actions/checkout@v4
- name: Install Rust toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- name: Run ffi halo2 tests
run: cd mopro-ffi && cargo test --features halo2 --no-default-features
test-ffi-circom:
runs-on: ubuntu-latest
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
steps:
- uses: actions/checkout@v4
- name: Install Rust toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- name: Run ffi circom tests
run: cd mopro-ffi && cargo test --features circom --no-default-features
test-ffi-ashlang:
runs-on: ubuntu-latest
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
steps:
- uses: actions/checkout@v4
- name: Install Rust toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- name: Run ffi ashlang tests
run: cd mopro-ffi && cargo test --features ashlang --no-default-features
setup-halo2-wasm-env:
runs-on: ubuntu-latest
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
outputs:
chrome-dir: ${{ steps.parsed-chrome-chromedriver-dir.outputs.chrome-dir }}
chromedriver-dir: ${{ steps.parsed-chrome-chromedriver-dir.outputs.chromedriver-dir }}
steps:
- uses: actions/checkout@v4
- name: Install Rust toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: nightly-2024-07-18
override: true
- name: Cache wasm-pack
id: cache-wasm-pack
uses: actions/cache@v4
with:
path: ~/.cargo/bin/wasm-pack
key: ${{ runner.os }}-wasm-pack
- name: Install wasm-pack
if: steps.cache-wasm-pack.outputs.cache-hit != 'true'
run: curl https://rustwasm.github.io/wasm-pack/installer/init.sh -sSf | sh
- name: Setup Chrome and ChromeDriver
uses: browser-actions/setup-chrome@v1
id: setup-chrome-chromedriver
with:
chrome-version: 130
install-chromedriver: true
- name: Parse Chrome and ChromeDriver Directories
id: parsed-chrome-chromedriver-dir
run: |
echo "chrome-dir=$(dirname ${{ steps.setup-chrome-chromedriver.outputs.chrome-path }})" >> $GITHUB_OUTPUT
echo "chromedriver-dir=$(dirname ${{ steps.setup-chrome-chromedriver.outputs.chromedriver-path }})" >> $GITHUB_OUTPUT
- name: Cache Chrome and ChromeDriver
id: cache-chrome-chromedriver
uses: actions/cache@v4
with:
path: |
${{ steps.parsed-chrome-chromedriver-dir.outputs.chrome-dir }}
${{ steps.parsed-chrome-chromedriver-dir.outputs.chromedriver-dir }}
key: ${{ runner.os }}-cache-chrome-chromedriver
test-wasm-halo2:
runs-on: ubuntu-latest
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
needs: setup-halo2-wasm-env
env:
CHROME_BIN: ${{ needs.setup-halo2-wasm-env.outputs.chrome-dir }}/chrome
CHROMEDRIVER_BIN: ${{ needs.setup-halo2-wasm-env.outputs.chromedriver-dir }}/chromedriver
steps:
- uses: actions/checkout@v4
- name: Restore cached wasm-pack
uses: actions/cache@v4
with:
path: ~/.cargo/bin/wasm-pack
key: ${{ runner.os }}-wasm-pack
- name: Restore cached chrome and chromedriver
uses: actions/cache@v4
with:
path: |
${{ needs.setup-halo2-wasm-env.outputs.chrome-dir }}
${{ needs.setup-halo2-wasm-env.outputs.chromedriver-dir }}
key: ${{ runner.os }}-cache-chrome-chromedriver
- name: Run wasm halo2 tests
run: |
echo "Override default chrome path for 'wasm-pack test'"
ln -sf $CHROME_BIN /usr/local/bin/google-chrome-stable
echo "Check override chrome version"
google-chrome-stable --version
cd mopro-wasm
wasm-pack test --chrome --chromedriver $CHROMEDRIVER_BIN --headless
test-e2e:
runs-on: ubuntu-latest
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
steps:
- uses: actions/checkout@v4
- name: Install Rust toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- name: Run e2e circom tests
# TODO: Fix this custom jar thing
run: |
cd test-e2e
curl -L https://repo1.maven.org/maven2/net/java/dev/jna/jna/5.13.0/jna-5.13.0.jar -o jna-5.13.0.jar
CLASSPATH=jna-5.13.0.jar cargo test --test circom -- --nocapture
- name: Run e2e halo2 tests
run: CLASSPATH=jna-5.13.0.jar cargo test --test halo2 -- --nocapture
build-xcframework:
runs-on: macos-latest
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
steps:
- uses: actions/checkout@v4
- name: Install Rust toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- name: Build iOS xcframework
run: cd test-e2e && cargo run --bin ios
- name: Cache xcframework
id: cache-xcframework
uses: actions/cache/save@v4
with:
path: test-e2e/MoproiOSBindings
key: ${{ github.sha }}-xcframework
build-ios-app-device:
runs-on: macos-latest
needs: build-xcframework
steps:
- uses: actions/checkout@v4
- name: Install Rust toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- name: Restore cached xcframework
id: cache-restore-xcframework
uses: actions/cache/restore@v4
with:
path: test-e2e/MoproiOSBindings
key: ${{ github.sha }}-xcframework
- name: Build app for device
run: xcodebuild -project ./test-e2e/ios/mopro-test.xcodeproj -scheme mopro-test -destination generic/platform=iOS build CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO
build-ios-app-simulator:
runs-on: macos-latest
needs: build-xcframework
steps:
- uses: actions/checkout@v4
- name: Install Rust toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- name: Restore cached xcframework
id: cache-restore-xcframework
uses: actions/cache/restore@v4
with:
path: test-e2e/MoproiOSBindings
key: ${{ github.sha }}-xcframework
- name: Build app for device
run: xcodebuild -project ./test-e2e/ios/mopro-test.xcodeproj -scheme mopro-test -destination generic/platform=iOS\ Simulator build CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO
test-ios-app-simulator:
runs-on: macos-14
needs: build-xcframework
steps:
- uses: actions/checkout@v4
- name: Install Rust toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- name: Restore cached xcframework
id: cache-restore-xcframework
uses: actions/cache/restore@v4
with:
path: test-e2e/MoproiOSBindings
key: ${{ github.sha }}-xcframework
# to list available simulators: xcrun simctl list devices
- name: Test app in simulator
run: xcodebuild -project ./test-e2e/ios/mopro-test.xcodeproj -scheme mopro-test -destination 'platform=iOS Simulator,name=iPhone 15' test CODE_SIGN_IDENTITY="" CODE_SIGNING_REQUIRED=NO
build-android-lib:
runs-on: ubuntu-latest
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
steps:
- uses: actions/checkout@v4
- name: Install Rust toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- name: Build Android bindings
run: cd test-e2e && cargo run --bin android
- name: Cache android lib
id: cache-android-lib
uses: actions/cache/save@v4
with:
path: test-e2e/MoproAndroidBindings
key: ${{ github.sha }}-android-lib
build-android-app:
runs-on: ubuntu-latest
needs: build-android-lib
steps:
- uses: actions/checkout@v4
- name: Install Rust toolchain
uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- name: Restore cached android lib
id: cache-restore-android-lib
uses: actions/cache/restore@v4
with:
path: test-e2e/MoproAndroidBindings
key: ${{ github.sha }}-android-lib
- name: Setup Java
uses: actions/setup-java@v3
with:
distribution: 'temurin'
java-version: 17
- name: Setup Android SDK
uses: android-actions/[email protected]
- name: Build android app
run: cd test-e2e/android && ./gradlew build
build-halo2-wasm-web:
runs-on: ubuntu-latest
needs: setup-halo2-wasm-env
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name != github.event.pull_request.base.repo.full_name
steps:
- uses: actions/checkout@v4
- name: Restore cached wasm-pack
uses: actions/cache@v4
with:
path: ~/.cargo/bin/wasm-pack
key: ${{ runner.os }}-wasm-pack
- name: Cache halo2 wasm circuit
id: cache-halo2-wasm-circuit
uses: actions/cache@v4
with:
path: |
test-e2e/web/mopro-pkg
key: ${{ runner.os }}-halo2-wasm-circuit-${{ hashFiles('mopro-wasm/**/*') }}
- name: Build circuits for Wasm Web app
if: steps.cache-halo2-wasm-circuit.outputs.cache-hit != 'true'
run: |
cd mopro-wasm
wasm-pack build --target web --out-dir ../test-e2e/web/mopro-pkg -- --all-features
cd ..
mkdir -p test-e2e/web/mopro-pkg/parameters
cp test-vectors/halo2/* test-e2e/web/mopro-pkg/parameters/
test-halo2-wasm-web:
runs-on: ubuntu-latest
needs:
- setup-halo2-wasm-env
- build-halo2-wasm-web
env:
CHROME_BIN: ${{ needs.setup-halo2-wasm-env.outputs.chrome-dir }}/chrome
CHROMEDRIVER_BIN: ${{ needs.setup-halo2-wasm-env.outputs.chromedriver-dir }}/chromedriver
defaults:
run:
working-directory: test-e2e/web
steps:
- uses: actions/checkout@v4
- name: Restore cached chrome and chromedriver
uses: actions/cache@v4
with:
path: |
${{ needs.setup-halo2-wasm-env.outputs.chrome-dir }}
${{ needs.setup-halo2-wasm-env.outputs.chromedriver-dir }}
key: ${{ runner.os }}-cache-chrome-chromedriver
- name: Restore cached halo2 wasm circuit
uses: actions/cache@v4
with:
path: |
test-e2e/web/mopro-pkg
key: ${{ runner.os }}-halo2-wasm-circuit-${{ hashFiles('mopro-wasm/**/*') }}
- name: Install dependencies
run: yarn install
- name: Run halo2-wasm-app server and test it
run: |
nohup yarn start &
for i in {1..30}; do
if curl --silent http://localhost:3000 > /dev/null; then
echo "Server is ready!"
break
fi
echo "Waiting for server..."
sleep 1
done
yarn test