#最新版本 #工具链 #版本 #最新 #渠道 #发布 #命令行工具

应用 rust-latest

一个用于确定Rust工具链最新版本的命令行工具

5个稳定版本

1.4.1 2022年4月1日
1.4.0 2020年4月10日
1.3.0 2019年5月23日
1.2.2 2019年5月8日

#1419 in 开发工具

Download history 253/week @ 2024-03-12 218/week @ 2024-03-19 63/week @ 2024-03-26 77/week @ 2024-04-02 176/week @ 2024-04-09 223/week @ 2024-04-16 128/week @ 2024-04-23 51/week @ 2024-04-30 123/week @ 2024-05-07 227/week @ 2024-05-14 228/week @ 2024-05-21 136/week @ 2024-05-28 62/week @ 2024-06-04 237/week @ 2024-06-11 224/week @ 2024-06-18 167/week @ 2024-06-25

698 每月下载次数

MIT 许可证

17KB
251 代码行

rust-latest

这是一个用于确定Rust工具链最新版本的命令行工具。对于 nightly,它会找到包括所有内置组件(如 clippyrustfmtrls 等)在内的最新版本。

$ rust-latest
1.34.1
$ rust-latest -c nightly
nightly-2019-05-04

该工具实际上 下载工具链;这项工作仍然留给 rustup。此工具旨在用于设置项目的 rust-toolchain 文件。下面了解更多相关信息。

$ rustup show active-toolchain
stable-x86_64-unknown-linux-gnu (default)
$ rust-latest -c nightly > rust-toolchain
$ rustup show active-toolchain
nightly-2019-05-04-x86_64-unknown-linux-gnu (overridden by '/path/to/project/rust-toolchain')

问题

Rust语言更新频繁,这既有好的一面也有不好的一面。好处是语言中不断添加新特性。坏处是(尤其是在 nightly 版本中),这些频繁的更改可能会在没有更改代码的情况下破坏你的构建!

幸运的是,rustup 允许你通过 rust-toolchain 文件 为项目锁定Rust版本。这可以实现以下功能

首先,它阻止了当你在系统上安装新版本时,项目构建使用的Rust版本发生变化。这允许你精确控制何时升级该项目使用的Rust版本。它为项目提供了一个类似于“虚拟环境”的东西,独立于系统级的Rust工具链(《rustup default)。

其次,它允许你声明项目已知兼容的Rust版本,这与 Cargo.toml 为你的依赖项所做的工作类似。这与 Cargo.toml 有所不同,因为你使用特定的锁定版本而不是Semver范围,但它具有类似的作用。

第三,它确保了你的项目可以重复构建:重复构建意味着无论构建者是你、另一个贡献者、一个月后的你,还是CI服务器,都将使用完全相同(或兼容集)的依赖和工具链。

rust-toolchain听起来不错!”你说,“但我该往里面放什么?”这正是这个工具旨在解决的问题。

解决方案

决定将什么放入你的rust-toolchain文件的第一个步骤是决定你想使用哪个发布通道。这个决定超出了这个工具的范畴,但你可以在这里这里了解stablebetanightly之间的差异。

下一步,这个工具会为你解决,是决定使用该通道中的哪个发布版本。当你没有特别偏好的版本,或者只想使用最新版本时,你如何确定实际的标签?

如果你使用的是nightly,你可以查看rustup组件历史记录并从中选择一个日期。通常我更喜欢包含所有包组件的nightly构建,因为我在开发中需要clippyrlsrust-src。因此,我会查找表格中最后一个所有这些组件都有绿色方框的日期。但是,如果包含该包的最后一个发布版本比一周前还旧,它就不会显示在表格中。此外,并不是每天都有nightly发布。

如果你使用的是stable,你可以查看Rust发布历史以获取要使用的发布版本号。

我从未真正使用过beta,所以我实际上并不确定你通常会如何找到它的发布列表。

但我不想做任何手动工作!我想有一个能够自动执行所有这些检查的工具,这正是rust-latest所做。给定一个发布通道、所需组件的列表和构建目标的列表,它会找到该通道上最后一个包含每个目标所有组件的发布版本。为了使用户更容易使用,它实际上检查包含除一些特定平台的组件之外的所有组件的发布。如果你在这些平台上运行此工具并指定--target current,它将检测这种情况并包含这些组件。默认情况下,该工具将在最多90天内查看stable通道,以找到包含所有一级目标组件的发布。

用法

安装此工具就像使用cargo install rust-latest一样简单!

$ rust-latest --help
rust-latest 1.3.0
Daniel Beckwith <[email protected]>
Determines the last known complete build of a Rust toolchain.

USAGE:
    rust-latest [FLAGS] [OPTIONS]

FLAGS:
    -d, --force-date    Whether date-stamped toolchains like stable-2019-04-25 should be used instead of version numbers
                        for stable releases.
    -h, --help          Prints help information
    -V, --version       Prints version information

OPTIONS:
    -c, --channel <channel>    Release channel to use. [default: stable]
    -a, --max-age <max_age>    Number of days back to search for viable builds. This is relative to the latest release
                               of the channel. [default: 90]
    -p, --profile <profile>    Which package profile to use. [default: default]  [possible values: complete, default,
                               minimal]
    -t, --targets <targets>    Which set of targets to filter by, either all Tier-1 targets or only the current target.
                               [default: all]  [possible values: all, current]

当你运行该工具时,它将输出可以在你的rust-toolchain文件中使用的工具链名称。

$ rust-latest
1.34.1
$ rust-latest --force-date
stable-2019-04-25
$ rust-latest -c nightly
nightly-2019-05-04

请注意,此工具需要互联网连接,并且可能需要一段时间才能完成,因为它必须下载每个可能达到几兆字节的发布清单。它必须查找更早的可行发布版本,则所需时间更长。

贡献

如果你在使用此工具时遇到任何问题或有改进的想法,请创建一个问题,我会尽快回答你!

依赖关系

~9–25MB
~355K SLoC