# ever

Adds the feature to print the build information to your program with minimal boilerplate.

[![Latest version](https://img.shields.io/crates/v/ever.svg)](https://crates.io/crates/ever)
[![Documentation](https://docs.rs/ever/badge.svg)](https://docs.rs/ever)
[![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)
[![Actions Status](https://github.com/YushiOMOTE/ever/workflows/test/badge.svg)](https://github.com/YushiOMOTE/ever/actions)

1. Call `ever!()` at the top of `main` function of your program.

```rust
use ever::ever;

fn main() {
    ever!();

    println!("Hello, world!");
}
```

2. Set the environment variable `EVER` to `1` when starting the program. The build information is printed and the program exits with status `1`.

```bash,ignore
$ EVER=1 ./your_program
your_program 0.1.0 (debug):

    date:     Sat Dec  5 11:17:09 2020 +0900
    commit:   49fec228607448df6fcb8950171441a1f56c2e7b-dirty
    user:     yushiomote
    host:     your_host
    builddir: /home/yushiomote/your_program
    rustc:    1.48.0 (7eac88abb 2020-11-16)
```

If you want to change the environment variable name, pass your alternative as the argument.

```rust
ever!("MY_VERSION");
```

```bash,text
$ MY_VERSION=1 ./your_program
```

## Dump `Cargo.lock`

By setting the environment variable to `dump_lock`, the program dumps the content of `Cargo.lock` used during build.

```bash,ignore
$ EVER=dump_lock ./your_program
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
[[package]]
    name = "autocfg"
    version = "1.0.1"
    source = "registry+https://github.com/rust-lang/crates.io-index"
...
```

## Individual parameters

Provides macros to get individual parameters.

```rust
use ever::{build_commit_hash, build_dir, build_date};

fn main() {
    println!("build_commit_hash: {}", build_commit_hash!());
    println!("build_dir: {}", build_dir!());
    println!("build_date: {}", build_date!());
}
```

All the types returned by those macros are `&'static str`.

## Note

The build information is retrieved only when the source file where `ever` macro is called is compiled.
