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: include: - feature: default steps: - uses: actions/checkout@v2 - uses: actions-rs/toolchain@v1 # use the more efficient nextest - uses: taiki-e/install-action@nextest - uses: Swatinem/rust-cache@v2 - 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: ./folding-schemes/src/frontend/circom/test_folder/compile.sh - name: Build # This build will be reused by nextest, # and also checks (--all-targets) that benches don't bit-rot run: cargo build --release --all-targets --no-default-features --features "light-test,${{ matrix.feature }}" - name: Test run: | cargo nextest run --profile ci --release --workspace --no-default-features --features "light-test,${{ matrix.feature }}" - name: Doctests # nextest does not support doc tests run: | cargo test --doc 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 - 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: ./folding-schemes/src/frontend/circom/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 steps: - uses: actions/checkout@v2 - uses: actions-rs/toolchain@v1 with: components: clippy - uses: Swatinem/rust-cache@v2 - name: Run clippy uses: actions-rs/cargo@v1 with: command: clippy args: --all-targets --all-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