name: CI Check on: merge_group: pull_request: push: branches: - main env: CARGO_TERM_COLOR: always # Disable incremental compilation. # # Incremental compilation is useful as part of an edit-build-test-edit cycle, # as it lets the compiler avoid recompiling code that hasn't changed. However, # on CI, we're not making small edits; we're almost always building the entire # project from scratch. Thus, incremental compilation on CI actually # introduces *additional* overhead to support making future builds # faster...but no future builds will ever occur in any given CI environment. # # See https://matklad.github.io/2021/09/04/fast-rust-builds.html#ci-workflow # for details. CARGO_INCREMENTAL: 0 # Allow more retries for network requests in cargo (downloading crates) and # rustup (installing toolchains). This should help to reduce flaky CI failures # from transient network timeouts or other issues. CARGO_NET_RETRY: 10 RUSTUP_MAX_RETRIES: 10 # Don't emit giant backtraces in the CI logs. RUST_BACKTRACE: short # Jobs launched for a PR event cancel the ongoing one for the same workflow + PR, # Only retries (of the same run) for a Push event cancel the prior one. concurrency: group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }} cancel-in-progress: true jobs: test: if: github.event.pull_request.draft == false name: Test runs-on: ubuntu-latest strategy: matrix: feature_set: [basic] include: - feature_set: basic features: --features default,light-test steps: - uses: actions/checkout@v2 - uses: actions-rs/toolchain@v1 - uses: noir-lang/noirup@v0.1.3 with: toolchain: nightly - name: Download Circom run: | mkdir -p $HOME/bin curl -sSfL https://github.com/iden3/circom/releases/download/v2.1.6/circom-linux-amd64 -o $HOME/bin/circom chmod +x $HOME/bin/circom echo "$HOME/bin" >> $GITHUB_PATH - name: Download solc run: | curl -sSfL https://github.com/ethereum/solidity/releases/download/v0.8.4/solc-static-linux -o /usr/local/bin/solc chmod +x /usr/local/bin/solc - name: Execute compile.sh to generate .r1cs and .wasm from .circom run: ./frontends/src/circom/test_folder/compile.sh - name: Execute compile.sh to generate .json from noir run: ./frontends/src/noir/test_folder/compile.sh - name: Run tests uses: actions-rs/cargo@v1 with: command: test args: --release --workspace --no-default-features ${{ matrix.features }} - name: Run Doc-tests uses: actions-rs/cargo@v1 with: command: test args: --doc build: if: github.event.pull_request.draft == false name: Build target ${{ matrix.target }} runs-on: ubuntu-latest strategy: matrix: target: - wasm32-unknown-unknown - wasm32-wasi # Ignoring until clear usage is required # - wasm32-unknown-emscripten steps: - uses: actions/checkout@v3 - uses: actions-rs/toolchain@v1 with: override: false default: true - name: Add target run: rustup target add ${{ matrix.target }} - name: Wasm-compat frontends build uses: actions-rs/cargo@v1 with: command: build args: -p frontends --no-default-features --target ${{ matrix.target }} --features "wasm, parallel" - name: Wasm-compat folding-schemes build uses: actions-rs/cargo@v1 with: command: build args: -p folding-schemes --no-default-features --target ${{ matrix.target }} --features "default,light-test" - name: Run wasm-compat script run: | chmod +x .github/scripts/wasm-target-test-build.sh .github/scripts/wasm-target-test-build.sh shell: bash examples: if: github.event.pull_request.draft == false name: Run examples & examples tests runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions-rs/toolchain@v1 - uses: noir-lang/noirup@v0.1.3 with: toolchain: nightly - name: Download Circom run: | mkdir -p $HOME/bin curl -sSfL https://github.com/iden3/circom/releases/download/v2.1.6/circom-linux-amd64 -o $HOME/bin/circom chmod +x $HOME/bin/circom echo "$HOME/bin" >> $GITHUB_PATH - name: Download solc run: | curl -sSfL https://github.com/ethereum/solidity/releases/download/v0.8.4/solc-static-linux -o /usr/local/bin/solc chmod +x /usr/local/bin/solc - name: Execute compile.sh to generate .r1cs and .wasm from .circom run: ./frontends/src/circom/test_folder/compile.sh - name: Execute compile.sh to generate .json from noir run: ./frontends/src/noir/test_folder/compile.sh - name: Run examples tests run: cargo test --examples - name: Run examples run: cargo run --release --example 2>&1 | grep -E '^ ' | xargs -n1 cargo run --release --example fmt: if: github.event.pull_request.draft == false name: Rustfmt timeout-minutes: 30 runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - uses: actions-rs/toolchain@v1 - uses: Swatinem/rust-cache@v2 - run: rustup component add rustfmt - uses: actions-rs/cargo@v1 with: command: fmt args: --all --check clippy: if: github.event.pull_request.draft == false name: Clippy lint checks runs-on: ubuntu-latest strategy: matrix: feature_set: [basic, wasm] include: - feature_set: basic features: --features default,light-test # We only want to test `frontends` package with `wasm` feature. - feature_set: wasm features: -p frontends --features wasm,parallel --target wasm32-unknown-unknown steps: - uses: actions/checkout@v2 - uses: actions-rs/toolchain@v1 with: components: clippy - uses: Swatinem/rust-cache@v2 - name: Add target run: rustup target add wasm32-unknown-unknown - name: Run clippy uses: actions-rs/cargo@v1 with: command: clippy args: --no-default-features ${{ matrix.features }} -- -D warnings typos: if: github.event.pull_request.draft == false name: Spell Check with Typos runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Use typos with config file uses: crate-ci/typos@master with: config: .github/workflows/typos.toml