Skip to content

Rust library for creating a commit testament at compile time

License

Notifications You must be signed in to change notification settings

kinnison/git-testament

Folders and files

NameName
Last commit message
Last commit date

Latest commit

76b9927 · Nov 28, 2024
Dec 30, 2022
Apr 28, 2019
Nov 28, 2024
Nov 28, 2024
Jan 18, 2023
Nov 28, 2024
May 1, 2021
Mar 9, 2019
Mar 9, 2019
Apr 3, 2019
Nov 28, 2024
Jan 21, 2024
May 1, 2021

Repository files navigation

Git Testament

BSD 3 Clause Main build status Latest docs Crates.IO

git-testament is a library to embed a testament as to the state of a git working tree during the build of a Rust program. It uses the power of procedural macros to embed commit, tag, and working-tree-state information into your program when it is built. This can then be used to report version information.

use git_testament::{git_testament, render_testament};

git_testament!(TESTAMENT);

fn main() {
    println!("My version information: {}", render_testament!(TESTAMENT));
}

The above code may print, for example, for a clean build from a 1.0.0 tag:

My version information: 1.0.0 (763aa159d 2019-04-02)

Or something like 1.0.0+14 (651af89ed 2019-04-02) dirty 4 modifications if the working tree is dirty and there have been some commits since the last tag.

To access the testament data (for example to render it yourself), the documentation describes all the details.

Reproducible builds

In the case that your build is not being done from a Git repository, you still want your testament to be useful to your users. Reproducibility of the binary is critical in that case. The Reproducible Builds team have defined a mechanism for this known as SOURCE_DATE_EPOCH which is an environment variable which can be set to ensure the build date is fixed for reproducibilty reasons. If you have no repo (or a repo but no commit) then git_testament!() will use the SOURCE_DATE_EPOCH environment variable (if present and parseable as a number of seconds since the UNIX epoch) to override now.

Use in no_std scenarios

This crate does not link to anything in the standard library, but it does rely by default on the alloc library being available. Disabling the alloc feature allows the crate to work in no_std environments where the alloc library is not available. You can still generate a GitTestament struct though it'll be less easy to work with. Instead it'd be recommended to use the git_testament_macros!() macro instead which provides a set of macros which produce string constants to use. This is less flexible/capable but can sometimes be easier to work with in these kinds of situations.

About

Rust library for creating a commit testament at compile time

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages