29 个版本
0.1.28 | 2024年7月15日 |
---|---|
0.1.27 | 2024年3月19日 |
0.1.25 | 2024年2月10日 |
0.1.23 | 2023年12月16日 |
0.1.0 | 2021年12月28日 |
#236 在 Cargo 插件 中
675 每月下载量
用于 telegram_bots_api
67KB
1.5K SLoC
cargo-minimal-versions
Cargo 子命令,用于正确使用 -Z minimal-versions
和 -Z direct-minimal-versions
。
用法
点击显示选项列表
$ cargo minimal-versions --help
cargo-minimal-versions
Cargo subcommand for proper use of -Z minimal-versions and -Z direct-minimal-versions.
USAGE:
cargo minimal-versions <CARGO_SUBCOMMAND> [OPTIONS] [CARGO_OPTIONS]
CARGO_SUBCOMMANDS:
build
check
test
...
检查所有具有最小版本依赖的 crate
cargo minimal-versions check --workspace
注意:(如果 cargo-minimal-versions 确定这样做是进行正确最小版本检查所必需的)在运行时,cargo-minimal-versions 会修改 Cargo.toml
和 Cargo.lock
文件,并在完成后恢复。您在运行时对这些文件所做的任何更改将不会保留。
通常,具有 publish = false
的 crate 不需要最小版本检查。您可以通过使用 --ignore-private
标志跳过这些 crate。
cargo minimal-versions check --workspace --ignore-private
如果存在路径依赖项,上述方法可能在您发布 crate 时错过问题(例如,tokio-rs/tokio#4376,tokio-rs/tokio#4490)
通过使用 --detach-path-deps
标志,您可以在移除依赖项中的 path
字段后运行最小版本检查。
cargo minimal-versions check --workspace --ignore-private --detach-path-deps
--detach-path-deps
(--detach-path-deps=all
) 标志默认删除所有[^1] 路径字段。使用 --detach-path-deps=skip-exact
标志,您可以跳过删除具有精确版本要求的依赖项中的路径字段("=<version>"
)。例如,这对一个进程宏及其导出库的成对使用非常有用。
[^1]:如果既未指定版本、git也未指定路径,将发生错误,因此我们将删除所有指定了版本或git URL的依赖项的路径字段。
--direct (-Z direct-minimal-versions)
如果存在与 -Z minimum-versions
不兼容的依赖项,在这种情况下使用 -Z direct-minimal-versions
也是合理的,因为在这样的情况下很难维护 -Z minimum-versions
兼容性。
使用 --direct
标志,cargo-minimal-versions 使用 -Z direct-minimal-versions
而不是 -Z minimal-versions
。
cargo minimal-versions check --direct
请注意,使用 -Z direct-minimal-versions
可能会错过一些在使用 -Z minimal-versions
时可以找到的问题。然而,如果仅在一个特定版本的依赖项中存在问题,使用 -Z direct-minimal-versions
可能会发现之前错过的问题(因为解析的依赖项版本不同)。
详情
以通常方式使用 -Z minimal-versions
在许多情况下都不能正常工作。要正确使用带有 -Z minimal-versions
的 cargo check
,您至少需要运行三个进程。
如果我记得正确的话,
cargo check -Z minimal-versions
实际上并没有做任何事情。它需要分开成cargo update -Z minimal-versions
和cargo check
。此外,开发依赖项可能会提高版本要求。理想情况下,在运行
cargo update -Z minimal-versions
之前将其删除。(另外,请注意,Cargo.lock
实际上是在工作区内部共享的。然而,据我所知,目前还没有解决这个问题的方法。)
此外,由于货物的功能集成,使用cargo check
或cargo build
与-p
(--package
)或--workspace
(--all
)或虚拟清单运行是不正确的。为了正确处理此问题,您需要由cargo hack
等子命令提供的工空间处理。
cargo-minimal-versions解决了这些问题中的大多数,并使得运行带有-Z minimal-versions
的cargo命令变得容易。
安装
先决条件
cargo-minimal-versions需要夜间工具链(以运行cargo update -Z minimal-versions
或cargo update -Z direct-minimal-versions
)和cargo-hack(以正确运行cargo check
和cargo build
)。
rustup toolchain add nightly
cargo +stable install cargo-hack --locked
从源代码安装
cargo +stable install cargo-minimal-versions --locked
目前,安装cargo-minimal-versions需要rustc 1.70+。
cargo-minimal-versions通常可以使用比安装所需Rust版本旧的Cargo版本运行(例如cargo +1.59 minimal-versions check
)。
从预构建的二进制文件安装
您可以从发布页面下载预构建的二进制文件。预构建的二进制文件适用于macOS、Linux(gnu和musl)、Windows(静态可执行文件)、FreeBSD和illumos。
下载cargo-minimal-versions的脚本示例
# Get host target
host=$(rustc -vV | grep '^host:' | cut -d' ' -f2)
# Download binary and install to $HOME/.cargo/bin
curl --proto '=https' --tlsv1.2 -fsSL https://github.com/taiki-e/cargo-minimal-versions/releases/latest/download/cargo-minimal-versions-$host.tar.gz | tar xzf - -C "$HOME/.cargo/bin"
在GitHub Actions上
您可以使用taiki-e/install-action在Linux、macOS和Windows上安装预构建的二进制文件。这使得安装更快,并可能避免由上游更改引起的问题。
- uses: taiki-e/install-action@cargo-hack
- uses: taiki-e/install-action@cargo-minimal-versions
通过Homebrew
您可以从我们维护的Homebrew tap安装cargo-minimal-versions(x86_64/aarch64 macOS,x86_64/aarch64 Linux)。
brew install taiki-e/tap/cargo-minimal-versions
通过Scoop(Windows)
您可以从我们维护的Scoop bucket安装cargo-minimal-versions。
scoop bucket add taiki-e https://github.com/taiki-e/scoop-bucket
scoop install cargo-minimal-versions
通过cargo-binstall
您可以使用cargo-binstall安装cargo-minimal-versions。
cargo binstall cargo-minimal-versions
相关项目
- cargo-hack:提供用于测试和持续集成的各种有用选项的Cargo子命令。
- cargo-llvm-cov:用于轻松使用基于LLVM源代码的代码覆盖的Cargo子命令。
- cargo-config2:用于加载和解析Cargo配置的库。
许可证
许可证为Apache License 2.0或MIT许可证,您可任选其一。
除非您明确声明,否则根据Apache-2.0许可证定义的任何有意提交的、旨在包含在作品中的贡献,均将以上述方式双重许可,不附加任何额外条款或条件。
依赖关系
~3–11MB
~120K SLoC