name: CI checks on: [push, pull_request] jobs: test: name: Test on ${{ matrix.os }}${{ matrix.name_suffix }} runs-on: ${{ matrix.os }} strategy: matrix: stage: [stable, beta, nightly] os: [ubuntu-latest, windows-latest, macOS-latest] include: - stage: beta name_suffix: " with beta features" extra_flags: --features beta - stage: nightly name_suffix: " with nightly features" extra_flags: --features nightly steps: - uses: actions/checkout@v3 - id: prepare uses: ./.github/actions/prepare - name: Run tests uses: actions-rs/cargo@v1 with: command: test args: > --verbose --release --workspace ${{ steps.prepare.outputs.feature-flags }} ${{ matrix.extra_flags }} build: name: Build target ${{ matrix.target }} runs-on: ubuntu-latest strategy: matrix: target: - wasm32-unknown-unknown - wasm32-wasi steps: - uses: actions/checkout@v3 - id: prepare uses: ./.github/actions/prepare with: nightly-features: true test-dependencies: false - name: Add target run: rustup target add ${{ matrix.target }} - name: cargo build uses: actions-rs/cargo@v1 with: command: build args: > ${{ steps.prepare.outputs.feature-flags }} --target ${{ matrix.target }} bitrot: name: Bitrot check runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 # Check bitrot with stable (as we don't need benchmarks or the test-dev-graph # feature flag to work with MSRV). - uses: ./.github/actions/prepare with: toolchain: stable # Build benchmarks and all-features to prevent bitrot - name: Build benchmarks uses: actions-rs/cargo@v1 with: command: build args: --benches --examples --all-features book: name: Book tests runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: ./.github/actions/prepare - name: cargo build uses: actions-rs/cargo@v1 with: command: build - name: Setup mdBook uses: peaceiris/actions-mdbook@v1 with: mdbook-version: '0.4.5' - name: Test halo2 book run: mdbook test -L target/debug/deps book/ codecov: name: Code coverage runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 # Use stable for this to ensure that cargo-tarpaulin can be built. - id: prepare uses: ./.github/actions/prepare with: toolchain: stable nightly-features: true - name: Install cargo-tarpaulin uses: actions-rs/cargo@v1 with: command: install args: cargo-tarpaulin - name: Generate coverage report uses: actions-rs/cargo@v1 with: command: tarpaulin args: > ${{ steps.prepare.outputs.feature-flags }} --timeout 600 --out Xml - name: Upload coverage to Codecov uses: codecov/codecov-action@v3.1.1 doc-links: name: Intra-doc links runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: ./.github/actions/prepare - name: cargo fetch uses: actions-rs/cargo@v1 with: command: fetch # Ensure intra-documentation links all resolve correctly # Requires #![deny(intra_doc_link_resolution_failure)] in crates. - name: Check intra-doc links uses: actions-rs/cargo@v1 with: command: doc args: --all --document-private-items fmt: name: Rustfmt timeout-minutes: 30 runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - uses: ./.github/actions/prepare - run: rustup component add rustfmt - uses: actions-rs/cargo@v1 with: command: fmt args: --all -- --check