trailofbits / dylint

Run Rust lints from dynamic libraries
https://blog.trailofbits.com/2021/11/09/write-rust-lints-without-forking-clippy/
Apache License 2.0
401 stars 21 forks source link

Issues after upgrading: cannot satisfy dependencies so <dependency> only shows up once #1339

Closed SuperFluffy closed 1 month ago

SuperFluffy commented 1 month ago

I have used cargo dylint upgrade to go from dylint 2.6.1 to 3.1.2 and clippy-utils ac4c2094a6030530661bee3876e0228ddfeb6b8b to a95afe2d0a2051d97b723b0b197393b7811bc4e4. I have also used cargo intall cargo-dylint dylint-link to upgrade these binaries.

After doing so I am no longer able to compile my lints from my workspace root nor from within the lint crate directory.

Here is an excerpt of the output of my CI (see for the full thing https://github.com/astriaorg/astria/actions/runs/10940685186/job/30373647540?pr=1523#step:7:97):

Running `cargo dylint --all --workspace` in CI (ubuntu 2204) ``` error: cannot satisfy dependencies so `rustc_driver` only shows up once | = help: having upstream crates all available in one format will likely make this go away = note: `rustc_driver` was unavailable as a static crate, preventing fully static linking = help: `feature(rustc_private)` is needed to link to the compiler's `rustc_driver` library error: cannot satisfy dependencies so `core` only shows up once | = help: having upstream crates all available in one format will likely make this go away = help: `feature(rustc_private)` is needed to link to the compiler's `rustc_driver` library error: cannot satisfy dependencies so `compiler_builtins` only shows up once | = help: having upstream crates all available in one format will likely make this go away = help: `feature(rustc_private)` is needed to link to the compiler's `rustc_driver` library error: cannot satisfy dependencies so `rustc_std_workspace_core` only shows up once | = help: having upstream crates all available in one format will likely make this go away = help: `feature(rustc_private)` is needed to link to the compiler's `rustc_driver` library ``` And here is the relevant section in CI: https://github.com/astriaorg/astria/blob/c751c249f7d2b2077a174a0ab746981c2e9aab4a/.github/workflows/test.yml#L245-L276

And below is what happens if I build locally. Some extra details:

❯ cargo dylint --version
cargo-dylint 3.1.2
❯ cd lint/tracing_debug_field/
❯ cargo --version
cargo 1.83.0-nightly (c1fa840a8 2024-08-29)
Same problem locally on macOS ``` Building workspace metadata entry `tracing_debug_field` Finished `release` profile [optimized] target(s) in 0.14s Building driver for toolchain `nightly-2024-09-05-aarch64-apple-darwin` Updating crates.io index Locking 43 packages to latest compatible versions Adding windows-sys v0.52.0 (latest: v0.59.0) Compiling memchr v2.7.4 Compiling serde v1.0.210 Compiling anyhow v1.0.89 Compiling regex-syntax v0.8.4 Compiling log v0.4.22 Compiling libc v0.2.158 Compiling utf8parse v0.2.2 Compiling rustversion v1.0.17 Compiling serde_json v1.0.128 Compiling anstyle v1.0.8 Compiling itoa v1.0.11 Compiling colorchoice v1.0.2 Compiling anstyle-parse v0.2.5 Compiling cfg-if v1.0.0 Compiling is_terminal_polyfill v1.70.1 Compiling ryu v1.0.18 Compiling anstyle-query v1.1.1 Compiling libloading v0.8.5 Compiling humantime v2.1.0 Compiling anstream v0.6.15 Compiling aho-corasick v1.1.3 Compiling regex-automata v0.4.7 Compiling dylint_internal v3.1.2 Compiling regex v1.10.6 Compiling env_filter v0.1.2 Compiling env_logger v0.11.5 Compiling dylint_driver v3.1.2 Compiling dylint_driver-nightly-2024-09-05-aarch64-apple-darwin v0.1.0 (/private/var/folders/h2/qr5r_fyx2653wqbqh73vcjv40000gn/T/.tmpz22bEF) error: cannot satisfy dependencies so `rustc_driver` only shows up once | = help: having upstream crates all available in one format will likely make this go away = note: `rustc_driver` was unavailable as a static crate, preventing fully static linking = help: `feature(rustc_private)` is needed to link to the compiler's `rustc_driver` library error: cannot satisfy dependencies so `core` only shows up once | = help: having upstream crates all available in one format will likely make this go away = help: `feature(rustc_private)` is needed to link to the compiler's `rustc_driver` library error: cannot satisfy dependencies so `compiler_builtins` only shows up once | = help: having upstream crates all available in one format will likely make this go away = help: `feature(rustc_private)` is needed to link to the compiler's `rustc_driver` library error: cannot satisfy dependencies so `rustc_std_workspace_core` only shows up once | = help: having upstream crates all available in one format will likely make this go away = help: `feature(rustc_private)` is needed to link to the compiler's `rustc_driver` library error: cannot satisfy dependencies so `alloc` only shows up once | = help: having upstream crates all available in one format will likely make this go away = help: `feature(rustc_private)` is needed to link to the compiler's `rustc_driver` library error: cannot satisfy dependencies so `libc` only shows up once | = help: having upstream crates all available in one format will likely make this go away = help: `feature(rustc_private)` is needed to link to the compiler's `rustc_driver` library error: cannot satisfy dependencies so `unwind` only shows up once | = help: having upstream crates all available in one format will likely make this go away = help: `feature(rustc_private)` is needed to link to the compiler's `rustc_driver` library error: cannot satisfy dependencies so `cfg_if` only shows up once | = help: having upstream crates all available in one format will likely make this go away = help: `feature(rustc_private)` is needed to link to the compiler's `rustc_driver` library error: cannot satisfy dependencies so `miniz_oxide` only shows up once | = help: having upstream crates all available in one format will likely make this go away = help: `feature(rustc_private)` is needed to link to the compiler's `rustc_driver` library error: cannot satisfy dependencies so `adler` only shows up once | = help: having upstream crates all available in one format will likely make this go away = help: `feature(rustc_private)` is needed to link to the compiler's `rustc_driver` library error: cannot satisfy dependencies so `hashbrown` only shows up once | = help: having upstream crates all available in one format will likely make this go away = help: `feature(rustc_private)` is needed to link to the compiler's `rustc_driver` library error: cannot satisfy dependencies so `rustc_std_workspace_alloc` only shows up once | = help: having upstream crates all available in one format will likely make this go away = help: `feature(rustc_private)` is needed to link to the compiler's `rustc_driver` library error: cannot satisfy dependencies so `std_detect` only shows up once | = help: having upstream crates all available in one format will likely make this go away = help: `feature(rustc_private)` is needed to link to the compiler's `rustc_driver` library error: cannot satisfy dependencies so `rustc_demangle` only shows up once | = help: having upstream crates all available in one format will likely make this go away = help: `feature(rustc_private)` is needed to link to the compiler's `rustc_driver` library error: cannot satisfy dependencies so `addr2line` only shows up once | = help: having upstream crates all available in one format will likely make this go away = help: `feature(rustc_private)` is needed to link to the compiler's `rustc_driver` library error: cannot satisfy dependencies so `gimli` only shows up once | = help: having upstream crates all available in one format will likely make this go away = help: `feature(rustc_private)` is needed to link to the compiler's `rustc_driver` library error: cannot satisfy dependencies so `object` only shows up once | = help: having upstream crates all available in one format will likely make this go away = help: `feature(rustc_private)` is needed to link to the compiler's `rustc_driver` library error: cannot satisfy dependencies so `memchr` only shows up once | = help: having upstream crates all available in one format will likely make this go away = help: `feature(rustc_private)` is needed to link to the compiler's `rustc_driver` library error: cannot satisfy dependencies so `panic_unwind` only shows up once | = help: having upstream crates all available in one format will likely make this go away = help: `feature(rustc_private)` is needed to link to the compiler's `rustc_driver` library error: could not compile `dylint_driver-nightly-2024-09-05-aarch64-apple-darwin` (bin "dylint_driver-nightly-2024-09-05-aarch64-apple-darwin") due to 19 previous errors Error: command failed: cd "/var/folders/h2/qr5r_fyx2653wqbqh73vcjv40000gn/T/.tmpz22bEF" && env -u CARGO -u RUSTC -u RUSTUP_TOOLCHAIN RUSTFLAGS=" -C link-args=-Wl,-rpath,/Users/janis/.rustup/toolchains/nightly-2024-09-05-aarch64-apple-darwin/lib " "cargo" "build" ```

Tried a few things but I am not sure how to go from here. The overall toolchain (outside of dylint) is 1.81.0

smoelius commented 1 month ago

Thanks, @SuperFluffy. I ran into this yesterday myself. This PR fixes the problem: https://github.com/trailofbits/dylint/pull/1298. I will publish a new release before the end of the day.

SuperFluffy commented 1 month ago

@smoelius Lovely, thank you! I did see that PR but thought it might be something else because I also experience this on linux/github CI.

smoelius commented 1 month ago

3.2.0 is published, and it seems to resolve the problems I encountered yesterday.

Could I impose on you to try it out?

SuperFluffy commented 1 month ago

3.2.0 is published, and it seems to resolve the problems I encountered yesterday.

Could I impose on you to try it out?

It works again with 3.2.0, thank you very much for the quick fix!

smoelius commented 1 month ago

Thanks for testing!