Skip to content
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

dist: bump rustup version to 1.28.0 #4041

Closed
wants to merge 6 commits into from

Conversation

rami3l
Copy link
Member

@rami3l rami3l commented Oct 6, 2024

This is the 1st PR for the 1.28.0 release according to our release process.

Checklist

  • Bump version in the manifest.
  • Update the changelog.
  • Draft the release blog post (Not required, since we're doing a beta release).

1.28.0 - 2024-10-07

This new release might be one of rustup's biggest updates in quite a while. In the making since mid-2023, it has combined a significant amount of new features and internal cleanups.

The headlines for this release are:

  1. BREAKING: Rustup will no longer automatically install the active toolchain if it is currently uninstalled pr#3225 pr#3948 pr#3985
    • To ensure its installation, run rustup toolchain install with no arguments pr#3983
    • TIP: The following command installs the active toolchain both before and after this change
      rustup show active-toolchain || rustup toolchain install
      # Or, on older versions of PowerShell:
      rustup show active-toolchain; if ($LASTEXITCODE -ne 0) { rustup toolchain install }
  2. BREAKING: When creating executable proxy links, Rustup will now try symlinks first and fall back to hardlinks, as opposed to the hardlink-first policy in previous versions pr#4023
  3. BREAKING: Installing a host-incompatible toolchain via rustup toolchain install or rustup default will now be rejected without explicitly adding --force-non-host pr#4028
  4. As part of rustup's downloader simplification plan, reqwest-rustls-tls is now our new default download backend pr#3798
    • RUSTUP_USE_CURL and RUSTUP_USE_RUSTLS environment variables remain valid in this new version, but the default value of RUSTUP_USE_RUSTLS has been changed to 1
    • Rustup now uses rustls-platform-verifier when rustls is activated for better platform compatibility pr#3903
    • Rustup's TLS backend when using rustls has been changed from ring to aws-lc-rs to support P521 signatures pr#3898
    • The reqwest-default-tls feature flag is now renamed reqwest-native-tls pr#3888
  5. The new RUSTUP_LOG environment variable behaves similarly to RUSTC_LOG and CARGO_LOG, and has replaced RUSTUP_DEBUG for richer diagnostics powered by tracing. See the relevant section from the dev guide for more details pr#3803 pr#3875 pr#3879
  6. Rustup now officially supports the following host platforms:

In addition to all of the above, we have also made the following adjustments:

Changed

  • Rustup has now been migrated to a tokio-based async application pr#3367
  • rustup-init and rustup's CLI argument parsers have been rewritten using clap_derive, eliminating a series of inconsistencies pr#3814 pr#3596

(to be finished)

@rami3l rami3l added this to the 1.28.0 milestone Oct 6, 2024
@rami3l
Copy link
Member Author

rami3l commented Oct 6, 2024

@djc Just to make sure that we're on the same page, are you still working on the release notes for this time? No pressure, I'm just trying to prevent duplicate labor :)

@@ -1,5 +1,73 @@
# Changelog

## [1.28.0] - 2024-10-07

## What's Changed
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

For now it's just hand-picked lines from the GitHub-generated changelog...

Copy link
Member Author

@rami3l rami3l Oct 6, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

GitHub Copilot gives an interesting summary for this changelog diff. Might be an acceptable starting point...

The summary of the changelog in PR#4041 is categorized as follows:

New Features

  • Make reqwest/rustls the new default pr#3798
  • Reflect the download/TLS backends in the user agent pr#3815
  • Add --quiet to rustup toolchain list and friends pr#3862
  • Use rustls-platform-verifier pr#3903
  • Add hint to run rustup self when err desc is self pr#3901
  • Set log level to WARN on -q if RUSTUP_LOG is unset pr#3911
  • Add loongarch64-unknown-linux-musl support pr#3921
  • Warn when removing the default/active toolchain pr#3924
  • Refine suggestions regarding manifest checksum mismatches pr#3923
  • Install the active toolchain by default on rustup toolchain install pr#3983
  • Remove implicit toolchain installation pr#3985
  • Use aws-lc instead of ring pr#3898
  • Set log level to INFO/DEBUG on --quiet/--verbose if RUSTUP_LOG is unset pr#3987

