Crates.io | bosion |
lib.rs | bosion |
version | 1.1.1 |
source | src |
created_at | 2023-03-05 03:56:31.176975 |
updated_at | 2024-10-14 10:17:07.280567 |
description | Gather build information for verbose versions flags |
homepage | |
repository | https://github.com/watchexec/watchexec |
max_upload_size | |
id | 801056 |
size | 23,608 |
Gather build information for verbose versions flags.
In your Cargo.toml
:
[build-dependencies]
bosion = "1.1.1"
In your build.rs
:
fn main() {
bosion::gather();
}
In your 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);
}
Generating a struct with public visibility:
// build.rs
bosion::gather_pub();
Customising the output file and struct names:
// build.rs
bosion::gather_to("buildinfo.rs", "Build", /* public? */ false);
Outputting build-time environment variables instead of source:
// 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
}
Custom env prefix:
// build.rs
bosion::gather_to_env_with_prefix("MYAPP_");
reproducible
: reads SOURCE_DATE_EPOCH
(default).git
: enables gathering git information (default).std
: enables the long_version_with
method (default).
Specifically, this is about the downstream crate's std support, not Bosion's, which always requires std.git
CLI instead of gitoxide.git
CLI instead of gitoxide.Bosion also requires no dependencies outside of build.rs, and was specifically made for crates
installed in a variety of ways, like with cargo install
, from pre-built binary, from source with
git, or from source without git (like a tarball), on a variety of platforms. Its default output with
clap is almost exactly like rustc -Vv
.
The examples directory contains a practical and runnable clap-based example, as well as several other crates which are actually used for integration testing.
Here is the output for the 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:
For comparison, here's 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