build-data
==========
[](https://crates.io/crates/build-data)
[](https://gitlab.com/leonhard-llc/ops/-/raw/main/build-data/LICENSE)
[](https://github.com/rust-secure-code/safety-dance/)
[](https://gitlab.com/leonhard-llc/ops/-/pipelines)
Include build data in your program.
# Features
- Saves build-time data:
- Git commit, branch, and dirtiness
- Source modification date & time
- Rustc version
- Rust channel (stable, nightly, or beta)
- Does all of its work in your
[`build.rs`](https://doc.rust-lang.org/cargo/reference/build-scripts.html).
- Sets environment variables.
Use [`env!`](https://doc.rust-lang.org/core/macro.env.html) to use them
in your program.
- No macros
- No runtime dependencies
- Light build dependencies
- `forbid(unsafe_code)`
- 100% test coverage
# Alternatives
- Environment variables that cargo sets for crates:
- `CARGO_PKG_NAME`
- `CARGO_PKG_VERSION`
- `CARGO_BIN_NAME`
- [others](https://doc.rust-lang.org/cargo/reference/environment-variables.html#environment-variables-cargo-sets-for-crates)
- [`vergen`](https://crates.io/crates/vergen)
- Mature & very popular
- Good API, needs only `env!` to retrieve values
- Excellent test coverage
- Heavy build dependencies
- [`build-info`](https://crates.io/crates/build-info)
- Mature
- Confusing API
- Uses procedural macros
# Example
```toml
// Cargo.toml
[dependencies]
[build-dependencies]
build-data = "0"
```
Add a [`build.rs`](https://doc.rust-lang.org/cargo/reference/build-scripts.html)
file next to your `Cargo.toml`.
Call [`build_data::set_*`](https://docs.rs/build-data/) functions to
set variables.
```rust
// build.rs
fn main() {
build_data::set_GIT_BRANCH();
build_data::set_GIT_COMMIT();
build_data::set_GIT_DIRTY();
build_data::set_SOURCE_TIMESTAMP();
build_data::no_debug_rebuilds();
}
```
Use [`env!`](https://doc.rust-lang.org/core/macro.env.html) to access the
variables in your program:
```rust
// src/bin/main.rs
fn main() {
// Built from branch=release
// commit=a5547bfb1edb9712588f0f85d3e2c8ba618ac51f
// dirty=false
// source_timestamp=2021-04-14T06:25:59+00:00
println!("Built from branch={} commit={} dirty={} source_timestamp={}",
env!("GIT_BRANCH"),
env!("GIT_COMMIT"),
env!("GIT_DIRTY"),
env!("SOURCE_TIMESTAMP"),
);
}
```
# Cargo Geiger Safety Report
```
Metric output format: x/y
x = unsafe code used by the build
y = total unsafe code found in the crate
Symbols:
🔒 = No `unsafe` usage found, declares #![forbid(unsafe_code)]
❓ = No `unsafe` usage found, missing #![forbid(unsafe_code)]
☢️ = `unsafe` usage found
Functions Expressions Impls Traits Methods Dependency
0/0 0/0 0/0 0/0 0/0 🔒 build-data 0.2.2
0/0 1/11 1/1 0/0 0/0 ☢️ ├── chrono 0.4.38
0/0 0/0 0/0 0/0 0/0 ❓ │ └── num-traits 0.2.18
0/0 0/0 0/0 0/0 0/0 🔒 └── safe-regex 0.3.0
0/0 0/0 0/0 0/0 0/0 🔒 └── safe-regex-macro 0.3.0
0/0 0/0 0/0 0/0 0/0 🔒 ├── safe-proc-macro2 1.0.67
0/0 4/4 0/0 0/0 0/0 ☢️ │ └── unicode-ident 1.0.12
0/0 0/0 0/0 0/0 0/0 🔒 └── safe-regex-compiler 0.3.0
0/0 0/0 0/0 0/0 0/0 🔒 ├── safe-proc-macro2 1.0.67
0/0 0/0 0/0 0/0 0/0 🔒 └── safe-quote 1.0.15
0/0 0/0 0/0 0/0 0/0 🔒 └── safe-proc-macro2 1.0.67
0/0 5/15 1/1 0/0 0/0
```
# Changelog
- v0.2.2 - Fix `get_source_time` when git config has `log.showsignature=true`.
- v0.2.1
- Add `set_TARGET_PLATFORM`. Thanks [tison](https://gitlab.com/tisonkun)!
- Use u64 for timestamps in helper functions.
- v0.1.5 - Update a dependency. Thanks [dignifiedquire](https://gitlab.com/dignifiedquire)!
- v0.1.4 - Update a dependency.
- v0.1.3 - Update docs.
- v0.1.2 - Rewrote based on
[feedback](https://www.reddit.com/r/rust/comments/mqnbvw/)
from r/rust.
- v0.1.1 - Update docs.
- v0.1.0 - Initial version
# To Do
License: Apache-2.0