Bug Fixes

  • Work around hyper hang issue by adjusting reqwest config pr#3855
  • Fix misleading "uninstalled toolchain" notification pr#3869
  • Handle the possible unavailability of /proc in rustup-init.sh pr#3800
  • Don't install toolchain on rustup --version pr#3948
  • Return ExitCode(1) when update() fails pr#3952
  • Warn if host is incompatible with the toolchain in rustup default pr#3980
  • Consider possible renames in Component::try_new() pr#3991

Refactors

  • Rewrite rustup-init with clap_derive pr#3814
  • Rewrite rustup with clap_derive pr#3596
  • Refactor around use of Process pr#3860
  • Pass Process around explicitly pr#3871
  • Deny installing a host-incompatible toolchain w/o --force-non-host pr#4028
  • Replace winreg with windows-registry pr#3896

Windows-Specific Improvements

  • Replace remaining winapi usage with windows-sys pr#3802
  • Add Windows Arm64 to Other Installation Methods pr#3854
  • Finalise Rustup Windows Arm64 support pr#3840

Miscellaneous

  • Reduce code duplication for show commands pr#3813
  • Make rustup show output info in a more logical order pr#3225
  • Stop showing ETA after download is complete pr#3827
  • Switch from sync to a tokio runtime pr#3367
  • Consistently add context with file path when parsing fails pr#3853
  • Simplify process interface pr#3764
  • Use serde to encode/decode various TOML formats pr#3864
  • Ship tracing and friends by default pr#3803
  • Inline errors, rename TLS backend pr#3888
  • Mention RUSTUP_LOG and console-based tracing in dev guide pr#3879
  • Allow rustup doc to search for unions pr#4004
  • Try symlinking proxies first, falling back to hardlinking if that fails pr#4023

You can view more details here.

Copy link
Contributor

@djc djc left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is looking good! Sorry for dropping the ball on moving this forward.

Probably should also mention that we added @ChrisDenton as a team member during this release cycle.

@@ -134,7 +134,7 @@ regex = "1"
members = ["download"]

[workspace.package]
version = "1.27.1"
version = "1.28.0"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

So you previously suggested calling this 2.0 on Discord.

I'm wondering if we should use Rustup v2.0.0 instead of v1.28.0. The changes since this May have been dramatic and, maybe this way we can better communicate the breakage regarding #3635.

I said:

Yeah, might make sense

@rbtcollins said:

I have no objection. We have not done strict semver thus far

Here you're updating to 1.28.0 instead of 2.0.0, so has your thinking changed?


## New Contributors

- @kennykerr made their first contribution in https://github.com/rust-lang/rustup/pull/3802
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think I'd prefer to skip this section, IMO it's mostly irrelevant to the CHANGELOG audience.

@djc
Copy link
Contributor

djc commented Oct 7, 2024

1.28.0 - 2024-10-07

This new release might be one of rustup's biggest updates in quite a while. In the making since mid-2023, it has combined a significant amount of new features and internal cleanups.

Instead of "one of [..] biggest updates", just say "a big update"? I'm not sure it feels like a lot of new features to me, and I'd like to work the word "modernization" in there somewhere (to represent async/derived clap/rustls by default/tracing/serde).

The headlines for this release are:

