From 2dda06becbfa0e3a428b62d8404b7f3da8a5ea15 Mon Sep 17 00:00:00 2001 From: Urho Laukkarinen Date: Sun, 21 Jan 2024 09:44:30 +0200 Subject: [PATCH] Initial Rust github workflow and Cranky --- .github/workflows/rust.yml | 136 +++++++++++++++++++++++++++++++ Cranky.toml | 161 +++++++++++++++++++++++++++++++++++++ 2 files changed, 297 insertions(+) create mode 100644 .github/workflows/rust.yml create mode 100644 Cranky.toml diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml new file mode 100644 index 0000000..568e044 --- /dev/null +++ b/.github/workflows/rust.yml @@ -0,0 +1,136 @@ +on: [push, pull_request] + +name: Rust + +jobs: + fmt-crank-check-test: + name: Format + check + test + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v4 + + - uses: dtolnay/rust-toolchain@master + with: + toolchain: 1.72.0 + + - name: Set up cargo cache + uses: Swatinem/rust-cache@v2 + + - name: Rustfmt + run: cargo fmt --all -- --check + + - name: Lint vertical spacing + run: ./scripts/lint.py + + - name: Install cargo-cranky + uses: baptiste0928/cargo-install@v1 + with: + crate: cargo-cranky + + - name: check --all-features + run: cargo check --locked --all-features --all-targets + + - name: Test doc-tests + run: cargo test --doc --all-features + + - name: cargo doc --lib + run: cargo doc --lib --no-deps --all-features + + - name: cargo doc --document-private-items + run: cargo doc --document-private-items --no-deps --all-features + + - name: Test + run: cargo test --all-features + + - name: Cranky + run: cargo cranky --all-targets --all-features -- -D warnings + + - name: Cranky release + run: cargo cranky --all-targets --all-features --release -- -D warnings + + # --------------------------------------------------------------------------- + + check_wasm: + name: Check wasm32 + wasm-bindgen + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@master + with: + toolchain: 1.72.0 + targets: wasm32-unknown-unknown + + - run: sudo apt-get update && sudo apt-get install libgtk-3-dev libatk1.0-dev + + - name: Set up cargo cache + uses: Swatinem/rust-cache@v2 + + - name: Install cargo-cranky + uses: baptiste0928/cargo-install@v1 + with: + crate: cargo-cranky + + - name: Check wasm32 egui_demo_app + run: cargo check -p egui_demo_app --lib --target wasm32-unknown-unknown + + - name: Check wasm32 egui_demo_app --all-features + run: cargo check -p egui_demo_app --lib --target wasm32-unknown-unknown --all-features + + - name: Check wasm32 eframe + run: cargo check -p eframe --lib --no-default-features --features glow,persistence --target wasm32-unknown-unknown + + - name: wasm-bindgen + uses: jetli/wasm-bindgen-action@v0.1.0 + with: + version: "0.2.88" + + - run: ./scripts/wasm_bindgen_check.sh --skip-setup + + - name: Cranky wasm32 + run: ./scripts/clippy_wasm.sh + + # --------------------------------------------------------------------------- + + cargo-deny: + strategy: + fail-fast: false + matrix: + include: + - target: aarch64-apple-darwin + - target: aarch64-linux-android + - target: i686-pc-windows-gnu + - target: i686-pc-windows-msvc + - target: i686-unknown-linux-gnu + - target: wasm32-unknown-unknown + - target: x86_64-apple-darwin + - target: x86_64-pc-windows-gnu + - target: x86_64-pc-windows-msvc + - target: x86_64-unknown-linux-gnu + - target: x86_64-unknown-linux-musl + - target: x86_64-unknown-redox + + name: cargo-deny ${{ matrix.target }} + runs-on: ubuntu-22.04 + steps: + - uses: actions/checkout@v4 + - uses: EmbarkStudios/cargo-deny-action@v1 + with: + rust-version: "1.72.0" + log-level: error + command: check + arguments: --target ${{ matrix.target }} + + windows: + name: Check Windows + runs-on: windows-latest + steps: + - uses: actions/checkout@v4 + - uses: dtolnay/rust-toolchain@master + with: + toolchain: 1.72.0 + + - name: Set up cargo cache + uses: Swatinem/rust-cache@v2 + + - name: Check + run: cargo check --all-targets --all-features \ No newline at end of file diff --git a/Cranky.toml b/Cranky.toml new file mode 100644 index 0000000..4ea4676 --- /dev/null +++ b/Cranky.toml @@ -0,0 +1,161 @@ +# https://github.com/ericseppanen/cargo-cranky +# cargo install cargo-cranky && cargo cranky +# See also clippy.toml + +deny = ["unsafe_code"] + +warn = [ + "clippy::all", + "clippy::as_ptr_cast_mut", + "clippy::await_holding_lock", + "clippy::bool_to_int_with_if", + "clippy::branches_sharing_code", + "clippy::char_lit_as_u8", + "clippy::checked_conversions", + "clippy::clear_with_drain", + "clippy::cloned_instead_of_copied", + "clippy::dbg_macro", + "clippy::debug_assert_with_mut_call", + "clippy::default_union_representation", + "clippy::derive_partial_eq_without_eq", + "clippy::disallowed_macros", + "clippy::disallowed_methods", + "clippy::disallowed_names", + "clippy::disallowed_script_idents", + "clippy::disallowed_types", + "clippy::doc_link_with_quotes", + "clippy::doc_markdown", + "clippy::empty_enum", + "clippy::empty_line_after_outer_attr", + "clippy::enum_glob_use", + "clippy::equatable_if_let", + "clippy::exit", + "clippy::expl_impl_clone_on_copy", + "clippy::explicit_deref_methods", + "clippy::explicit_into_iter_loop", + "clippy::explicit_iter_loop", + "clippy::fallible_impl_from", + "clippy::filter_map_next", + "clippy::flat_map_option", + "clippy::float_cmp_const", + "clippy::fn_params_excessive_bools", + "clippy::fn_to_numeric_cast_any", + "clippy::from_iter_instead_of_collect", + "clippy::get_unwrap", + "clippy::if_let_mutex", + "clippy::implicit_clone", + "clippy::imprecise_flops", + "clippy::index_refutable_slice", + "clippy::inefficient_to_string", + "clippy::invalid_upcast_comparisons", + "clippy::iter_not_returning_iterator", + "clippy::iter_on_empty_collections", + "clippy::iter_on_single_items", + "clippy::large_digit_groups", + "clippy::large_include_file", + "clippy::large_stack_arrays", + "clippy::large_stack_frames", + "clippy::large_types_passed_by_value", + "clippy::let_unit_value", + "clippy::linkedlist", + "clippy::lossy_float_literal", + "clippy::macro_use_imports", + "clippy::manual_assert", + "clippy::manual_clamp", + "clippy::manual_instant_elapsed", + "clippy::manual_let_else", + "clippy::manual_ok_or", + "clippy::manual_string_new", + "clippy::map_err_ignore", + "clippy::map_flatten", + "clippy::map_unwrap_or", + "clippy::match_on_vec_items", + "clippy::match_same_arms", + "clippy::match_wild_err_arm", + "clippy::match_wildcard_for_single_variants", + "clippy::mem_forget", + "clippy::mismatched_target_os", + "clippy::mismatching_type_param_order", + "clippy::missing_enforced_import_renames", + "clippy::missing_errors_doc", + "clippy::missing_safety_doc", + "clippy::mut_mut", + "clippy::mutex_integer", + "clippy::needless_borrow", + "clippy::needless_continue", + "clippy::needless_for_each", + "clippy::needless_pass_by_value", + "clippy::negative_feature_names", + "clippy::nonstandard_macro_braces", + "clippy::option_option", + "clippy::path_buf_push_overwrite", + "clippy::print_stdout", + "clippy::ptr_as_ptr", + "clippy::ptr_cast_constness", + "clippy::pub_without_shorthand", + "clippy::rc_mutex", + "clippy::redundant_type_annotations", + "clippy::ref_option_ref", + "clippy::rest_pat_in_fully_bound_structs", + "clippy::same_functions_in_if_condition", + "clippy::semicolon_if_nothing_returned", + "clippy::significant_drop_tightening", + "clippy::single_match_else", + "clippy::str_to_string", + "clippy::string_add_assign", + "clippy::string_add", + "clippy::string_lit_as_bytes", + "clippy::string_to_string", + "clippy::suspicious_command_arg_space", + "clippy::suspicious_xor_used_as_pow", + "clippy::todo", + "clippy::trailing_empty_array", + "clippy::trait_duplication_in_bounds", + "clippy::transmute_ptr_to_ptr", + "clippy::tuple_array_conversions", + "clippy::unchecked_duration_subtraction", + "clippy::undocumented_unsafe_blocks", + "clippy::unimplemented", + "clippy::uninlined_format_args", + "clippy::unnecessary_box_returns", + "clippy::unnecessary_safety_comment", + "clippy::unnecessary_safety_doc", + "clippy::unnecessary_self_imports", + "clippy::unnecessary_struct_initialization", + "clippy::unnecessary_wraps", + "clippy::unnested_or_patterns", + "clippy::unused_peekable", + "clippy::unused_rounding", + "clippy::unused_self", + "clippy::use_self", + "clippy::useless_transmute", + "clippy::verbose_file_reads", + "clippy::wildcard_dependencies", + "clippy::wildcard_imports", + "clippy::zero_sized_map_values", + "elided_lifetimes_in_paths", + "future_incompatible", + "nonstandard_style", + "rust_2018_idioms", + "rust_2021_prelude_collisions", + "rustdoc::missing_crate_level_docs", + "semicolon_in_expressions_from_macros", + "trivial_numeric_casts", + "unsafe_op_in_unsafe_fn", + "unused_extern_crates", + "unused_import_braces", + "unused_lifetimes", +] + +allow = [ + "clippy::cloned_instead_of_copied", + "clippy::let_underscore_untyped", + "clippy::missing_assert_message", + "clippy::missing_errors_doc", + "clippy::too_many_lines", + "clippy::undocumented_unsafe_blocks", + "clippy::unwrap_used", + "clippy::wildcard_imports", + "trivial_casts", + "unused_qualifications", +] \ No newline at end of file