#cargo-subcommand #cargo #cargo-check #cargo-build #testing-cargo #subcommand #testing

app cargo-minimal-versions

Cargo 子命令,用于正确使用 -Z minimal-versions 和 -Z direct-minimal-versions

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日

#236Cargo 插件

Download history 262/week @ 2024-04-22 272/week @ 2024-04-29 59/week @ 2024-05-06 51/week @ 2024-05-13 141/week @ 2024-05-20 131/week @ 2024-05-27 67/week @ 2024-06-03 131/week @ 2024-06-10 191/week @ 2024-06-17 138/week @ 2024-06-24 79/week @ 2024-07-01 126/week @ 2024-07-08 314/week @ 2024-07-15 148/week @ 2024-07-22 123/week @ 2024-07-29 36/week @ 2024-08-05

675 每月下载量
用于 telegram_bots_api

Apache-2.0 或 MIT

67KB
1.5K SLoC

cargo-minimal-versions

crates.io license github actions

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.tomlCargo.lock 文件,并在完成后恢复。您在运行时对这些文件所做的任何更改将不会保留。

通常,具有 publish = false 的 crate 不需要最小版本检查。您可以通过使用 --ignore-private 标志跳过这些 crate。

cargo minimal-versions check --workspace --ignore-private

如果存在路径依赖项,上述方法可能在您发布 crate 时错过问题(例如,tokio-rs/tokio#4376tokio-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-versionscargo check,您至少需要运行三个进程。

如果我记得正确的话,cargo check -Z minimal-versions 实际上并没有做任何事情。它需要分开成 cargo update -Z minimal-versionscargo check

此外,开发依赖项可能会提高版本要求。理想情况下,在运行 cargo update -Z minimal-versions 之前将其删除。(另外,请注意,Cargo.lock 实际上是在工作区内部共享的。然而,据我所知,目前还没有解决这个问题的方法。)

此外,由于货物的功能集成,使用cargo checkcargo build-p--package)或--workspace--all)或虚拟清单运行是不正确的。为了正确处理此问题,您需要由cargo hack等子命令提供的工空间处理。

cargo-minimal-versions解决了这些问题中的大多数,并使得运行带有-Z minimal-versions的cargo命令变得容易。

有关剩余问题的详细信息,请参阅#1#6

安装

先决条件

cargo-minimal-versions需要夜间工具链(以运行cargo update -Z minimal-versionscargo update -Z direct-minimal-versions)和cargo-hack(以正确运行cargo checkcargo 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