From 77a0c8e6e346ed8c17a6633e86095922fa97d799 Mon Sep 17 00:00:00 2001 From: Han Date: Thu, 17 Aug 2023 19:10:25 +0800 Subject: [PATCH] feat: port CI from `halo2curves` (#4) --- .config/nextest.toml | 10 +++++ .github/workflows/ci.yml | 92 ++++++++++++++++++++++++++++++++++++++++ Cargo.toml | 7 ++- rust-toolchain | 1 + 4 files changed, 108 insertions(+), 2 deletions(-) create mode 100644 .config/nextest.toml create mode 100644 .github/workflows/ci.yml create mode 100644 rust-toolchain diff --git a/.config/nextest.toml b/.config/nextest.toml new file mode 100644 index 0000000..d79bd47 --- /dev/null +++ b/.config/nextest.toml @@ -0,0 +1,10 @@ +[profile.ci] +# Print out output for failing tests as soon as they fail, and also at the end +# of the run (for easy scrollability). +failure-output = "immediate-final" +# Show skipped tests in the CI output. +status-level = "skip" +# Do not cancel the test run on the first failure. +fail-fast = false +# Mark tests as slow after 5mins, kill them after 50 +slow-timeout = { period = "300s", terminate-after = 10 } diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..bfbfde4 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,92 @@ +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: 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 "${{ matrix.feature }}" + - name: Test + run: | + cargo nextest run --profile ci --release --workspace --no-default-features --features "${{ matrix.feature }}" + - name: Doctests # nextest does not support doc tests + run: | + cargo test --doc + + 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 diff --git a/Cargo.toml b/Cargo.toml index fa62bcf..7724955 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -8,10 +8,13 @@ ark-ec = "0.4.2" ark-ff = "0.4.2" ark-std = "0.4.0" ark-poly = "0.4.0" -ark-crypto-primitives = { version = "^0.4.0", default-features = false, features = [ "r1cs", "sponge" ] } +ark-crypto-primitives = { version = "^0.4.0", default-features = false, features = ["r1cs", "sponge"] } ark-relations = { version = "^0.4.0", default-features = false } ark-r1cs-std = { version = "^0.4.0", default-features = false } -thiserror = "1.0" +thiserror = "1.0" [dev-dependencies] ark-bls12-381 = "0.4.0" + +[features] +default = [] diff --git a/rust-toolchain b/rust-toolchain new file mode 100644 index 0000000..f474f5a --- /dev/null +++ b/rust-toolchain @@ -0,0 +1 @@ +1.71.0 \ No newline at end of file