#build #cargo #git #version

build grev

A crate for working with git revision information from a build script

4 releases

0.1.3 Jan 6, 2023
0.1.2 Jan 3, 2023
0.1.1 Dec 24, 2022
0.1.0 Dec 24, 2022

#131 in Build Utils

Download history 57/week @ 2022-12-18 148/week @ 2022-12-25 224/week @ 2023-01-01 87/week @ 2023-01-08 53/week @ 2023-01-15 31/week @ 2023-01-22 23/week @ 2023-01-29 29/week @ 2023-02-05 24/week @ 2023-02-12 315/week @ 2023-02-19 28/week @ 2023-02-26 23/week @ 2023-03-05 10/week @ 2023-03-12

382 downloads per month
Used in 3 crates

Apache-2.0 OR MIT

225 lines

pipeline crates.io Docs rustc


A crate for working with git revision information from a build script.


This library provides the means for including partly opinionated git revision identifiers inside a Rust project (typically a binary). It provides a set of functions, all meant to be invoked from a build script, which inquire the current git revision being built against.

Typical usage could look like this:

# use anyhow::Result;
use grev::git_revision_auto;

fn main() -> Result<()> {
  let dir = env!("CARGO_MANIFEST_DIR");
  if let Some(git_rev) = git_revision_auto(dir)? {
      "cargo:rustc-env=VERSION={} ({})",
  } else {
    println!("cargo:rustc-env=VERSION={}", env!("CARGO_PKG_VERSION"));

This logic, contained in a Cargo build script (typically build.rs, located in a project's root), will cause the environment variable VERSION to be set unconditionally when building the program. It will contain the package version and, if available, the git revision at which the build happened (including a modifier indicating if local changes were present). If building at a git tag, the revision string will include this tag. The main program would then inquire the version string using env!("VERSION").