From 50d3cb91a09c4d08eee71d2c7395c7de244d5b25 Mon Sep 17 00:00:00 2001 From: jabu Date: Sun, 10 Dec 2023 16:44:57 -0600 Subject: [PATCH 1/2] fix doc --- src/crc32.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/crc32.rs b/src/crc32.rs index 29845bc..05e0b50 100644 --- a/src/crc32.rs +++ b/src/crc32.rs @@ -1,7 +1,7 @@ use crate::{enet_crc32, os::c_void, ENetBuffer}; /// ENet implementation of CRC32 checksum, for use with -/// [`HostSettings::checksum_fn`](`crate::HostSettings::checksum_fn`). +/// [`HostSettings::checksum_fn`](`crate::HostSettings::checksum`). pub fn crc32(in_buffers: Vec<&[u8]>) -> u32 { let mut buffers = vec![]; for in_buffer in in_buffers { From 45e3540e2504e3d2cb7d750c568bb46b2eb21e2b Mon Sep 17 00:00:00 2001 From: jabu Date: Sun, 10 Dec 2023 16:52:56 -0600 Subject: [PATCH 2/2] add ci --- .github/workflows/ci.yml | 73 ++++++++++++++++++++++++ Cargo.lock | 38 ++++++++++++- Cargo.toml | 6 ++ ci/Cargo.toml | 9 +++ ci/src/main.rs | 119 +++++++++++++++++++++++++++++++++++++++ ci/src/utils.rs | 13 +++++ src/lib.rs | 20 ++++++- 7 files changed, 276 insertions(+), 2 deletions(-) create mode 100644 .github/workflows/ci.yml create mode 100644 ci/Cargo.toml create mode 100644 ci/src/main.rs create mode 100644 ci/src/utils.rs diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..013501a --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,73 @@ +name: Check and Lint +on: + pull_request: + push: + branches: + - main + +jobs: + check: + name: check + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: dtolnay/rust-toolchain@stable + - run: cargo run -p ci -- check + + wasm-check: + name: wasm-check + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: dtolnay/rust-toolchain@stable + with: + targets: wasm32-unknown-unknown + - run: cargo run -p ci -- wasm-check + + example-check: + name: example-check + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: dtolnay/rust-toolchain@stable + - run: cargo run -p ci -- example-check + + fmt: + name: fmt + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: dtolnay/rust-toolchain@stable + - run: cargo run -p ci -- fmt + + test: + name: test + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: dtolnay/rust-toolchain@stable + - run: cargo run -p ci -- test + + doc-test: + name: doc-test + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: dtolnay/rust-toolchain@stable + - run: cargo run -p ci -- doc-test + + doc-check: + name: doc-check + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: dtolnay/rust-toolchain@stable + - run: cargo run -p ci -- doc-check + + clippy: + name: clippy + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: dtolnay/rust-toolchain@stable + - run: cargo run -p ci -- clippy diff --git a/Cargo.lock b/Cargo.lock index 3f02633..c560e3a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,12 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "anyhow" +version = "1.0.75" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "a4668cab20f66d8d020e1fbc0ebe47217433c1b6c8f2040faf858554e394ace6" + [[package]] name = "autocfg" version = "1.1.0" @@ -14,6 +20,12 @@ version = "1.3.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a" +[[package]] +name = "bitflags" +version = "2.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "327762f6e5a765692301e5bb513e0d9fef63be86bbc14528052b1cd3e6f03e07" + [[package]] name = "bumpalo" version = "3.14.0" @@ -26,6 +38,15 @@ version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd" +[[package]] +name = "ci" +version = "0.1.0" +dependencies = [ + "anyhow", + "bitflags 2.4.1", + "xshell", +] + [[package]] name = "futures" version = "0.3.29" @@ -228,7 +249,7 @@ version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "fb5a58c1855b4b6819d59012155603f0b22ad30cad752600aadfcb695265519a" dependencies = [ - "bitflags", + "bitflags 1.3.2", ] [[package]] @@ -409,3 +430,18 @@ name = "winapi-x86_64-pc-windows-gnu" version = "0.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f" + +[[package]] +name = "xshell" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ce2107fe03e558353b4c71ad7626d58ed82efaf56c54134228608893c77023ad" +dependencies = [ + "xshell-macros", +] + +[[package]] +name = "xshell-macros" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "7e2c411759b501fb9501aac2b1b2d287a6e93e5bdcf13c25306b23e1b716dd0e" diff --git a/Cargo.toml b/Cargo.toml index 7417f7f..bd4034e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -6,3 +6,9 @@ edition = "2021" [dependencies] thiserror = "1.0.50" wasm-timer = "0.2.5" + +[workspace] +resolver = "2" +members = [ + "ci" +] diff --git a/ci/Cargo.toml b/ci/Cargo.toml new file mode 100644 index 0000000..4843560 --- /dev/null +++ b/ci/Cargo.toml @@ -0,0 +1,9 @@ +[package] +name = "ci" +version = "0.1.0" +edition = "2021" + +[dependencies] +anyhow = "1.0.70" +xshell = "0.2" +bitflags = "2.0" diff --git a/ci/src/main.rs b/ci/src/main.rs new file mode 100644 index 0000000..c536383 --- /dev/null +++ b/ci/src/main.rs @@ -0,0 +1,119 @@ +use anyhow::bail; +use bitflags::bitflags; +use xshell::{cmd, Shell}; + +mod utils; +use utils::*; + +bitflags! { + #[derive(Clone, Copy)] + struct Check: u32 { + const CHECK = 0b00000001; + const WASM_CHECK = 0b00000010; + const EXAMPLE_CHECK = 0b00000100; + const FMT = 0b00001000; + const TEST = 0b00010000; + const DOC_TEST = 0b00100000; + const DOC_CHECK = 0b01000000; + const CLIPPY = 0b10000000; + } +} + +fn main() -> anyhow::Result<()> { + std::env::set_var("RUSTFLAGS", "-D warnings"); + + let arguments = [ + ("check", Check::CHECK), + ("wasm-check", Check::WASM_CHECK), + ("example-check", Check::EXAMPLE_CHECK), + ("fmt", Check::FMT), + ("test", Check::TEST), + ("doc-test", Check::DOC_TEST), + ("doc-check", Check::DOC_CHECK), + ("clippy", Check::CLIPPY), + ]; + + let what_to_run = if let Some(arg) = std::env::args().nth(1).as_deref() { + if let Some((_, check)) = arguments.iter().find(|(str, _)| *str == arg) { + *check + } else { + bail!( + "Invalid argument: {arg:?}.\nEnter one of: {}.", + arguments[1..] + .iter() + .map(|(s, _)| s) + .fold(arguments[0].0.to_owned(), |c, v| c + ", " + v) + ); + } + } else { + Check::all() + }; + + let sh = Shell::new()?; + if what_to_run.contains(Check::CHECK) { + check(&sh, Target::Default)?; + } + if what_to_run.contains(Check::WASM_CHECK) { + check(&sh, Target::Wasm)?; + } + if what_to_run.contains(Check::EXAMPLE_CHECK) { + example_check(&sh)?; + } + if what_to_run.contains(Check::FMT) { + fmt(&sh)?; + } + if what_to_run.contains(Check::TEST) { + test(&sh)?; + } + if what_to_run.contains(Check::DOC_TEST) { + doc_test(&sh)?; + } + if what_to_run.contains(Check::DOC_CHECK) { + doc_check(&sh)?; + } + if what_to_run.contains(Check::CLIPPY) { + clippy(&sh)?; + } + Ok(()) +} + +fn check(sh: &Shell, target: Target) -> anyhow::Result<()> { + let target_flags = &target.flags(); + cmd!(sh, "cargo check {target_flags...}").run()?; + Ok(()) +} + +fn example_check(sh: &Shell) -> anyhow::Result<()> { + cmd!(sh, "cargo check --examples").run()?; + Ok(()) +} + +fn fmt(sh: &Shell) -> anyhow::Result<()> { + cmd!(sh, "cargo fmt --all -- --check").run()?; + Ok(()) +} + +fn test(sh: &Shell) -> anyhow::Result<()> { + cmd!(sh, "cargo test --workspace --lib --bins --tests").run()?; + Ok(()) +} + +fn doc_test(sh: &Shell) -> anyhow::Result<()> { + cmd!(sh, "cargo test --workspace --doc").run()?; + Ok(()) +} + +fn doc_check(sh: &Shell) -> anyhow::Result<()> { + cmd!( + sh, + "cargo doc --workspace --all-features --no-deps --document-private-items" + ) + .env("RUSTDOCFLAGS", "-Dwarnings") + .run()?; + Ok(()) +} + +fn clippy(sh: &Shell) -> anyhow::Result<()> { + cmd!(sh, "cargo clippy --workspace --all-targets").run()?; + Ok(()) +} diff --git a/ci/src/utils.rs b/ci/src/utils.rs new file mode 100644 index 0000000..763cd26 --- /dev/null +++ b/ci/src/utils.rs @@ -0,0 +1,13 @@ +pub enum Target { + Default, + Wasm, +} + +impl Target { + pub fn flags(&self) -> Vec { + match self { + Target::Default => vec![], + Target::Wasm => vec!["--target".to_owned(), "wasm32-unknown-unknown".to_owned()], + } + } +} diff --git a/src/lib.rs b/src/lib.rs index 80d519d..b4673a6 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -114,9 +114,27 @@ non_snake_case, non_upper_case_globals, unused_assignments, - unused_mut + unused_mut, + clippy::zero_ptr, + clippy::needless_return, + clippy::unnecessary_cast, + clippy::toplevel_ref_arg, + clippy::ptr_offset_with_cast, + clippy::nonminimal_bool, + clippy::single_match, + clippy::unnecessary_mut_passed, + clippy::comparison_chain, + clippy::unnecessary_literal_unwrap, + clippy::let_and_return, + clippy::type_complexity, + clippy::new_without_default, + clippy::precedence, + clippy::collapsible_if, + clippy::collapsible_else_if )] #![warn(missing_docs)] +// https://github.com/rust-lang/rust-clippy/issues/11382 +#![allow(clippy::arc_with_non_send_sync)] use std::{mem::MaybeUninit, time::Duration};