1 个不稳定版本

使用旧的Rust 2015

0.1.0 2016年7月29日

#16 in #rustc-version

Download history 1192/week @ 2024-03-14 1132/week @ 2024-03-21 949/week @ 2024-03-28 727/week @ 2024-04-04 978/week @ 2024-04-11 1079/week @ 2024-04-18 940/week @ 2024-04-25 729/week @ 2024-05-02 881/week @ 2024-05-09 901/week @ 2024-05-16 908/week @ 2024-05-23 992/week @ 2024-05-30 684/week @ 2024-06-06 719/week @ 2024-06-13 747/week @ 2024-06-20 773/week @ 2024-06-27

3,035 每月下载量

MIT/Apache

24KB
336

cargo-when 构建状态 构建状态 Crates.io

Cargo命令根据rustc版本和环境条件条件运行。Cargo whenunless 命令可以帮助持续集成脚本,以及其他用途。

文档

提供了两个cargo命令,whenunlessunlesswhen 的否定条件,并具有完全相同的选项。以下是从 when 命令行帮助文档中的示例

Runs subsequent cargo command only when the specified options match the current rust compiler
version and environment.

USAGE:
    cargo when [OPTIONS] <CARGO SUBCOMMAND> [SUBCOMMAND OPTIONS]

FLAGS:
    -h, --help    Prints help information

OPTIONS:
    -c, --channel <CHANNEL>              Matches rustc release channel(s) [values: stable, beta,
                                            nightly]
    -x, --exists <ENV-VARIABLE>          Matches when environment variable(s) exist
    -e, --equals <ENV-VARIABLE=VALUE>    Matches when environment variable(s) equals specified
                                            value(s), e.g. RUST_SRC_PATH=~/rustsrc
    -v, --version <VERSION>              Matches rustc version(s) using same rules and version
                                            syntax as Cargo

To specify a set of multiple possible matches for an option, separate the values by a comma and no
spaces. At least one match option is required. If multiple match options are present, each option
specifies an additional match requirement for any of the set of possible values for that option.

示例

基本用法

如果您只想在nightly rust编译器上编译和测试crate,并使用特殊的 "nightly" 特性,请使用此命令

cargo when --channel nightly build --features nightly && cargo when --channel nightly test

如果rust编译器不是nightly编译器,cargo命令将简单地返回零退出代码表示成功,而实际上并没有运行 buildtest cargo命令。

相反,如果您知道您的crate在nightly上无法正确构建,只想跳过nightly,以下两个示例中的任何一个都将有效

cargo unless --channel nightly build
cargo when --channel stable,beta build

多个要求

您可以为 whenunless 命令提供多个匹配要求。假设您有一个只在稳定Rust 1.5或更高版本上构建的crate。您可以使用以下命令

cargo when --channel stable --version 1.5 build

版本匹配选项的行为与指定Cargo依赖项完全相同;它默认为菱形版本要求,这意味着任何稳定Rust编译器版本 >= 1.5.0 且 <= 2.0 的都将调用 cargo build。否则,nightly、beta和1.0 Rust将无法构建。您可以为您的Rust编译器使用任何Cargo的版本依赖项规范!(确保在版本字符串包含特殊shell字符时添加双引号。)

在以下示例中,该crate在Rust 1.4之前工作,然后在1.5及更高版本中修复

cargo when --version "<1.4,1.5" build --release

环境变量

您可以使用 whenunless 来检查环境变量,以确定是否应该运行 cargo 命令。以下示例仅在 RUST_SRC_PATH 变量被设置为当前进程环境中的任何值时,才会运行 crate 可执行文件,因为该可执行文件需要此变量作为 srcpath 选项的来源。

cargo when --exists RUST_SRC_PATH run --srcpath="$RUST_SRC_PATH"

您还可以测试环境变量是否设置为特定值,例如,此命令在所有其他 shell 中都不会引发错误,但只有在从 bash shell 运行时才会运行 crate 测试,因为在某个地方可能会对某人有所帮助。

cargo when --equals SHELL=bash test

示例 Travis CI 使用方法

cargo when 命令在像 Travis CI 这样的持续集成环境中表现良好。以下是一个场景示例,其中包括仅在夜间构建功能和仅在稳定版构建文档以便稍后上传。

sudo: false
language: rust
rust:
- stable
- 1.8.0
- beta
- nightly
before_script:
- |
  cargo install cargo-when
script:
- |
  cargo unless --channel=nightly build --verbose &&
  cargo when --channel=nightly build --verbose --features nightly &&
  cargo unless --channel=nightly test --verbose &&
  cargo when --channel=nightly test --verbose --features nightly &&
  cargo when --channel=stable doc

许可证

此库根据以下任一条款分发:

任选其一。

贡献

除非您明确声明,否则您有意提交以包含在您的工作中的任何贡献,如 Apache-2.0 许可证中定义的,将按照上述条款双重许可,不附加任何额外条款或条件。

依赖关系

~1.5MB
~21K SLoC