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 开发工具
698 每月下载次数
17KB
251 代码行
rust-latest
这是一个用于确定Rust工具链最新版本的命令行工具。对于 nightly
,它会找到包括所有内置组件(如 clippy
、rustfmt
、rls
等)在内的最新版本。
$ 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
文件的第一个步骤是决定你想使用哪个发布通道。这个决定超出了这个工具的范畴,但你可以在这里和这里了解stable
、beta
和nightly
之间的差异。
下一步,这个工具会为你解决,是决定使用该通道中的哪个发布版本。当你没有特别偏好的版本,或者只想使用最新版本时,你如何确定实际的标签?
如果你使用的是nightly
,你可以查看rustup
组件历史记录并从中选择一个日期。通常我更喜欢包含所有包组件的nightly构建,因为我在开发中需要clippy
、rls
和rust-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