fn main() { { use chrono::prelude::*; use std::fs::File; use std::io::Write; use std::process::Command; // Date of build let now = Utc::now().format("%Y%m%d%H%M%S"); // Latest commit ID let git_sha = String::from_utf8( Command::new("git") .arg("rev-parse") .arg("--short") .arg("HEAD") .output() .expect("Failed to get git sha") .stdout, ) .expect("Read stdout from git sha command"); // If the workspace is dirty or clean let clean = Command::new("git") .arg("diff") .arg("--quiet") .status() .expect("Failed to run git diff") .success(); let mut file = File::create("VERSION").expect("Create VERSION file"); if clean { write!(file, "0.0.0-{now}+{}", git_sha.trim()).expect("Write version to VERSION file"); } else { write!(file, "0.0.0-{now}+{}-dirty", git_sha.trim()) .expect("Write version to VERSION file"); } } }