1. **BREAKING:** Rustup will no longer automatically install the active toolchain if it is currently uninstalled [pr#3225](https://github.com/rust-lang/rustup/pull/3225) [pr#3948](https://github.com/rust-lang/rustup/pull/3948) [pr#3985](https://github.com/rust-lang/rustup/pull/3985)
   
   * To ensure its installation, run `rustup toolchain install` with **no** arguments [pr#3983](https://github.com/rust-lang/rustup/pull/3983)
   * **TIP:** The following command installs the active toolchain both before and after this change
     ```shell
     rustup show active-toolchain || rustup toolchain install
     # Or, on older versions of PowerShell:
     rustup show active-toolchain; if ($LASTEXITCODE -ne 0) { rustup toolchain install }
     ```

2. **BREAKING:** When creating executable proxy links, Rustup will now try symlinks first and fall back to hardlinks, as opposed to the hardlink-first policy in previous versions [pr#4023](https://github.com/rust-lang/rustup/pull/4023)

How/why is this breaking? Not sure it's worth calling out at this level.

3. **BREAKING:** Installing a host-incompatible toolchain via `rustup toolchain install` or `rustup default` will now be rejected without explicitly adding `--force-non-host` [pr#4028](https://github.com/rust-lang/rustup/pull/4028)

4. As part of rustup's downloader simplification plan, `reqwest-rustls-tls` is now our new default download backend [pr#3798](https://github.com/rust-lang/rustup/pull/3798)
   
   * `RUSTUP_USE_CURL` and `RUSTUP_USE_RUSTLS` environment variables remain valid in this new version, but the default value of `RUSTUP_USE_RUSTLS` has been changed to `1`
   * Rustup now uses `rustls-platform-verifier` when `rustls` is activated for better platform compatibility [pr#3903](https://github.com/rust-lang/rustup/pull/3903)
   * Rustup's TLS backend when using `rustls` has been changed from `ring` to `aws-lc-rs` to support P521 signatures [pr#3898](https://github.com/rust-lang/rustup/pull/3898)
   * The `reqwest-default-tls` feature flag is now renamed `reqwest-native-tls` [pr#3888](https://github.com/rust-lang/rustup/pull/3888)

Hmm, not sure the Cargo feature flag is noteworthy (enough) for this? I imagine most people use the normal install method and are thus never exposed to our feature setup.

5. The new `RUSTUP_LOG` environment variable behaves similarly to `RUSTC_LOG` and `CARGO_LOG`, and has replaced `RUSTUP_DEBUG` for richer diagnostics powered by `tracing`. See [the relevant section from the dev guide](https://rust-lang.github.io/rustup/dev-guide/tracing.html) for more details [pr#3803](https://github.com/rust-lang/rustup/pull/3803) [pr#3875](https://github.com/rust-lang/rustup/pull/3875) [pr#3879](https://github.com/rust-lang/rustup/pull/3879)

Maybe briefly mention why we don't use RUST_LOG for this like most things.

6. Rustup now officially supports the following host platforms:
   
   * `aarch64-pc-windows-msvc`: see https://win.rustup.rs/aarch64 for the native binary [pr#3840](https://github.com/rust-lang/rustup/pull/3840) [pr#3854](https://github.com/rust-lang/rustup/pull/3854)
   * `loongarch64-unknown-linux-musl` [pr#3921](https://github.com/rust-lang/rustup/pull/3921)

In addition to all of the above, we have also made the following adjustments:

Changed

* Rustup has now been migrated to a `tokio`-based async application [pr#3367](https://github.com/rust-lang/rustup/pull/3367)
  
  * The `process` internal APIs underwent significant refactoring to make this easier [pr#3764](https://github.com/rust-lang/rustup/pull/3764) [pr#3860](https://github.com/rust-lang/rustup/pull/3860) [pr#3871](https://github.com/rust-lang/rustup/pull/3871) [pr#3877](https://github.com/rust-lang/rustup/pull/3877)

* `rustup-init` and `rustup`'s CLI argument parsers have been rewritten using `clap_derive`, eliminating a series of inconsistencies [pr#3814](https://github.com/rust-lang/rustup/pull/3814) [pr#3596](https://github.com/rust-lang/rustup/pull/3596)

Not sure the internal changes are worth mentioning here, although I might be misunderstanding how you want to use this content. I think there are three levels of detail:

  1. Called out in the blog post
  2. Called out in high-level release notes
  3. Mentioned in the detailed changelog

For these internal changes, I think they should definitely not be in the blog post, and maybe should not even be in the high-level release notes, for the simple reason that there should not be much impact on the user.

@rami3l
Copy link
Member Author

rami3l commented Oct 25, 2024

@djc I think it'd be better to close my PR first when you are working on the release notes.

I definitely agree that the headlines should, above all, be user-facing, although it still think it might be worth it to give credits to internal changes like the VSCode team has done in the "Engineering" section, maybe near the end of the release notes.

@rami3l rami3l closed this Oct 25, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants