build-data 0.2.2

Include build data in your program: date, rustc version, git commit & branch, etc.
Documentation
build-data
==========
[![crates.io version](https://img.shields.io/crates/v/build-data.svg)](https://crates.io/crates/build-data)
[![license: Apache 2.0](https://gitlab.com/leonhard-llc/ops/-/raw/main/license-apache-2.0.svg)](https://gitlab.com/leonhard-llc/ops/-/raw/main/build-data/LICENSE)
[![unsafe forbidden](https://gitlab.com/leonhard-llc/ops/-/raw/main/unsafe-forbidden.svg)](https://github.com/rust-secure-code/safety-dance/)
[![pipeline status](https://gitlab.com/leonhard-llc/ops/badges/main/pipeline.svg)](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