Skip to content

crate home MSRV bumped in "compatible version" #14944

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
tisonkun opened this issue Dec 17, 2024 · 15 comments
Closed

crate home MSRV bumped in "compatible version" #14944

tisonkun opened this issue Dec 17, 2024 · 15 comments
Labels
C-bug Category: bug S-triage Status: This issue is waiting on initial triage.

Comments

@tisonkun
Copy link

tisonkun commented Dec 17, 2024

Problem

error: rustc 1.80.0 is not supported by the following package:
  [email protected] requires rustc 1.81

I have this dependency in cargo.toml:

home = "0.5.9"

Such breaking changes deserve 0.6.0.

Steps

Image

Possible Solution(s)

yank 0.5.11 and release 0.6.0

Notes

No response

Version


@tisonkun tisonkun added C-bug Category: bug S-triage Status: This issue is waiting on initial triage. labels Dec 17, 2024
@tisonkun tisonkun changed the title MSRV bumped in "compatible version" crate home MSRV bumped in "compatible version" Dec 17, 2024
@tisonkun
Copy link
Author

cc @ehuss

@epage
Copy link
Contributor

epage commented Dec 17, 2024

MSRV bumps are generally recognized as minor, not major changes, see https://doc.rust-lang.org/nightly/cargo/reference/semver.html#env-new-rust

@epage
Copy link
Contributor

epage commented Dec 17, 2024

We previously discussed this in #13270. Per that discussion, I'm closing this.

@epage epage closed this as not planned Won't fix, can't repro, duplicate, stale Dec 17, 2024
@tisonkun
Copy link
Author

tisonkun commented Dec 17, 2024

MSRV bumps are generally recognized as minor, not major changes, see https://doc.rust-lang.org/nightly/cargo/reference/semver.html#env-new-rust

This is reasonable, while I'd ask a bit details on cargo's mechanism.

When I specify "foo = 1.2", will it gets auto resolved to 1.3.x? That is, when I specify "home = 0.5.9", it could be resolved to "home = 0.5.11". But if we specify "foo = 1.2", it would only resolves to 1.2.x?

If so, then "minor changes" means different things in these two situations.

@tisonkun
Copy link
Author

That said, you can bump MSRV when bump 1.2 to 1.3, and build won't break with the most common dependency string. But from 0.5.9 to 0.5.11 does.

@tisonkun
Copy link
Author

I see https://doc.rust-lang.org/nightly/cargo/reference/resolver.html#semver-compatibility

bitflags = "1.1"  # meaning `>=1.1.0,<2.0.0`

Then I'm fine with Rust's definition now .. let me see how to get used to it.

@epage
Copy link
Contributor

epage commented Dec 17, 2024

foo = "1.2" means foo = ">=1.2.0,<2.0.0".

Build environment changes are not usually included in semver in Rust. If not, Rust itself would be on v20 or so with glibc, AndroidNDK, Linux Kernel, etc changes. Foundational crates like serde could never change their MSRV. Builds would be slower due to the duplication of dependencies. Users with higher MSRV can be stuck on old, buggy, less featureful versions of their transitive deps because one dep has a lower MSRV.

In 1.84 we'll have an opt-in MSRV-aware resolver. You can have it generate your lockfile and than use whatever version of Cargo you want.

@tisonkun
Copy link
Author

In 1.84 we'll have an opt-in MSRV-aware resolver. You can have it generate your lockfile and than use whatever version of Cargo you want.

Cool! Is there a tracking issue I can watch on?

@weihanglo
Copy link
Member

This was stabilized in 1.83 in #14639.

Hum… the version here seems wrong, @epage ?

@epage
Copy link
Contributor

epage commented Dec 17, 2024

Missed that one

@Ari-suhyeon
Copy link

The sudden version restriction is causing problems with my builds too.
The problem is that it's not easy to find which crate has which dependencies...
Debug works fine, release doesn't.
Does anyone know how to fix it?

@weihanglo
Copy link
Member

The problem is that it's not easy to find which crate has which dependencies...

cargo tree -i home could help.
See https://doc.rust-lang.org/nightly/cargo/reference/features.html#inspecting-resolved-features.

Does anyone know how to fix it?

cargo update home --precise 0.5.9. See also harryfei/which-rs#103 (comment)

@Ari-suhyeon
Copy link

I don't use the home crate directly.
Of course I have used the cargo tree -i home command, but it only specifies home v0.5.9.
I use polars and kube-rs, and those crates also specify v0.5.9.
I am building docker, and the image uses FROM rust:1.78.0-slim.

