Native Extension For Ceno zkVM #58
This file contains hidden or 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: Extension Tests (CUDA) | |
| on: | |
| workflow_call: | |
| push: | |
| branches: ["main"] | |
| pull_request: | |
| branches: ["**"] | |
| paths: | |
| - "crates/circuits/**" | |
| - "crates/vm/**" | |
| - "crates/toolchain/**" | |
| - "extensions/**" | |
| - "Cargo.toml" | |
| - ".github/workflows/extension-tests.cuda.yml" | |
| concurrency: | |
| group: ${{ github.workflow_ref }}-extension-tests-cuda-${{ github.event.pull_request.number || github.sha }} | |
| cancel-in-progress: true | |
| env: | |
| CARGO_TERM_COLOR: always | |
| OPENVM_FAST_TEST: "1" | |
| OPENVM_SKIP_DEBUG: "1" | |
| jobs: | |
| extension-tests-cuda: | |
| strategy: | |
| matrix: | |
| extensions: # group extensions on the same runner based on test time | |
| - "rv32im native" | |
| - "keccak256 sha256 bigint algebra ecc pairing" | |
| runs-on: | |
| - runs-on=${{ github.run_id }}-extension-tests-cuda-${{ github.run_attempt }}-${{ strategy.job-index }}/runner=test-gpu-nvidia/cpu=8+32 | |
| steps: | |
| - uses: runs-on/action@v2 | |
| - uses: actions/checkout@v5 | |
| - uses: dorny/paths-filter@v3 | |
| id: filter | |
| with: | |
| filters: | | |
| common: | |
| - "crates/circuits/**" | |
| - "crates/vm/**" | |
| - "crates/toolchain/**" | |
| - ".github/workflows/extension-tests.cuda.yml" | |
| rv32im: | |
| - "extensions/rv32im/**" | |
| native: | |
| - "extensions/native/**" | |
| keccak256: | |
| - "extensions/keccak256/**" | |
| sha256: | |
| - "extensions/sha256/**" | |
| bigint: | |
| - "extensions/bigint/**" | |
| algebra: | |
| - "extensions/algebra/**" | |
| ecc: | |
| - "extensions/ecc/**" | |
| pairing: | |
| - "extensions/pairing/**" | |
| - name: Skip if no changes | |
| env: | |
| FILTER_OUTPUTS: ${{ toJSON(steps.filter.outputs) }} | |
| run: | | |
| # Check if common files changed | |
| COMMON_CHANGED=$(echo $FILTER_OUTPUTS | jq -r .common) | |
| # Check if any extension in the current matrix group changed | |
| ANY_EXT_CHANGED=false | |
| for ext in ${{ matrix.extensions }}; do | |
| ext_changed=$(echo $FILTER_OUTPUTS | jq -r .$ext) | |
| if [[ "$ext_changed" == "true" ]]; then | |
| ANY_EXT_CHANGED=true | |
| break | |
| fi | |
| done | |
| # Skip if neither common nor any extension in this matrix group changed | |
| if [[ "$COMMON_CHANGED" != "true" && "$ANY_EXT_CHANGED" != "true" ]]; then | |
| echo "No relevant changes for extensions [${{ matrix.extensions }}], skipping tests." | |
| exit 0 | |
| fi | |
| - run: | # avoid cross-device link error | |
| rustup component remove clippy || true | |
| rm -rf ~/.rustup/toolchains/stable-x86_64-unknown-linux-gnu || true | |
| - uses: dtolnay/rust-toolchain@stable | |
| - uses: Swatinem/rust-cache@v2 | |
| with: | |
| cache-on-failure: true | |
| - uses: taiki-e/install-action@nextest | |
| - name: Check CUDA status and set environment variables | |
| run: | | |
| nvcc --version | |
| echo "NEXTEST_ENV=CUDA_OPT_LEVEL=3" >> $GITHUB_ENV | |
| echo "FEATURE_ARGS=--features=cuda" >> $GITHUB_ENV | |
| echo "VPMM_PAGES=1" >> $GITHUB_ENV | |
| - name: Run extension tests | |
| env: | |
| FILTER_OUTPUTS: ${{ toJSON(steps.filter.outputs) }} | |
| run: | | |
| COMMON_CHANGED=$(echo $FILTER_OUTPUTS | jq -r .common) | |
| for ext in ${{ matrix.extensions }}; do | |
| ext_changed=$(echo $FILTER_OUTPUTS | jq -r .$ext) | |
| if [[ "$COMMON_CHANGED" == "true" || "$ext_changed" == "true" ]]; then | |
| echo "::group::Running tests for $ext" | |
| # Run circuit tests | |
| if [ -d "extensions/$ext/circuit" ]; then | |
| pushd extensions/$ext/circuit | |
| ${{ env.NEXTEST_ENV }} cargo nextest run cuda ${{ env.FEATURE_ARGS }} --features=touchemall --profile=heavy --no-tests=pass | |
| popd | |
| fi | |
| # Run integration tests | |
| if [ -d "extensions/$ext/tests" ]; then | |
| pushd extensions/$ext/tests | |
| rustup component add rust-src --toolchain nightly-2025-08-02 | |
| ${{ env.NEXTEST_ENV }} cargo nextest run ${{ env.FEATURE_ARGS }} --profile=heavy --no-tests=pass | |
| popd | |
| fi | |
| echo "::endgroup::" | |
| else | |
| echo "Skipping tests for $ext as no relevant files changed." | |
| fi | |
| done |