diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0c20e86..fece0ec 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -36,6 +36,8 @@ jobs: - name: Install cargo plugins run: | cargo install cargo-rdme + cargo install cargo-machete + cargo install taplo-cli cargo install cargo-deadlinks cargo install cargo-criterion @@ -43,7 +45,7 @@ jobs: uses: actions/checkout@v4 - name: Check everything - run: bash ./tools/check.sh + run: bash ./tools/check.sh basic doc_url_links unused_deps packaging fmt toml_fmt readme - name: Code coverage if: ${{ runner.os == 'Linux' }} @@ -66,4 +68,17 @@ jobs: uses: actions/checkout@v4 - name: Check the minimum supported rust version - run: cargo msrv verify + run: bash ./tools/check.sh msrv + + clippy: + runs-on: ubuntu-latest + + steps: + - name: Install rust + uses: dtolnay/rust-toolchain@stable + + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Run clippy + run: bash ./tools/check.sh clippy diff --git a/.taplo.toml b/.taplo.toml new file mode 100644 index 0000000..6ca9d28 --- /dev/null +++ b/.taplo.toml @@ -0,0 +1,17 @@ +include = ["**/*.toml"] +exclude = ["target/**"] + +[formatting] +column_width = 100 +indent_string = ' ' +allowed_blank_lines = 1 + +[[rule]] +formatting = { reorder_keys = true } +keys = [ + "workspace.dependencies", + "dependencies", + "dev-dependencies", + "build-dependencies", + "lints.clippy", +] diff --git a/Cargo.toml b/Cargo.toml index d7c5e16..3b9face 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -12,29 +12,14 @@ repository = "https://github.com/orium/archery" documentation = "https://docs.rs/archery" readme = "README.md" -keywords = [ - "rc", - "arc", - "reference-counting", - "no_std" -] - -categories = [ - "concurrency", - "memory-management", - "rust-patterns", -] +keywords = ["rc", "arc", "reference-counting", "no_std"] + +categories = ["concurrency", "memory-management", "rust-patterns"] license = "MPL-2.0" # What to include when packaging. -include = [ - "/src/**/*.rs", - "/Cargo.toml", - "/LICENSE.md", - "/README.md", - "/release-notes.md", -] +include = ["/src/**/*.rs", "/Cargo.toml", "/LICENSE.md", "/README.md", "/release-notes.md"] [badges] codecov = { repository = "orium/archery", branch = "main", service = "github" } @@ -56,8 +41,8 @@ serde = ["dep:serde"] [lints.clippy] all = { level = "warn", priority = -2 } -pedantic = { level = "warn", priority = -2 } correctness = { level = "deny", priority = -1 } +pedantic = { level = "warn", priority = -2 } explicit-deref-methods = "allow" if-not-else = "allow" diff --git a/tools/check.sh b/tools/check.sh index 6cfa146..027574c 100755 --- a/tools/check.sh +++ b/tools/check.sh @@ -20,41 +20,96 @@ function on_failure { echo -e "${RED}Whoopsie-daisy: something failed!$NC" >&2 } -assert_installed "cargo-deadlinks" -assert_installed "cargo-fmt" -assert_installed "cargo-miri" -assert_installed "cargo-rdme" +assert_installed "cargo" trap on_failure ERR -echo 'Building:' -cargo build --all-features --all-targets -echo 'Testing:' -cargo test --all-features --all-targets --benches -# Weirdly, the `cargo test ... --all-targets ...` above does not run the tests in the documentation, so we run the -# doc tests like this. -# See https://github.com/rust-lang/cargo/issues/6669. -echo 'Testing doc:' -cargo test --all-features --doc -echo 'Checking documentation:' -cargo doc --all-features --no-deps --document-private-items - -# Tests for memory safety and memory leaks with miri. -if [ -z "$MIRI_TOOLCHAIN" ]; then - MIRI_TOOLCHAIN=nightly +function check_basic { + echo 'Building:' + cargo build --features fatal-warnings --all-targets + echo 'Testing:' + cargo test --features fatal-warnings --all-targets + # Weirdly, the `cargo test ... --all-targets ...` above does not run the tests in the documentation, so we run the + # doc tests like this. + # See https://github.com/rust-lang/cargo/issues/6669. + echo 'Testing doc:' + cargo test --features fatal-warnings --doc + echo 'Checking the benchmarks:' + cargo bench --features fatal-warnings -- --test + echo 'Checking documentation:' + cargo doc --features fatal-warnings --no-deps + + # Tests for memory safety and memory leaks with miri. + if [ -z "$MIRI_TOOLCHAIN" ]; then + MIRI_TOOLCHAIN=nightly + fi + echo "Testing with miri (with toolchain $MIRI_TOOLCHAIN):" + cargo +$MIRI_TOOLCHAIN miri test --all-features +} + +function check_doc_url_links { + assert_installed "cargo-deadlinks" + + echo 'Checking doc url links:' + cargo deadlinks +} + +function check_unused_deps { + assert_installed "cargo-machete" + + echo 'Checking unused dependencies:' + cargo machete +} + +function check_packaging { + echo 'Checking packaging:' + cargo package --allow-dirty +} + +function check_fmt { + assert_installed "cargo-fmt" + + echo 'Checking code format:' + cargo fmt -- --check +} + +function check_toml_fmt { + assert_installed "taplo" + + echo 'Checking toml format:' + taplo fmt --check +} + +function check_readme { + assert_installed "cargo-rdme" + + echo 'Checking readme:' + cargo rdme --check +} + +function check_msrv { + assert_installed "cargo-msrv" + + echo 'Checking the minimum supported rust version:' + cargo msrv verify +} + +function check_clippy { + assert_installed "cargo-clippy" + + echo 'Checking with clippy:' + cargo clippy --all-targets -- -D warnings +} + +to_run=(basic doc_url_links unused_deps packaging fmt toml_fmt readme msrv clippy) + +if [ $# -ge 1 ]; then + to_run=("$@") fi -echo "Testing with miri (with toolchain $MIRI_TOOLCHAIN):" -cargo +$MIRI_TOOLCHAIN miri test --all-features - -echo 'Checking links:' -cargo deadlinks - -echo 'Checking packaging:' -cargo package --allow-dirty -echo 'Checking code style:' -cargo fmt -- --check -echo 'Checking readme:' -cargo rdme --check + +for check in "${to_run[@]}"; do + check_$check +done echo echo -e "${GREEN}Everything looks lovely!$NC"