Crate vergen_git2

source ·
Expand description

§vergen-git2 - Emit cargo instructions from a build script

vergen-git2 uses the git2 library to generate the git instructions.

vergen-git2, when used in conjunction with cargo build scripts can emit the following:

§Usage

  1. Ensure you have build scripts enabled via the build configuration in your Cargo.toml
[package]
#..
build = "build.rs"
  1. Add vergen-git2 as a build dependency in Cargo.toml, specifying the features you wish to enable.
[dependencies]
#..

[build-dependencies]
# All features enabled
vergen-git2 = { version = "1.0.0-beta.0", features = ["build", "cargo", "rustc", "si"] }
# or
vergen-git2 = { version = "1.0.0-beta.0", features = ["build"] }
# if you wish to disable certain features
  1. Create a build.rs file that uses vergen-git2 to emit cargo instructions. Configuration starts with Emitter. Eventually you will call emit to output the cargo instructions. See the emit documentation for more robust examples.
§Generate all output
// NOTE: This will output everything, and requires all features enabled.
// NOTE: See the specific builder documentation for configuration options.
let build = BuildBuilder::all_build()?;
let cargo = CargoBuilder::all_cargo()?;
let git2 = Git2Builder::all_git()?;
let rustc = RustcBuilder::all_rustc()?;
let si = SysinfoBuilder::all_sysinfo()?;

Emitter::default()
    .add_instructions(&build)?
    .add_instructions(&cargo)?
    .add_instructions(&git2)?
    .add_instructions(&rustc)?
    .add_instructions(&si)?
    .emit()?;
§Sample Output
                Date (  build): 2024-01-28
           Timestamp (  build): 2024-01-28T18:07:13.256193157Z
               Debug (  cargo): true
        Dependencies (  cargo): anyhow 1.0.79,vergen 8.3.1,vergen-pretty 0.3.1
            Features (  cargo):
           Opt Level (  cargo): 0
       Target Triple (  cargo): x86_64-unknown-linux-gnu
              Branch (    git): master
 Commit Author Email (    git): a_serious@vergen.com
  Commit Author Name (    git): Jason Ozias
        Commit Count (    git): 39
         Commit Date (    git): 2024-01-27
      Commit Message (    git): depsup
    Commit Timestamp (    git): 2024-01-27T15:13:49.000000000Z
            Describe (    git): 0.1.0-beta.1-10-gc139056
               Dirty (    git): false
                 SHA (    git): c1390562822a2f89ded3430c07cba03bf1651458
             Channel (  rustc): nightly
         Commit Date (  rustc): 2024-01-27
         Commit Hash (  rustc): 6b4f1c5e782c72a047a23e922decd33e7d462345
         Host Triple (  rustc): x86_64-unknown-linux-gnu
        LLVM Version (  rustc): 17.0
              Semver (  rustc): 1.77.0-nightly
           CPU Brand (sysinfo): AMD Ryzen Threadripper 1900X 8-Core Processor
      CPU Core Count (sysinfo): 8
       CPU Frequency (sysinfo): 3792
            CPU Name (sysinfo): cpu0,cpu1,cpu2,cpu3,cpu4,cpu5,cpu6,cpu7
          CPU Vendor (sysinfo): AuthenticAMD
                Name (sysinfo): Arch Linux
          OS Version (sysinfo): Linux  Arch Linux
        Total Memory (sysinfo): 31 GiB
                User (sysinfo): jozias
§Generate specific output
// NOTE: This will output only the instructions specified.
// NOTE: See the specific builder documentation for configuration options. 
let build = BuildBuilder::default().build_timestamp(true).build()?;
let cargo = CargoBuilder::default().opt_level(true).build()?;
let git2 = Git2Builder::default().commit_timestamp(true).build()?;
let rustc = RustcBuilder::default().semver(true).build()?;
let si = SysinfoBuilder::default().cpu_core_count(true).build()?;

Emitter::default()
    .add_instructions(&build)?
    .add_instructions(&cargo)?
    .add_instructions(&git2)?
    .add_instructions(&rustc)?
    .add_instructions(&si)?
    .emit()?;
§Sample Output
       Timestamp (  build): 2024-01-28T18:07:13.256193157Z
       Opt Level (  cargo): 0
Commit Timestamp (    git): 2024-01-27T15:13:49.000000000Z
          Semver (  rustc): 1.77.0-nightly
  CPU Core Count (sysinfo): 8
  1. Use the env! or option_env! macro in your code to read the environment variables.
if let Some(timestamp) = option_env!("VERGEN_BUILD_TIMESTAMP") {
    println!("Build Timestamp: {timestamp}");
}
if let Some(describe) = option_env!("VERGEN_GIT_DESCRIBE") {
    println!("git describe: {describe}");
}

§Features

vergen-git2 has four main feature toggles allowing you to customize your output. No features are enabled by default.
You must specifically enable the features you wish to use.

FeatureEnables
buildVERGEN_BUILD_* instructions
cargoVERGEN_CARGO_* instructions
rustcVERGEN_RUSTC_* instructions
siVERGEN_SYSINFO_* instructions

§Environment Variables

vergen-git2 currently recognizes the following environment variables

VariableFunctionality
VERGEN_IDEMPOTENTIf this environment variable is set vergen will use the idempotent output feature regardless of the configuration set in build.rs. This exists mainly to allow package maintainers to force idempotent output to generate deterministic binary output.
SOURCE_DATE_EPOCHIf this environment variable is set vergen will use the value (unix time since epoch) as the basis for a time based instructions. This can help emit deterministic instructions.
VERGEN_BUILD_*If this environment variable is set vergen will use the value you specify for the output rather than generating it.
VERGEN_CARGO_*If this environment variable is set vergen will use the value you specify for the output rather than generating it.
VERGEN_GIT_*If this environment variable is set vergen will use the value you specify for the output rather than generating it.
VERGEN_RUSTC_*If this environment variable is set vergen will use the value you specify for the output rather than generating it.
VERGEN_SYSINFO_*If this environment variable is set vergen will use the value you specify for the output rather than generating it.

Structs§

Enums§

Traits§

  • This trait should be implemented to allow the vergen emitter to properly emit your custom instructions.

Type Aliases§

  • The vector of strings used to emit cargo:rerun-if-changed=VALUE cargo instructions
  • The vector of strings used to emit cargo:warning=VALUE cargo instructions