From 9479ce611629f4e780f62b960faff10cdaeb46cc Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Thu, 2 Mar 2023 14:20:03 +0000 Subject: [PATCH 1/5] Update CI --- .github/workflows/ci.yml | 246 +++++++---------------------- .github/workflows/lints-beta.yml | 24 +++ .github/workflows/lints-stable.yml | 18 +++ rust-toolchain | 1 - rust-toolchain.toml | 3 + 5 files changed, 106 insertions(+), 186 deletions(-) create mode 100644 .github/workflows/lints-beta.yml create mode 100644 .github/workflows/lints-stable.yml delete mode 100644 rust-toolchain create mode 100644 rust-toolchain.toml diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6abdbf4..6eec5d4 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,186 +8,12 @@ jobs: runs-on: ${{ matrix.os }} strategy: matrix: - # We don't need to test across multiple platforms yet - # os: [ubuntu-latest, windows-latest, macOS-latest] - os: [ubuntu-latest] + os: [ubuntu-latest, windows-latest, macOS-latest] steps: - - uses: actions/checkout@v2 - - uses: actions-rs/toolchain@v1 - with: - toolchain: 1.56.0 - override: true + - uses: actions/checkout@v3 - name: Run tests - uses: actions-rs/cargo@v1 - with: - command: test - args: --verbose --release --all-features - - build: - name: Build target ${{ matrix.target }} - runs-on: ubuntu-latest - strategy: - matrix: - target: - - wasm32-unknown-unknown - - wasm32-wasi - - steps: - - uses: actions/checkout@v2 - - uses: actions-rs/toolchain@v1 - with: - toolchain: 1.56.0 - override: true - - name: Add target - run: rustup target add ${{ matrix.target }} - - name: cargo build - uses: actions-rs/cargo@v1 - with: - command: build - args: --all-features - - bitrot: - name: Bitrot check - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - uses: actions-rs/toolchain@v1 - with: - toolchain: 1.56.0 - override: true - # Build benchmarks to prevent bitrot - - name: Build benchmarks - uses: actions-rs/cargo@v1 - with: - command: build - args: --benches --all-features - - book: - name: Book tests - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions-rs/toolchain@v1 - with: - toolchain: 1.56.0 - override: true - - 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 Pasta book - run: mdbook test -L target/debug/deps book/ - - clippy: - name: Clippy (1.56.0) - timeout-minutes: 30 - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - uses: actions-rs/toolchain@v1 - with: - toolchain: 1.56.0 - components: clippy - override: true - - name: Run clippy - uses: actions-rs/clippy-check@v1 - with: - name: Clippy (1.56.0) - token: ${{ secrets.GITHUB_TOKEN }} - args: --all-features --all-targets -- -D warnings - - clippy-beta: - name: Clippy (beta) - timeout-minutes: 30 - runs-on: ubuntu-latest - continue-on-error: true - - steps: - - uses: actions/checkout@v2 - - uses: actions-rs/toolchain@v1 - with: - toolchain: beta - components: clippy - override: true - - name: Run Clippy (beta) - uses: actions-rs/clippy-check@v1 - continue-on-error: true - with: - name: Clippy (beta) - token: ${{ secrets.GITHUB_TOKEN }} - args: --all-features --all-targets -- -W clippy::all - - codecov: - name: Code coverage - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - # Use stable for this to ensure that cargo-tarpaulin can be built. - - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: 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: --all-features --timeout 600 --out Xml - - name: Upload coverage to Codecov - uses: codecov/codecov-action@v1 - with: - token: ${{secrets.CODECOV_TOKEN}} - - doc-links: - name: Intra-doc links - runs-on: ubuntu-latest - - steps: - - uses: actions/checkout@v2 - - uses: actions-rs/toolchain@v1 - with: - toolchain: 1.56.0 - override: true - - 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: --document-private-items - - fmt: - name: Rustfmt - timeout-minutes: 30 - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: actions-rs/toolchain@v1 - with: - toolchain: 1.56.0 - override: true - - run: rustup component add rustfmt - - uses: actions-rs/cargo@v1 - with: - command: fmt - args: -- --check + run: cargo test --verbose --release --all-features no-std: name: Check no-std target ${{ matrix.target }} @@ -200,14 +26,64 @@ jobs: - wasm32-wasi steps: - - uses: actions/checkout@v2 - - uses: actions-rs/toolchain@v1 - with: - toolchain: stable - override: true + - uses: actions/checkout@v3 - run: rustup target add ${{ matrix.target }} - name: Build - uses: actions-rs/cargo@v1 + run: > + cargo build + --verbose + --target ${{ matrix.target }} + --no-default-features + + bitrot: + name: Bitrot check + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + # Build benchmarks to prevent bitrot + - name: Build benchmarks + run: cargo build --benches --all-features + + book: + name: Book tests + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - run: cargo build + - name: Setup mdBook + uses: peaceiris/actions-mdbook@v1 with: - command: build - args: --verbose --target ${{ matrix.target }} --no-default-features + mdbook-version: '0.4.5' + - name: Test Pasta book + run: mdbook test -L target/debug/deps book/ + + codecov: + name: Code coverage + runs-on: ubuntu-latest + container: + image: xd009642/tarpaulin:develop-nightly + options: --security-opt seccomp=unconfined + steps: + - uses: actions/checkout@v3 + - name: Generate coverage report + run: cargo tarpaulin --engine llvm --all-features --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 + - run: cargo fetch + # Requires #![deny(rustdoc::broken_intra_doc_links)] in crates. + - name: Check intra-doc links + run: cargo doc --document-private-items + + fmt: + name: Rustfmt + timeout-minutes: 30 + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - run: cargo fmt -- --check diff --git a/.github/workflows/lints-beta.yml b/.github/workflows/lints-beta.yml new file mode 100644 index 0000000..4440b58 --- /dev/null +++ b/.github/workflows/lints-beta.yml @@ -0,0 +1,24 @@ +name: Beta lints + +# These lints are only informative, so we only run them directly on branches +# and not trial-merges of PRs, to reduce noise. +on: push + +jobs: + clippy-beta: + name: Clippy (beta) + timeout-minutes: 30 + runs-on: ubuntu-latest + continue-on-error: true + steps: + - uses: actions/checkout@v3 + - uses: dtolnay/rust-toolchain@beta + id: toolchain + - run: rustup override set ${{steps.toolchain.outputs.name}} + - name: Run Clippy (beta) + uses: actions-rs/clippy-check@v1 + continue-on-error: true + with: + name: Clippy (beta) + token: ${{ secrets.GITHUB_TOKEN }} + args: --all-features --all-targets -- -W clippy::all diff --git a/.github/workflows/lints-stable.yml b/.github/workflows/lints-stable.yml new file mode 100644 index 0000000..1e697ef --- /dev/null +++ b/.github/workflows/lints-stable.yml @@ -0,0 +1,18 @@ +name: Stable lints + +# We only run these lints on trial-merges of PRs to reduce noise. +on: pull_request + +jobs: + clippy: + name: Clippy (MSRV) + timeout-minutes: 30 + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - name: Run clippy + uses: actions-rs/clippy-check@v1 + with: + name: Clippy (MSRV) + token: ${{ secrets.GITHUB_TOKEN }} + args: --all-features --all-targets -- -D warnings diff --git a/rust-toolchain b/rust-toolchain deleted file mode 100644 index 3ebf789..0000000 --- a/rust-toolchain +++ /dev/null @@ -1 +0,0 @@ -1.56.0 diff --git a/rust-toolchain.toml b/rust-toolchain.toml new file mode 100644 index 0000000..de43b23 --- /dev/null +++ b/rust-toolchain.toml @@ -0,0 +1,3 @@ +[toolchain] +channel = "1.56.0" +components = [ "clippy", "rustfmt" ] From 374f52d55c71e8f73b7a5c3b9eb4636e765da0e5 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Thu, 2 Mar 2023 14:20:31 +0000 Subject: [PATCH 2/5] Add Dependabot config --- .github/dependabot.yml | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 .github/dependabot.yml diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..5c4156c --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,14 @@ +version: 2 +updates: +- package-ecosystem: github-actions + directory: "/" + schedule: + interval: daily + timezone: Etc/UTC + open-pull-requests-limit: 10 + reviewers: + - str4d + assignees: + - str4d + labels: + - "A-CI" From 437d471b4d384f3828556472b2d7f53ae946d531 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Thu, 2 Mar 2023 14:29:36 +0000 Subject: [PATCH 3/5] Restrict dev-dependencies to `csv < 1.2` We only have this dependency for `criterion`, so it doesn't need to affect the crate MSRV. --- Cargo.toml | 1 + 1 file changed, 1 insertion(+) diff --git a/Cargo.toml b/Cargo.toml index 85db660..c250431 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,6 +22,7 @@ rustdoc-args = ["--cfg", "docsrs", "--html-in-header", "katex-header.html"] [dev-dependencies] bincode = "1.3" criterion = "0.3" +csv = ">= 1.0, < 1.2" # csv 1.2 has MSRV 1.60 rand_xorshift = "0.3" serde_json = "1.0" From 93b9fa235149747233fd09c6a6450d8a889176fa Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Thu, 2 Mar 2023 14:50:19 +0000 Subject: [PATCH 4/5] Run tests with both `--all-features` and `--no-default-features` --- .github/workflows/ci.yml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6eec5d4..35f2292 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -4,16 +4,17 @@ on: [push, pull_request] jobs: test: - name: Test on ${{ matrix.os }} + name: Test on ${{ matrix.os }} with ${{ matrix.features }} runs-on: ${{ matrix.os }} strategy: matrix: os: [ubuntu-latest, windows-latest, macOS-latest] - + features: [--all-features, --no-default-features] + continue-on-error: true steps: - uses: actions/checkout@v3 - name: Run tests - run: cargo test --verbose --release --all-features + run: cargo test --verbose --release ${{ matrix.features }} no-std: name: Check no-std target ${{ matrix.target }} From 61c287a8d653be9927a4a550d8fef50104b3ef78 Mon Sep 17 00:00:00 2001 From: Jack Grigg Date: Thu, 2 Mar 2023 15:54:26 +0000 Subject: [PATCH 5/5] Run tests on 32-bit target --- .github/workflows/ci.yml | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 35f2292..173edf3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,6 +16,25 @@ jobs: - name: Run tests run: cargo test --verbose --release ${{ matrix.features }} + test-32-bit: + name: Test on i686-unknown-linux-gnu with ${{ matrix.features }} + runs-on: ubuntu-latest + strategy: + matrix: + features: [--all-features, --no-default-features] + continue-on-error: true + steps: + - uses: actions/checkout@v3 + - name: Install cross-platform support dependencies + run: sudo apt install gcc-multilib + - run: rustup target add i686-unknown-linux-gnu + - name: Run tests + run: > + cargo test + --verbose + --target i686-unknown-linux-gnu + ${{ matrix.features }} + no-std: name: Check no-std target ${{ matrix.target }} runs-on: ubuntu-latest