#version #git #verbose #long

无 std 构建 博森

收集详细版本标志的构建信息

5 个稳定版本

1.1.0 2024年5月16日
1.0.3 2024年4月20日
1.0.2 2023年11月26日
1.0.1 2023年7月3日
1.0.0 2023年3月5日

#157 in 构建工具

Download history 345/week @ 2024-04-25 160/week @ 2024-05-02 200/week @ 2024-05-09 371/week @ 2024-05-16 170/week @ 2024-05-23 161/week @ 2024-05-30 163/week @ 2024-06-06 191/week @ 2024-06-13 218/week @ 2024-06-20 343/week @ 2024-06-27 326/week @ 2024-07-04 164/week @ 2024-07-11 148/week @ 2024-07-18 171/week @ 2024-07-25 110/week @ 2024-08-01 144/week @ 2024-08-08

596 个月下载量
用于 2 个包(通过 watchexec-cli

Apache-2.0 OR MIT

23KB
302

博森

收集详细版本标志的构建信息。

  • API 文档.
  • 许可:Apache 2.0 或 MIT
  • 状态:维护中。

快速开始

在你的 Cargo.toml

[build-dependencies]
bosion = "1.1.0"

在你的 build.rs

fn main() {
    bosion::gather();
}

在你的 src/main.rs

include!(env!("BOSION_PATH"));

fn main() {
    // default output, like rustc -Vv
    println!("{}", Bosion::LONG_VERSION);

    // with additional fields
    println!("{}", Bosion::long_version_with(&[
        ("custom data", "value"),
        ("LLVM version", "15.0.6"),
    ]));

    // enabled features like +feature +an-other
    println!("{}", Bosion::CRATE_FEATURE_STRING);

    // the raw data
    println!("{}", Bosion::GIT_COMMIT_HASH);
    println!("{}", Bosion::GIT_COMMIT_SHORTHASH);
    println!("{}", Bosion::GIT_COMMIT_DATE);
    println!("{}", Bosion::GIT_COMMIT_DATETIME);
    println!("{}", Bosion::CRATE_VERSION);
    println!("{:?}", Bosion::CRATE_FEATURES);
    println!("{}", Bosion::BUILD_DATE);
    println!("{}", Bosion::BUILD_DATETIME);
}

高级用法

生成具有公共可见性的结构体

// build.rs
bosion::gather_pub();

自定义输出文件和结构体名称

// build.rs
bosion::gather_to("buildinfo.rs", "Build", /* public? */ false);

输出构建时环境变量而不是源代码

// build.rs
bosion::gather_to_env();

// src/main.rs
fn main() {
    println!("{}", env!("BOSION_GIT_COMMIT_HASH"));
    println!("{}", env!("BOSION_GIT_COMMIT_SHORTHASH"));
    println!("{}", env!("BOSION_GIT_COMMIT_DATE"));
    println!("{}", env!("BOSION_GIT_COMMIT_DATETIME"));
    println!("{}", env!("BOSION_BUILD_DATE"));
    println!("{}", env!("BOSION_BUILD_DATETIME"));
    println!("{}", env!("BOSION_CRATE_VERSION"));
    println!("{}", env!("BOSION_CRATE_FEATURES")); // comma-separated
}

自定义环境变量前缀

// build.rs
bosion::gather_to_env_with_prefix("MYAPP_");

功能

  • reproducible:读取 SOURCE_DATE_EPOCH(默认)。
  • git:启用收集 git 信息(默认)。
  • std:启用 long_version_with 方法(默认)。具体来说,这是关于下游包的 std 支持,而不是 Bosion 的,Bosion 总是需要 std。

为什么不…?

  • bugreport:运行时库,用于错误信息。
  • git-testament:使用 git 命令行界面而不是 gitoxide。
  • human-panic:运行时库,用于恐慌。
  • shadow-rs:使用 libgit2 而不是 gitoxide,git 变化时不重新构建。
  • vergen:使用 git 命令行界面而不是 gitoxide。

博森(Bosion)也无需在 build.rs 之外依赖任何内容,并且专门为以多种方式安装的crate而设计,例如通过 cargo install,从预编译的二进制文件、从git源码或没有git的源码(如tar包)等方式,在各种平台上安装。它的默认输出(使用 clap)几乎与rustc -Vv完全相同。

示例

示例目录中包含一个实际可运行的基于 clap 的示例,以及其他几个用于集成测试的crate。

以下是Watchexec CLI的输出

watchexec 1.21.1 (5026793 2023-03-05)
commit-hash: 5026793a12ff895edf2dafb92111e7bd1767650e
commit-date: 2023-03-05
build-date: 2023-03-05
release: 1.21.1
features:

为了比较,这里提供 rustc -Vv

rustc 1.67.1 (d5a82bbd2 2023-02-07)
binary: rustc
commit-hash: d5a82bbd26e1ad8b7401f6a718a9c57c96905483
commit-date: 2023-02-07
host: x86_64-unknown-linux-gnu
release: 1.67.1
LLVM version: 15.0.6

依赖关系

~0.7–11MB
~120K SLoC