@Ari-suhyeon
Copy link

I've identified the cause.
(The dependency was created because kube-client and polars are using home crate)
When I do a Docker build, the Cargo.lock file doesn't exist, so you create it and build it.
In the existing Cargo.lock file on my local PC, the home version was specified as '0.5.9', so it worked fine, but when I built without the lock file, it was changed to '0.5.11' and the lock file was created.
It seems that 0.5.9 and 0.5.11 are compatible according to SemVer compatibility, so it changes to 0.5.11.
https://doc.rust-lang.org/cargo/reference/resolver.html

lorenzleutgeb pushed a commit to lorenzleutgeb/heartwood that referenced this issue Apr 28, 2025
In trying to rebuild the radicle 1.1.0 version now (2025-02-26), some months after 1.1.0 has been released, I see in my pipelines that the `cargo install [email protected]` instruction is now failing.

This is because `[email protected]` has been released and this *patch* version bump requires a newer version of rust (1.81) (0.5.9 was ok with 1.80). See rust-lang/cargo#14944 for more details.

Adding `--locked` here prevents this issue from happening in the future.

Importantly: newer versions of other crates being picked up by cargo here means the build isn't bit-for-bit reproducible.

The error itself is:

```
[1/2] STEP 14/17: RUN curl -sSf -o zig.tar.xz         https://ziglang.org/download/0.12.0/zig-linux-x86_64-0.12.0.tar.xz &&     curl -sSf -o zig.tar.xz.minisig https://ziglang.org/download/0.12.0/zig-linux-x86_64-0.12.0.tar.xz.minisig &&     minisign -Vm zig.tar.xz -P RWSGOq2NVecA2UPNdBUZykf1CCb147pkmdtYxgb3Ti+JO/wCYvhbAb/U &&     xz -d -c zig.tar.xz | tar -x &&     mv zig-linux-x86_64-0.12.0/zig /usr/bin/zig &&     mv zig-linux-x86_64-0.12.0/lib /usr/lib/zig &&     cargo install [email protected]
Signature and comment signature verified
Trusted comment: timestamp:1713604063   file:zig-linux-x86_64-0.12.0.tar.xz     hashed
    Updating crates.io index
 Downloading crates ...
  Downloaded cargo-zigbuild v0.18.3
  Installing cargo-zigbuild v0.18.3
    Updating crates.io index
     Locking 83 packages to latest compatible versions
      Adding cargo-platform v0.1.9 (latest: v0.2.0)
      Adding cargo-zigbuild v0.18.3 (latest: v0.19.8)
      Adding cargo_metadata v0.18.1 (latest: v0.19.1)
      Adding dirs v5.0.1 (latest: v6.0.0)
      Adding dirs-sys v0.4.1 (latest: v0.5.0)
      Adding fs-err v2.11.0 (latest: v3.1.0)
      Adding getrandom v0.2.15 (latest: v0.3.1)
      Adding linux-raw-sys v0.4.15 (latest: v0.9.0)
      Adding redox_users v0.4.6 (latest: v0.5.0)
      Adding target-lexicon v0.12.16 (latest: v0.13.2)
      Adding thiserror v1.0.69 (latest: v2.0.11)
      Adding thiserror-impl v1.0.69 (latest: v2.0.11)
      Adding wasi v0.11.0+wasi-snapshot-preview1 (latest: v0.14.1+wasi-0.2.3)
      Adding which v6.0.3 (latest: v7.0.2)
      Adding windows-sys v0.48.0 (latest: v0.59.0)
      Adding windows-targets v0.48.5 (latest: v0.53.0)
      Adding windows-targets v0.52.6 (latest: v0.53.0)
      Adding windows_aarch64_gnullvm v0.48.5 (latest: v0.53.0)
      Adding windows_aarch64_gnullvm v0.52.6 (latest: v0.53.0)
      Adding windows_aarch64_msvc v0.48.5 (latest: v0.53.0)
      Adding windows_aarch64_msvc v0.52.6 (latest: v0.53.0)
      Adding windows_i686_gnu v0.48.5 (latest: v0.53.0)
      Adding windows_i686_gnu v0.52.6 (latest: v0.53.0)
      Adding windows_i686_gnullvm v0.52.6 (latest: v0.53.0)
      Adding windows_i686_msvc v0.48.5 (latest: v0.53.0)
      Adding windows_i686_msvc v0.52.6 (latest: v0.53.0)
      Adding windows_x86_64_gnu v0.48.5 (latest: v0.53.0)
      Adding windows_x86_64_gnu v0.52.6 (latest: v0.53.0)
      Adding windows_x86_64_gnullvm v0.48.5 (latest: v0.53.0)
      Adding windows_x86_64_gnullvm v0.52.6 (latest: v0.53.0)
      Adding windows_x86_64_msvc v0.48.5 (latest: v0.53.0)
      Adding windows_x86_64_msvc v0.52.6 (latest: v0.53.0)
      Adding winsafe v0.0.19 (latest: v0.0.22)
 Downloading crates ...
  Downloaded anstyle v1.0.10
  Downloaded anstyle-query v1.1.2
  Downloaded cargo-platform v0.1.9
  Downloaded bitflags v2.8.0
  Downloaded cargo_metadata v0.18.1
  Downloaded is_terminal_polyfill v1.70.1
  Downloaded option-ext v0.2.0
  Downloaded scroll_derive v0.12.0
  Downloaded strsim v0.11.1
  Downloaded autocfg v1.4.0
  Downloaded anstream v0.6.18
  Downloaded camino v1.1.9
  Downloaded dirs-sys v0.4.1
  Downloaded heck v0.5.0
  Downloaded itoa v1.0.14
  Downloaded home v0.5.11
  Downloaded thiserror-impl v1.0.69
  Downloaded which v6.0.3
  Downloaded utf8parse v0.2.2
  Downloaded either v1.14.0
  Downloaded colorchoice v1.0.3
  Downloaded clap_lex v0.7.4
  Downloaded errno v0.3.10
  Downloaded dirs v5.0.1
  Downloaded fs-err v2.11.0
  Downloaded shlex v1.3.0
  Downloaded rustc_version v0.4.1
  Downloaded path-slash v0.2.1
  Downloaded thiserror v1.0.69
  Downloaded terminal_size v0.4.1
  Downloaded anstyle-parse v0.2.6
  Downloaded clap_derive v4.5.28
  Downloaded target-lexicon v0.12.16
  Downloaded fat-macho v0.4.9
  Downloaded semver v1.0.25
  Downloaded scroll v0.12.0
  Downloaded log v0.4.26
  Downloaded proc-macro2 v1.0.93
  Downloaded quote v1.0.38
  Downloaded anyhow v1.0.96
  Downloaded clap v4.5.31
  Downloaded ryu v1.0.19
  Downloaded serde_derive v1.0.218
  Downloaded unicode-ident v1.0.17
  Downloaded serde v1.0.218
  Downloaded memchr v2.7.4
  Downloaded serde_json v1.0.139
  Downloaded clap_builder v4.5.31
  Downloaded goblin v0.9.3
  Downloaded syn v2.0.98
  Downloaded rustix v0.38.44
  Downloaded libc v0.2.170
  Downloaded plain v0.2.3
  Downloaded cargo-options v0.7.5
  Downloaded linux-raw-sys v0.4.15
error: failed to compile `cargo-zigbuild v0.18.3`, intermediate artifacts can be found at `/tmp/cargo-installZ4q2vb`.
To reuse those artifacts with a future compilation, set the environment variable `CARGO_TARGET_DIR` to that path.

Caused by:
  rustc 1.80.1 is not supported by the following package:
    [email protected] requires rustc 1.81
  Try re-running `cargo install` with `--locked`
Error: building at STEP "RUN curl -sSf -o zig.tar.xz         https://ziglang.org/download/0.12.0/zig-linux-x86_64-0.12.0.tar.xz &&     curl -sSf -o zig.tar.xz.minisig https://ziglang.org/download/0.12.0/zig-linux-x86_64-0.12.0.tar.xz.minisig &&     minisign -Vm zig.tar.xz -P RWSGOq2NVecA2UPNdBUZykf1CCb147pkmdtYxgb3Ti+JO/wCYvhbAb/U &&     xz -d -c zig.tar.xz | tar -x &&     mv zig-linux-x86_64-0.12.0/zig /usr/bin/zig &&     mv zig-linux-x86_64-0.12.0/lib /usr/lib/zig &&     cargo install [email protected]": while running runtime: exit status 101
```

Signed-off-by: Yorgos Saslis <[email protected]>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
C-bug Category: bug S-triage Status: This issue is waiting on initial triage.
Projects
None yet
Development

No branches or pull requests

4 participants