rust-lang / rustup

The Rust toolchain installer
https://rust-lang.github.io/rustup/
Apache License 2.0
6.13k stars 882 forks source link

Tracking: Rustup should not perform implicit installations #3635

Closed jyn514 closed 1 month ago

jyn514 commented 9 months ago

Problem you are trying to solve

here is a transcript of a session with rustup

PS C:\Users\jyn\src\example> rustup toolchain list                              
nightly-x86_64-pc-windows-msvc (default)
1.74-x86_64-pc-windows-msvc
stage1
PS C:\Users\jyn\src\example> rustup uninstall nightly
info: uninstalling toolchain 'nightly-x86_64-pc-windows-msvc'
info: toolchain 'nightly-x86_64-pc-windows-msvc' uninstalled
PS C:\Users\jyn\src\example> rustup toolchain list   
1.74-x86_64-pc-windows-msvc
stage1
PS C:\Users\jyn\src\example> rustc
info: syncing channel updates for 'nightly-x86_64-pc-windows-msvc'
info: latest update on 2024-01-07, rust version 1.77.0-nightly (b6a8c762e 2024-01-06)
info: downloading component 'cargo'
^C
PS C:\Users\jyn\src\example> rustc +nightly
error: toolchain 'nightly-x86_64-pc-windows-msvc' is not installed
PS C:\Users\jyn\src\example> rustup --version
rustup 1.26.0 (5af9b9484 2023-04-05)
info: This is the version for the rustup toolchain manager, not the rustc compiler.
info: syncing channel updates for 'nightly-x86_64-pc-windows-msvc'

Proposed Solution & Progress

[The following behaviors of the current rustup should be changed:]

Notes

rustup 1.26.0 (5af9b9484 2023-04-05)

### Tasks
- [ ] #3319
- [ ] https://github.com/rust-lang/rustup/issues/2686
- [ ] https://github.com/rust-lang/rustup/issues/3943
- [ ] https://github.com/rust-lang/rustup/pull/3948
- [ ] #1397
- [ ] https://github.com/rust-lang/rustup/issues/3982
djc commented 1 month ago

tl;dr, I think this is being over-thought! do we have any actual data of people using main and being unhappy with it?

Well, it's a large change and I could see how people get frustrated with the experience hit (similar to @samestep). I think effectively no one is using main. But I guess we could just release it and see how it goes.

rami3l commented 1 month ago

I think effectively no one is using main.

@djc That's not entirely true: I use it as my daily driver :]

And from my experience, not many repos I work with use toolchain overrides, so I'm feeling okay anyway in this regard.

But I guess we could just release it and see how it goes.

We have a test driving phase to do before going live, so I hope this will help in terms of collecting user feedback.

djc commented 1 month ago

I think effectively no one is using main.

@djc That's not entirely true: I use it as my daily driver :]

Note the use of "effectively". 😉

djc commented 1 month ago

Okay, let's close this and see what happens during the beta period.

LukeMathWalker commented 4 weeks ago

I'm just catching up with this whole conversation as a person who routinely relies on rustup show in Docker files to trigger a toolchain installation according to what's inside the rust-toolchain.toml file. What would be the recommended upgrade path for me? What command should I invoke after this update?

I explicitly don't want to perform any compilation, so invoking cargo commands like check or build is not the way forward.

ChrisDenton commented 4 weeks ago

rustup install

rami3l commented 4 weeks ago

I'm just catching up with this whole conversation as a person who routinely relies on rustup show in Docker files to trigger a toolchain installation according to what's inside the rust-toolchain.toml file.

What would be the recommended upgrade path for me? What command should I invoke after this update?

I explicitly don't want to perform any compilation, so invoking cargo commands like check or build is not the way forward.

@LukeMathWalker You'd do rustup toolchain install/rustup install (without any arguments) to manually install the active toolchain starting from v1.28.0. I promise we'll deliver the new release notes with a huge emphasis on this change.

LukeMathWalker commented 4 weeks ago

I'm just catching up with this whole conversation as a person who routinely relies on rustup show in Docker files to trigger a toolchain installation according to what's inside the rust-toolchain.toml file. What would be the recommended upgrade path for me? What command should I invoke after this update? I explicitly don't want to perform any compilation, so invoking cargo commands like check or build is not the way forward.

You'd do rustup toolchain install (without any arguments) to manually install the active toolchain starting from v1.28.0. I promise we'll deliver the new release note with a huge emphasis on this change.

Has that been changed recently? Or was it always an option to invoke rustup toolchain install without any arguments? Because it is highly non-obvious if going off what's returned by rustup toolchain install --help.

rami3l commented 4 weeks ago

Has that been changed recently? Or was it always an option to invoke rustup toolchain install without any arguments? Because it is highly non-obvious if going off what's returned by rustup toolchain install --help.

@LukeMathWalker It's a recent change in https://github.com/rust-lang/rustup/pull/3983. The actual syntax is suggested by @ChrisDenton IIRC.

We have also updated the help message:

> rustup --version
rustup 1.27.1+445 (15a7ec40f 2024-09-09)
[..]

> rustup toolchain install --help
Install or update the given toolchains, or by default the active toolchain

Usage: rustup[EXE] toolchain install [OPTIONS] [TOOLCHAIN]...
[..]
rami3l commented 4 weeks ago

I am looking forward to this change, so thanks for working on it

re: breakage

Might I suggest adding the new behaviour (#3983), and then waiting a release or two before completely removing the implicit installs? My concern is having a path with some continuity; rustup toolchain install on <= 1.27.1 is an error, but after >= 1.28 it will be an error not to do so, leaving no grace period.

If there is need - perhaps some tool that is blocked waiting on the new behaviour - during the transitional period an extra flag could be added to opt-out of implicit installs, at the risk of some complexity. https://github.com/rust-lang/rustup/pull/3985#issuecomment-2342313221

@ickk It's a perfectly reasonable suggestion. Let's think about the available options together and find out how to do this properly.

rami3l commented 3 weeks ago

I am looking forward to this change, so thanks for working on it re: breakage Might I suggest adding the new behaviour (#3983), and then waiting a release or two before completely removing the implicit installs? My concern is having a path with some continuity; rustup toolchain install on <= 1.27.1 is an error, but after >= 1.28 it will be an error not to do so, leaving no grace period. If there is need - perhaps some tool that is blocked waiting on the new behaviour - during the transitional period an extra flag could be added to opt-out of implicit installs, at the risk of some complexity. #3985 (comment)

@ickk It's a perfectly reasonable suggestion. Let's think about the available options together and find out how to do this properly.

@ickk Do you think rustup show active-toolchain || rustup toolchain install will suffice?*

*: I'm not sure about the corresponding PowerShell syntax, maybe the following? (cc @ChrisDenton)

$(rustup show active-toolchain | Out-Host; $?) -or $(rustup toolchain install | Out-Host; $?)
ChrisDenton commented 3 weeks ago

What's wrong with using rustup show active-toolchain || rustup toolchain install in powershell?

rami3l commented 3 weeks ago

What's wrong with using rustup show active-toolchain || rustup toolchain install in powershell?

@ChrisDenton I did some more research; looks like that's a new syntax in PS7, and I must have been looking at some old literature. I'm not sure how we should properly suggest this for Windows users in general, is || widespread enough as for now?

ChrisDenton commented 3 weeks ago

Oh for old powershell I'd do it like:

rustup show active-toolchain; if ($LASTEXITCODE -ne 0) { rustup toolchain install }