[INFO] cloning repository https://github.com/ELmichaRD/wrkflw [INFO] running `Command { std: "git" "-c" "credential.helper=" "-c" "credential.helper=/workspace/cargo-home/bin/git-credential-null" "clone" "--bare" "https://github.com/ELmichaRD/wrkflw" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FELmichaRD%2Fwrkflw", kill_on_drop: false }` [INFO] [stderr] Cloning into bare repository '/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FELmichaRD%2Fwrkflw'... [INFO] running `Command { std: "git" "rev-parse" "HEAD", kill_on_drop: false }` [INFO] [stdout] 13873b1ae7b35981487d851ea228ce83a0519fd8 [INFO] linting ELmichaRD/wrkflw against nightly for clippy-nonminimal_bool-denied [INFO] running `Command { std: "git" "clone" "/workspace/cache/git-repos/https%3A%2F%2Fgithub.com%2FELmichaRD%2Fwrkflw" "/workspace/builds/worker-5-tc1/source", kill_on_drop: false }` [INFO] [stderr] Cloning into '/workspace/builds/worker-5-tc1/source'... [INFO] [stderr] done. [INFO] started tweaking git repo https://github.com/ELmichaRD/wrkflw [INFO] finished tweaking git repo https://github.com/ELmichaRD/wrkflw [INFO] tweaked toml for git repo https://github.com/ELmichaRD/wrkflw written to /workspace/builds/worker-5-tc1/source/Cargo.toml [INFO] validating manifest of git repo https://github.com/ELmichaRD/wrkflw on toolchain nightly [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] crate git repo https://github.com/ELmichaRD/wrkflw already has a lockfile, it will not be regenerated [INFO] running `Command { std: CARGO_HOME="/workspace/cargo-home" RUSTUP_HOME="/workspace/rustup-home" "/workspace/cargo-home/bin/cargo" "+nightly" "fetch" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded deranged v0.4.1 [INFO] [stderr] Downloaded hyperlocal v0.8.0 [INFO] [stderr] Downloaded once_cell v1.21.2 [INFO] [stderr] Downloaded bollard-stubs v1.42.0-rc.7 [INFO] [stderr] Downloaded cc v1.2.17 [INFO] [stderr] Downloaded bollard v0.14.0 [INFO] [stderr] Downloaded rustix v1.0.3 [INFO] [stderr] Downloaded tokio v1.44.1 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 3c0121a407f623f06fbb6459836ae368276bda0b98a570b699058b82292c30c1 [INFO] running `Command { std: "docker" "start" "-a" "3c0121a407f623f06fbb6459836ae368276bda0b98a570b699058b82292c30c1", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "3c0121a407f623f06fbb6459836ae368276bda0b98a570b699058b82292c30c1", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "3c0121a407f623f06fbb6459836ae368276bda0b98a570b699058b82292c30c1", kill_on_drop: false }` [INFO] [stdout] 3c0121a407f623f06fbb6459836ae368276bda0b98a570b699058b82292c30c1 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-5-tc1/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "RUSTDOCFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "ghcr.io/rust-lang/crates-build-env/linux@sha256:d429b63d4308055ea97f60fb1d3dfca48854a00942f1bd2ad806beaf015945ec" "/opt/rustwide/cargo-home/bin/cargo" "+nightly" "clippy" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stdout] e6269157e1ff3a4dc8eb8bb19ffbc41ca228f91aa23c6f38b3f6e3773b1c36df [INFO] running `Command { std: "docker" "start" "-a" "e6269157e1ff3a4dc8eb8bb19ffbc41ca228f91aa23c6f38b3f6e3773b1c36df", kill_on_drop: false }` [INFO] [stderr] Compiling proc-macro2 v1.0.94 [INFO] [stderr] Checking smallvec v1.14.0 [INFO] [stderr] Checking itoa v1.0.15 [INFO] [stderr] Compiling icu_locid_transform_data v1.5.1 [INFO] [stderr] Compiling libc v0.2.171 [INFO] [stderr] Compiling lock_api v0.4.12 [INFO] [stderr] Compiling serde v1.0.219 [INFO] [stderr] Compiling icu_properties_data v1.5.1 [INFO] [stderr] Checking once_cell v1.21.2 [INFO] [stderr] Checking futures-io v0.3.31 [INFO] [stderr] Compiling icu_normalizer_data v1.5.1 [INFO] [stderr] Checking hashbrown v0.15.2 [INFO] [stderr] Compiling rustix v1.0.3 [INFO] [stderr] Checking ryu v1.0.20 [INFO] [stderr] Checking utf8parse v0.2.2 [INFO] [stderr] Checking linux-raw-sys v0.9.3 [INFO] [stderr] Compiling getrandom v0.3.2 [INFO] [stderr] Checking http v0.2.12 [INFO] [stderr] Checking anstyle-parse v0.2.6 [INFO] [stderr] Compiling num-traits v0.2.19 [INFO] [stderr] Compiling rustix v0.38.44 [INFO] [stderr] Checking anstyle v1.0.10 [INFO] [stderr] Checking tracing-core v0.1.33 [INFO] [stderr] Checking colorchoice v1.0.3 [INFO] [stderr] Checking is_terminal_polyfill v1.70.1 [INFO] [stderr] Checking anstyle-query v1.1.2 [INFO] [stderr] Compiling serde_json v1.0.140 [INFO] [stderr] Checking linux-raw-sys v0.4.15 [INFO] [stderr] Checking clap_lex v0.7.4 [INFO] [stderr] Checking home v0.5.11 [INFO] [stderr] Checking either v1.15.0 [INFO] [stderr] Checking tracing v0.1.41 [INFO] [stderr] Checking iana-time-zone v0.1.62 [INFO] [stderr] Checking anstream v0.6.18 [INFO] [stderr] Checking unsafe-libyaml v0.2.11 [INFO] [stderr] Checking log v0.4.27 [INFO] [stderr] Checking colored v2.2.0 [INFO] [stderr] Compiling quote v1.0.40 [INFO] [stderr] Checking clap_builder v4.5.34 [INFO] [stderr] Checking parking_lot_core v0.9.10 [INFO] [stderr] Checking signal-hook-registry v1.4.2 [INFO] [stderr] Checking socket2 v0.5.8 [INFO] [stderr] Checking mio v1.0.3 [INFO] [stderr] Checking dirs-sys v0.4.1 [INFO] [stderr] Checking http-body v0.4.6 [INFO] [stderr] Checking filetime v0.2.25 [INFO] [stderr] Checking uuid v1.16.0 [INFO] [stderr] Checking dirs v5.0.1 [INFO] [stderr] Checking indexmap v2.8.0 [INFO] [stderr] Compiling syn v2.0.100 [INFO] [stderr] Checking parking_lot v0.12.3 [INFO] [stderr] Checking chrono v0.4.40 [INFO] [stderr] Checking xattr v1.5.0 [INFO] [stderr] Checking tempfile v3.19.1 [INFO] [stderr] Checking tar v0.4.44 [INFO] [stderr] Checking which v4.4.2 [INFO] [stderr] Compiling synstructure v0.13.1 [INFO] [stderr] Compiling zerofrom-derive v0.1.6 [INFO] [stderr] Compiling yoke-derive v0.7.5 [INFO] [stderr] Compiling zerovec-derive v0.10.3 [INFO] [stderr] Compiling displaydoc v0.2.5 [INFO] [stderr] Compiling icu_provider_macros v1.5.0 [INFO] [stderr] Compiling serde_derive v1.0.219 [INFO] [stderr] Compiling futures-macro v0.3.31 [INFO] [stderr] Compiling tokio-macros v2.5.0 [INFO] [stderr] Compiling pin-project-internal v1.1.10 [INFO] [stderr] Compiling thiserror-impl v1.0.69 [INFO] [stderr] Compiling clap_derive v4.5.32 [INFO] [stderr] Compiling serde_repr v0.1.20 [INFO] [stderr] Compiling async-trait v0.1.88 [INFO] [stderr] Checking tokio v1.44.1 [INFO] [stderr] Checking pin-project v1.1.10 [INFO] [stderr] Checking zerofrom v0.1.6 [INFO] [stderr] Checking thiserror v1.0.69 [INFO] [stderr] Checking yoke v0.7.5 [INFO] [stderr] Checking futures-util v0.3.31 [INFO] [stderr] Checking zerovec v0.10.4 [INFO] [stderr] Checking clap v4.5.34 [INFO] [stderr] Checking tinystr v0.7.6 [INFO] [stderr] Checking icu_collections v1.5.0 [INFO] [stderr] Checking icu_locid v1.5.0 [INFO] [stderr] Checking icu_provider v1.5.0 [INFO] [stderr] Checking icu_locid_transform v1.5.0 [INFO] [stderr] Checking icu_properties v1.5.1 [INFO] [stderr] Checking futures-executor v0.3.31 [INFO] [stderr] Checking futures v0.3.31 [INFO] [stderr] Checking serde_with v2.3.3 [INFO] [stderr] Checking serde_urlencoded v0.7.1 [INFO] [stderr] Checking serde_yaml v0.9.34+deprecated [INFO] [stderr] Checking icu_normalizer v1.5.0 [INFO] [stderr] Checking tokio-util v0.7.14 [INFO] [stderr] Checking idna_adapter v1.2.0 [INFO] [stderr] Checking idna v1.0.3 [INFO] [stderr] Checking h2 v0.3.26 [INFO] [stderr] Checking url v2.5.4 [INFO] [stderr] Checking bollard-stubs v1.42.0-rc.7 [INFO] [stderr] Checking hyper v0.14.32 [INFO] [stderr] Checking hyperlocal v0.8.0 [INFO] [stderr] Checking bollard v0.14.0 [INFO] [stderr] Checking wrkflw v0.1.0 (/opt/rustwide/workdir) [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/evaluator.rs:25:8 [INFO] [stdout] | [INFO] [stdout] 25 | if !workflow.get("name").is_some() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `workflow.get("name").is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `if let` since only the `Ok` variant of the iterator element is used [INFO] [stdout] --> src/executor/docker.rs:132:9 [INFO] [stdout] | [INFO] [stdout] 132 | / for log_result in logs { [INFO] [stdout] 133 | | if let Ok(log) = log_result { [INFO] [stdout] 134 | | match log { [INFO] [stdout] 135 | | bollard::container::LogOutput::StdOut { message } => { [INFO] [stdout] ... | [INFO] [stdout] 144 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] help: try `.flatten()` and remove the `if let` statement in the for loop [INFO] [stdout] --> src/executor/docker.rs:133:13 [INFO] [stdout] | [INFO] [stdout] 133 | / if let Ok(log) = log_result { [INFO] [stdout] 134 | | match log { [INFO] [stdout] 135 | | bollard::container::LogOutput::StdOut { message } => { [INFO] [stdout] 136 | | stdout.push_str(&String::from_utf8_lossy(&message)); [INFO] [stdout] ... | [INFO] [stdout] 143 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_flatten [INFO] [stdout] = note: `#[warn(clippy::manual_flatten)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 132 ~ for log in logs.into_iter().flatten() { [INFO] [stdout] 133 + match log { [INFO] [stdout] 134 + bollard::container::LogOutput::StdOut { message } => { [INFO] [stdout] 135 + stdout.push_str(&String::from_utf8_lossy(&message)); [INFO] [stdout] 136 + } [INFO] [stdout] 137 + bollard::container::LogOutput::StdErr { message } => { [INFO] [stdout] 138 + stderr.push_str(&String::from_utf8_lossy(&message)); [INFO] [stdout] 139 + } [INFO] [stdout] 140 + _ => {} [INFO] [stdout] 141 + } [INFO] [stdout] 142 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant name ends with the enum's name [INFO] [stdout] --> src/executor/engine.rs:105:5 [INFO] [stdout] | [INFO] [stdout] 105 | ExecutionError(String), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stdout] = note: `#[warn(clippy::enum_variant_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: all variants have the same postfix: `Error` [INFO] [stdout] --> src/executor/engine.rs:97:1 [INFO] [stdout] | [INFO] [stdout] 97 | / pub enum ExecutionError { [INFO] [stdout] 98 | | #[error("Parse error: {0}")] [INFO] [stdout] 99 | | ParseError(String), [INFO] [stdout] ... | [INFO] [stdout] 108 | | IoError(#[from] std::io::Error), [INFO] [stdout] 109 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: remove the postfixes and use full paths to the variants instead of glob imports [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stdout] --> src/executor/engine.rs:121:14 [INFO] [stdout] | [INFO] [stdout] 121 | runtime: &Box, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&dyn ContainerRuntime` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stdout] = note: `#[warn(clippy::borrowed_box)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stdout] --> src/executor/engine.rs:170:14 [INFO] [stdout] | [INFO] [stdout] 170 | runtime: &Box, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&dyn ContainerRuntime` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stdout] --> src/executor/engine.rs:198:14 [INFO] [stdout] | [INFO] [stdout] 198 | runtime: &Box, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&dyn ContainerRuntime` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stdout] --> src/executor/engine.rs:303:14 [INFO] [stdout] | [INFO] [stdout] 303 | runtime: &Box, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&dyn ContainerRuntime` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (8/7) [INFO] [stdout] --> src/executor/engine.rs:298:1 [INFO] [stdout] | [INFO] [stdout] 298 | / async fn execute_step( [INFO] [stdout] 299 | | step: &crate::parser::workflow::Step, [INFO] [stdout] 300 | | step_idx: usize, [INFO] [stdout] 301 | | job_env: &HashMap, [INFO] [stdout] ... | [INFO] [stdout] 306 | | verbose: bool, [INFO] [stdout] 307 | | ) -> Result { [INFO] [stdout] | |_______________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] = note: `#[warn(clippy::too_many_arguments)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/executor/engine.rs:341:26 [INFO] [stdout] | [INFO] [stdout] 341 | let output = format!("Emulated checkout: Copied current directory to workspace"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"Emulated checkout: Copied current directory to workspace".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] = note: `#[warn(clippy::useless_format)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for copying elements [INFO] [stdout] --> src/executor/engine.rs:416:22 [INFO] [stdout] | [INFO] [stdout] 416 | &cmd.iter().map(|s| *s).collect::>(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: consider calling the dedicated `copied` method: `cmd.iter().copied()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] = note: `#[warn(clippy::map_clone)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stdout] --> src/executor/engine.rs:595:14 [INFO] [stdout] | [INFO] [stdout] 595 | runtime: &Box, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&dyn ContainerRuntime` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/executor/environment.rs:33:15 [INFO] [stdout] | [INFO] [stdout] 33 | .args(&["remote", "get-url", "origin"]) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `["remote", "get-url", "origin"]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] = note: `#[warn(clippy::needless_borrows_for_generic_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/executor/environment.rs:99:15 [INFO] [stdout] | [INFO] [stdout] 99 | .args(&["rev-parse", "HEAD"]) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `["rev-parse", "HEAD"]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/executor/environment.rs:112:15 [INFO] [stdout] | [INFO] [stdout] 112 | .args(&["symbolic-ref", "--short", "HEAD"]) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `["symbolic-ref", "--short", "HEAD"]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: all variants have the same postfix: `Failed` [INFO] [stdout] --> src/runtime/container.rs:29:1 [INFO] [stdout] | [INFO] [stdout] 29 | / pub enum ContainerError { [INFO] [stdout] 30 | | ImagePullFailed(String), [INFO] [stdout] 31 | | ImageBuildFailed(String), [INFO] [stdout] 32 | | ContainerStartFailed(String), [INFO] [stdout] 33 | | ContainerExecutionFailed(String), [INFO] [stdout] 34 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: remove the postfixes and use full paths to the variants instead of glob imports [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `if let` since only the `Ok` variant of the iterator element is used [INFO] [stdout] --> src/runtime/emulation.rs:66:21 [INFO] [stdout] | [INFO] [stdout] 66 | / for entry in fs::read_dir(host_path).expect("Failed to read source directory") { [INFO] [stdout] 67 | | if let Ok(entry) = entry { [INFO] [stdout] 68 | | let source = entry.path(); [INFO] [stdout] 69 | | let dest = target_path.join(source.file_name().unwrap()); [INFO] [stdout] ... | [INFO] [stdout] 78 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] help: try `.flatten()` and remove the `if let` statement in the for loop [INFO] [stdout] --> src/runtime/emulation.rs:67:25 [INFO] [stdout] | [INFO] [stdout] 67 | / if let Ok(entry) = entry { [INFO] [stdout] 68 | | let source = entry.path(); [INFO] [stdout] 69 | | let dest = target_path.join(source.file_name().unwrap()); [INFO] [stdout] ... | [INFO] [stdout] 77 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_flatten [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 66 ~ for entry in fs::read_dir(host_path).expect("Failed to read source directory").flatten() { [INFO] [stdout] 67 + let source = entry.path(); [INFO] [stdout] 68 + let dest = target_path.join(source.file_name().unwrap()); [INFO] [stdout] 69 + [INFO] [stdout] 70 + if source.is_file() { [INFO] [stdout] 71 + fs::copy(&source, &dest).expect("Failed to copy file"); [INFO] [stdout] 72 + } else { [INFO] [stdout] 73 + // We could make this recursive if needed [INFO] [stdout] 74 + fs::create_dir_all(&dest).expect("Failed to create subdirectory"); [INFO] [stdout] 75 + } [INFO] [stdout] 76 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is only used to index `cmd` [INFO] [stdout] --> src/runtime/emulation.rs:163:30 [INFO] [stdout] | [INFO] [stdout] 163 | for i in 1..idx + 1 { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] = note: `#[warn(clippy::needless_range_loop)]` on by default [INFO] [stdout] help: consider using an iterator [INFO] [stdout] | [INFO] [stdout] 163 - for i in 1..idx + 1 { [INFO] [stdout] 163 + for in cmd.iter().skip(1).take(idx) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&PathBuf` instead of `&Path` involves a new object where a slice will do [INFO] [stdout] --> src/ui.rs:27:31 [INFO] [stdout] | [INFO] [stdout] 27 | fn validate_single_file(path: &PathBuf, verbose: bool) { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 27 - fn validate_single_file(path: &PathBuf, verbose: bool) { [INFO] [stdout] 27 + fn validate_single_file(path: &Path, verbose: bool) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this boolean expression can be simplified [INFO] [stdout] --> src/evaluator.rs:25:8 [INFO] [stdout] | [INFO] [stdout] 25 | if !workflow.get("name").is_some() { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `workflow.get("name").is_none()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#nonminimal_bool [INFO] [stdout] = note: `#[warn(clippy::nonminimal_bool)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `if let` since only the `Ok` variant of the iterator element is used [INFO] [stdout] --> src/ui.rs:98:5 [INFO] [stdout] | [INFO] [stdout] 98 | / for entry in entries { [INFO] [stdout] 99 | | if let Ok(entry) = entry { [INFO] [stdout] 100 | | let path = entry.path(); [INFO] [stdout] 101 | | if path.is_file() && (is_workflow_file(&path) || !is_default_dir) { [INFO] [stdout] ... | [INFO] [stdout] 105 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] help: try `.flatten()` and remove the `if let` statement in the for loop [INFO] [stdout] --> src/ui.rs:99:9 [INFO] [stdout] | [INFO] [stdout] 99 | / if let Ok(entry) = entry { [INFO] [stdout] 100 | | let path = entry.path(); [INFO] [stdout] 101 | | if path.is_file() && (is_workflow_file(&path) || !is_default_dir) { [INFO] [stdout] 102 | | files_to_validate.push(path); [INFO] [stdout] 103 | | } [INFO] [stdout] 104 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_flatten [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 98 ~ for entry in entries.flatten() { [INFO] [stdout] 99 + let path = entry.path(); [INFO] [stdout] 100 + if path.is_file() && (is_workflow_file(&path) || !is_default_dir) { [INFO] [stdout] 101 + files_to_validate.push(path); [INFO] [stdout] 102 + } [INFO] [stdout] 103 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `if let` since only the `Ok` variant of the iterator element is used [INFO] [stdout] --> src/executor/docker.rs:132:9 [INFO] [stdout] | [INFO] [stdout] 132 | / for log_result in logs { [INFO] [stdout] 133 | | if let Ok(log) = log_result { [INFO] [stdout] 134 | | match log { [INFO] [stdout] 135 | | bollard::container::LogOutput::StdOut { message } => { [INFO] [stdout] ... | [INFO] [stdout] 144 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] | [INFO] [stdout] help: try `.flatten()` and remove the `if let` statement in the for loop [INFO] [stdout] --> src/executor/docker.rs:133:13 [INFO] [stdout] | [INFO] [stdout] 133 | / if let Ok(log) = log_result { [INFO] [stdout] 134 | | match log { [INFO] [stdout] 135 | | bollard::container::LogOutput::StdOut { message } => { [INFO] [stdout] 136 | | stdout.push_str(&String::from_utf8_lossy(&message)); [INFO] [stdout] ... | [INFO] [stdout] 143 | | } [INFO] [stdout] | |_____________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_flatten [INFO] [stdout] = note: `#[warn(clippy::manual_flatten)]` on by default [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 132 ~ for log in logs.into_iter().flatten() { [INFO] [stdout] 133 + match log { [INFO] [stdout] 134 + bollard::container::LogOutput::StdOut { message } => { [INFO] [stdout] 135 + stdout.push_str(&String::from_utf8_lossy(&message)); [INFO] [stdout] 136 + } [INFO] [stdout] 137 + bollard::container::LogOutput::StdErr { message } => { [INFO] [stdout] 138 + stderr.push_str(&String::from_utf8_lossy(&message)); [INFO] [stdout] 139 + } [INFO] [stdout] 140 + _ => {} [INFO] [stdout] 141 + } [INFO] [stdout] 142 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to use `.enumerate()` and immediately discard the index [INFO] [stdout] --> src/ui.rs:377:43 [INFO] [stdout] | [INFO] [stdout] 377 | for (_i, step) in job.steps.iter().enumerate() { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_enumerate_index [INFO] [stdout] = note: `#[warn(clippy::unused_enumerate_index)]` on by default [INFO] [stdout] help: remove the `.enumerate()` call [INFO] [stdout] | [INFO] [stdout] 377 - for (_i, step) in job.steps.iter().enumerate() { [INFO] [stdout] 377 + for step in job.steps.iter() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: variant name ends with the enum's name [INFO] [stdout] --> src/executor/engine.rs:105:5 [INFO] [stdout] | [INFO] [stdout] 105 | ExecutionError(String), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stdout] = note: `#[warn(clippy::enum_variant_names)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: all variants have the same postfix: `Error` [INFO] [stdout] --> src/executor/engine.rs:97:1 [INFO] [stdout] | [INFO] [stdout] 97 | / pub enum ExecutionError { [INFO] [stdout] 98 | | #[error("Parse error: {0}")] [INFO] [stdout] 99 | | ParseError(String), [INFO] [stdout] ... | [INFO] [stdout] 108 | | IoError(#[from] std::io::Error), [INFO] [stdout] 109 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: remove the postfixes and use full paths to the variants instead of glob imports [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stdout] --> src/executor/engine.rs:121:14 [INFO] [stdout] | [INFO] [stdout] 121 | runtime: &Box, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&dyn ContainerRuntime` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stdout] = note: `#[warn(clippy::borrowed_box)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/validators/jobs.rs:16:49 [INFO] [stdout] | [INFO] [stdout] 16 | if !job_config.contains_key(&Value::String("runs-on".to_string())) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `Value::String("runs-on".to_string())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/validators/jobs.rs:21:42 [INFO] [stdout] | [INFO] [stdout] 21 | match job_config.get(&Value::String("steps".to_string())) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `Value::String("steps".to_string())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stdout] --> src/executor/engine.rs:170:14 [INFO] [stdout] | [INFO] [stdout] 170 | runtime: &Box, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&dyn ContainerRuntime` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stdout] --> src/executor/engine.rs:198:14 [INFO] [stdout] | [INFO] [stdout] 198 | runtime: &Box, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&dyn ContainerRuntime` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/validators/jobs.rs:48:40 [INFO] [stdout] | [INFO] [stdout] 48 | job_config.get(&Value::String("needs".to_string())) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `Value::String("needs".to_string())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/validators/jobs.rs:52:59 [INFO] [stdout] | [INFO] [stdout] 52 | ... if !jobs_map.contains_key(&Value::String(need_str.to_string())) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `Value::String(need_str.to_string())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/validators/jobs.rs:61:40 [INFO] [stdout] | [INFO] [stdout] 61 | job_config.get(&Value::String("needs".to_string())) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `Value::String("needs".to_string())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/validators/jobs.rs:63:51 [INFO] [stdout] | [INFO] [stdout] 63 | if !jobs_map.contains_key(&Value::String(need.clone())) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `Value::String(need.clone())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/validators/steps.rs:5:30 [INFO] [stdout] | [INFO] [stdout] 5 | pub fn validate_steps(steps: &Vec, job_name: &str, result: &mut ValidationResult) { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 5 - pub fn validate_steps(steps: &Vec, job_name: &str, result: &mut ValidationResult) { [INFO] [stdout] 5 + pub fn validate_steps(steps: &[Value], job_name: &str, result: &mut ValidationResult) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/validators/steps.rs:8:39 [INFO] [stdout] | [INFO] [stdout] 8 | if !step_map.contains_key(&Value::String("name".to_string())) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `Value::String("name".to_string())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/validators/steps.rs:9:43 [INFO] [stdout] | [INFO] [stdout] 9 | && !step_map.contains_key(&Value::String("uses".to_string())) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `Value::String("uses".to_string())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/validators/steps.rs:10:43 [INFO] [stdout] | [INFO] [stdout] 10 | && !step_map.contains_key(&Value::String("run".to_string())) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `Value::String("run".to_string())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/validators/steps.rs:20:38 [INFO] [stdout] | [INFO] [stdout] 20 | if step_map.contains_key(&Value::String("uses".to_string())) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `Value::String("uses".to_string())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/validators/steps.rs:21:42 [INFO] [stdout] | [INFO] [stdout] 21 | && step_map.contains_key(&Value::String("run".to_string())) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `Value::String("run".to_string())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/validators/steps.rs:31:61 [INFO] [stdout] | [INFO] [stdout] 31 | if let Some(Value::String(uses)) = step_map.get(&Value::String("uses".to_string())) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `Value::String("uses".to_string())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stdout] --> src/executor/engine.rs:303:14 [INFO] [stdout] | [INFO] [stdout] 303 | runtime: &Box, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&dyn ContainerRuntime` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: this function has too many arguments (8/7) [INFO] [stdout] --> src/executor/engine.rs:298:1 [INFO] [stdout] | [INFO] [stdout] 298 | / async fn execute_step( [INFO] [stdout] 299 | | step: &crate::parser::workflow::Step, [INFO] [stdout] 300 | | step_idx: usize, [INFO] [stdout] 301 | | job_env: &HashMap, [INFO] [stdout] ... | [INFO] [stdout] 306 | | verbose: bool, [INFO] [stdout] 307 | | ) -> Result { [INFO] [stdout] | |_______________________________________^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#too_many_arguments [INFO] [stdout] = note: `#[warn(clippy::too_many_arguments)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/validators/triggers.rs:51:31 [INFO] [stdout] | [INFO] [stdout] 51 | event_map.get(&Value::String("schedule".to_string())) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `Value::String("schedule".to_string())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: useless use of `format!` [INFO] [stdout] --> src/executor/engine.rs:341:26 [INFO] [stdout] | [INFO] [stdout] 341 | let output = format!("Emulated checkout: Copied current directory to workspace"); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: consider using `.to_string()`: `"Emulated checkout: Copied current directory to workspace".to_string()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#useless_format [INFO] [stdout] = note: `#[warn(clippy::useless_format)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/validators/triggers.rs:56:46 [INFO] [stdout] | [INFO] [stdout] 56 | ... schedule_map.get(&Value::String("cron".to_string())) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `Value::String("cron".to_string())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you are using an explicit closure for copying elements [INFO] [stdout] --> src/executor/engine.rs:416:22 [INFO] [stdout] | [INFO] [stdout] 416 | &cmd.iter().map(|s| *s).collect::>(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: consider calling the dedicated `copied` method: `cmd.iter().copied()` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#map_clone [INFO] [stdout] = note: `#[warn(clippy::map_clone)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to be trying to use `&Box`. Consider using just `&T` [INFO] [stdout] --> src/executor/engine.rs:595:14 [INFO] [stdout] | [INFO] [stdout] 595 | runtime: &Box, [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^ help: try: `&dyn ContainerRuntime` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#borrowed_box [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/executor/environment.rs:33:15 [INFO] [stdout] | [INFO] [stdout] 33 | .args(&["remote", "get-url", "origin"]) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `["remote", "get-url", "origin"]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] = note: `#[warn(clippy::needless_borrows_for_generic_args)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/executor/environment.rs:99:15 [INFO] [stdout] | [INFO] [stdout] 99 | .args(&["rev-parse", "HEAD"]) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `["rev-parse", "HEAD"]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/executor/environment.rs:112:15 [INFO] [stdout] | [INFO] [stdout] 112 | .args(&["symbolic-ref", "--short", "HEAD"]) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `["symbolic-ref", "--short", "HEAD"]` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: all variants have the same postfix: `Failed` [INFO] [stdout] --> src/runtime/container.rs:29:1 [INFO] [stdout] | [INFO] [stdout] 29 | / pub enum ContainerError { [INFO] [stdout] 30 | | ImagePullFailed(String), [INFO] [stdout] 31 | | ImageBuildFailed(String), [INFO] [stdout] 32 | | ContainerStartFailed(String), [INFO] [stdout] 33 | | ContainerExecutionFailed(String), [INFO] [stdout] 34 | | } [INFO] [stdout] | |_^ [INFO] [stdout] | [INFO] [stdout] = help: remove the postfixes and use full paths to the variants instead of glob imports [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#enum_variant_names [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `if let` since only the `Ok` variant of the iterator element is used [INFO] [stdout] --> src/runtime/emulation.rs:66:21 [INFO] [stdout] | [INFO] [stdout] 66 | / for entry in fs::read_dir(host_path).expect("Failed to read source directory") { [INFO] [stdout] 67 | | if let Ok(entry) = entry { [INFO] [stdout] 68 | | let source = entry.path(); [INFO] [stdout] 69 | | let dest = target_path.join(source.file_name().unwrap()); [INFO] [stdout] ... | [INFO] [stdout] 78 | | } [INFO] [stdout] | |_____________________^ [INFO] [stdout] | [INFO] [stdout] help: try `.flatten()` and remove the `if let` statement in the for loop [INFO] [stdout] --> src/runtime/emulation.rs:67:25 [INFO] [stdout] | [INFO] [stdout] 67 | / if let Ok(entry) = entry { [INFO] [stdout] 68 | | let source = entry.path(); [INFO] [stdout] 69 | | let dest = target_path.join(source.file_name().unwrap()); [INFO] [stdout] ... | [INFO] [stdout] 77 | | } [INFO] [stdout] | |_________________________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_flatten [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 66 ~ for entry in fs::read_dir(host_path).expect("Failed to read source directory").flatten() { [INFO] [stdout] 67 + let source = entry.path(); [INFO] [stdout] 68 + let dest = target_path.join(source.file_name().unwrap()); [INFO] [stdout] 69 + [INFO] [stdout] 70 + if source.is_file() { [INFO] [stdout] 71 + fs::copy(&source, &dest).expect("Failed to copy file"); [INFO] [stdout] 72 + } else { [INFO] [stdout] 73 + // We could make this recursive if needed [INFO] [stdout] 74 + fs::create_dir_all(&dest).expect("Failed to create subdirectory"); [INFO] [stdout] 75 + } [INFO] [stdout] 76 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the loop variable `i` is only used to index `cmd` [INFO] [stdout] --> src/runtime/emulation.rs:163:30 [INFO] [stdout] | [INFO] [stdout] 163 | for i in 1..idx + 1 { [INFO] [stdout] | ^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_range_loop [INFO] [stdout] = note: `#[warn(clippy::needless_range_loop)]` on by default [INFO] [stdout] help: consider using an iterator [INFO] [stdout] | [INFO] [stdout] 163 - for i in 1..idx + 1 { [INFO] [stdout] 163 + for in cmd.iter().skip(1).take(idx) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&PathBuf` instead of `&Path` involves a new object where a slice will do [INFO] [stdout] --> src/ui.rs:27:31 [INFO] [stdout] | [INFO] [stdout] 27 | fn validate_single_file(path: &PathBuf, verbose: bool) { [INFO] [stdout] | ^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] = note: `#[warn(clippy::ptr_arg)]` on by default [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 27 - fn validate_single_file(path: &PathBuf, verbose: bool) { [INFO] [stdout] 27 + fn validate_single_file(path: &Path, verbose: bool) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary `if let` since only the `Ok` variant of the iterator element is used [INFO] [stdout] --> src/ui.rs:98:5 [INFO] [stdout] | [INFO] [stdout] 98 | / for entry in entries { [INFO] [stdout] 99 | | if let Ok(entry) = entry { [INFO] [stdout] 100 | | let path = entry.path(); [INFO] [stdout] 101 | | if path.is_file() && (is_workflow_file(&path) || !is_default_dir) { [INFO] [stdout] ... | [INFO] [stdout] 105 | | } [INFO] [stdout] | |_____^ [INFO] [stdout] | [INFO] [stdout] help: try `.flatten()` and remove the `if let` statement in the for loop [INFO] [stdout] --> src/ui.rs:99:9 [INFO] [stdout] | [INFO] [stdout] 99 | / if let Ok(entry) = entry { [INFO] [stdout] 100 | | let path = entry.path(); [INFO] [stdout] 101 | | if path.is_file() && (is_workflow_file(&path) || !is_default_dir) { [INFO] [stdout] 102 | | files_to_validate.push(path); [INFO] [stdout] 103 | | } [INFO] [stdout] 104 | | } [INFO] [stdout] | |_________^ [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#manual_flatten [INFO] [stdout] help: try [INFO] [stdout] | [INFO] [stdout] 98 ~ for entry in entries.flatten() { [INFO] [stdout] 99 + let path = entry.path(); [INFO] [stdout] 100 + if path.is_file() && (is_workflow_file(&path) || !is_default_dir) { [INFO] [stdout] 101 + files_to_validate.push(path); [INFO] [stdout] 102 + } [INFO] [stdout] 103 + } [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: you seem to use `.enumerate()` and immediately discard the index [INFO] [stdout] --> src/ui.rs:377:43 [INFO] [stdout] | [INFO] [stdout] 377 | for (_i, step) in job.steps.iter().enumerate() { [INFO] [stdout] | ^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#unused_enumerate_index [INFO] [stdout] = note: `#[warn(clippy::unused_enumerate_index)]` on by default [INFO] [stdout] help: remove the `.enumerate()` call [INFO] [stdout] | [INFO] [stdout] 377 - for (_i, step) in job.steps.iter().enumerate() { [INFO] [stdout] 377 + for step in job.steps.iter() { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/validators/jobs.rs:16:49 [INFO] [stdout] | [INFO] [stdout] 16 | if !job_config.contains_key(&Value::String("runs-on".to_string())) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `Value::String("runs-on".to_string())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/validators/jobs.rs:21:42 [INFO] [stdout] | [INFO] [stdout] 21 | match job_config.get(&Value::String("steps".to_string())) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `Value::String("steps".to_string())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/validators/jobs.rs:48:40 [INFO] [stdout] | [INFO] [stdout] 48 | job_config.get(&Value::String("needs".to_string())) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `Value::String("needs".to_string())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/validators/jobs.rs:52:59 [INFO] [stdout] | [INFO] [stdout] 52 | ... if !jobs_map.contains_key(&Value::String(need_str.to_string())) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `Value::String(need_str.to_string())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/validators/jobs.rs:61:40 [INFO] [stdout] | [INFO] [stdout] 61 | job_config.get(&Value::String("needs".to_string())) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `Value::String("needs".to_string())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/validators/jobs.rs:63:51 [INFO] [stdout] | [INFO] [stdout] 63 | if !jobs_map.contains_key(&Value::String(need.clone())) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `Value::String(need.clone())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: writing `&Vec` instead of `&[_]` involves a new object where a slice will do [INFO] [stdout] --> src/validators/steps.rs:5:30 [INFO] [stdout] | [INFO] [stdout] 5 | pub fn validate_steps(steps: &Vec, job_name: &str, result: &mut ValidationResult) { [INFO] [stdout] | ^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#ptr_arg [INFO] [stdout] help: change this to [INFO] [stdout] | [INFO] [stdout] 5 - pub fn validate_steps(steps: &Vec, job_name: &str, result: &mut ValidationResult) { [INFO] [stdout] 5 + pub fn validate_steps(steps: &[Value], job_name: &str, result: &mut ValidationResult) { [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/validators/steps.rs:8:39 [INFO] [stdout] | [INFO] [stdout] 8 | if !step_map.contains_key(&Value::String("name".to_string())) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `Value::String("name".to_string())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/validators/steps.rs:9:43 [INFO] [stdout] | [INFO] [stdout] 9 | && !step_map.contains_key(&Value::String("uses".to_string())) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `Value::String("uses".to_string())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/validators/steps.rs:10:43 [INFO] [stdout] | [INFO] [stdout] 10 | && !step_map.contains_key(&Value::String("run".to_string())) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `Value::String("run".to_string())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/validators/steps.rs:20:38 [INFO] [stdout] | [INFO] [stdout] 20 | if step_map.contains_key(&Value::String("uses".to_string())) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `Value::String("uses".to_string())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/validators/steps.rs:21:42 [INFO] [stdout] | [INFO] [stdout] 21 | && step_map.contains_key(&Value::String("run".to_string())) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `Value::String("run".to_string())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/validators/steps.rs:31:61 [INFO] [stdout] | [INFO] [stdout] 31 | if let Some(Value::String(uses)) = step_map.get(&Value::String("uses".to_string())) { [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `Value::String("uses".to_string())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/validators/triggers.rs:51:31 [INFO] [stdout] | [INFO] [stdout] 51 | event_map.get(&Value::String("schedule".to_string())) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `Value::String("schedule".to_string())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the borrowed expression implements the required traits [INFO] [stdout] --> src/validators/triggers.rs:56:46 [INFO] [stdout] | [INFO] [stdout] 56 | ... schedule_map.get(&Value::String("cron".to_string())) [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ help: change this to: `Value::String("cron".to_string())` [INFO] [stdout] | [INFO] [stdout] = help: for further information visit https://rust-lang.github.io/rust-clippy/master/index.html#needless_borrows_for_generic_args [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished `dev` profile [unoptimized + debuginfo] target(s) in 44.45s [INFO] running `Command { std: "docker" "inspect" "e6269157e1ff3a4dc8eb8bb19ffbc41ca228f91aa23c6f38b3f6e3773b1c36df", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "e6269157e1ff3a4dc8eb8bb19ffbc41ca228f91aa23c6f38b3f6e3773b1c36df", kill_on_drop: false }` [INFO] [stdout] e6269157e1ff3a4dc8eb8bb19ffbc41ca228f91aa23c6f38b3f6e3773b1c36df