2020-02-01 20:39:39 +00:00
|
|
|
use std::{
|
|
|
|
env,
|
|
|
|
fs::File,
|
|
|
|
io::{Read, Write},
|
|
|
|
path::{Path, PathBuf},
|
|
|
|
process::Command,
|
|
|
|
};
|
2019-07-21 17:45:31 +00:00
|
|
|
|
|
|
|
fn main() {
|
2020-11-24 01:08:57 +00:00
|
|
|
// If these env variables exist then we are building on nix, use them as hash
|
|
|
|
// and tag.
|
|
|
|
if let (Some(hash), Some(tag)) = (option_env!("NIX_GIT_HASH"), option_env!("NIX_GIT_TAG")) {
|
2020-06-17 11:06:40 +00:00
|
|
|
create_hash_file(hash);
|
2020-11-24 01:08:57 +00:00
|
|
|
create_tag_file(tag);
|
|
|
|
} else {
|
|
|
|
// Get the current githash
|
|
|
|
// Note: It will compare commits. As long as the commits do not diverge from the
|
|
|
|
// server no version change will be detected.
|
|
|
|
match Command::new("git")
|
|
|
|
.args(&[
|
|
|
|
"log",
|
|
|
|
"-n",
|
|
|
|
"1",
|
|
|
|
"--pretty=format:%h/%cd",
|
|
|
|
"--date=format:%Y-%m-%d-%H:%M",
|
|
|
|
"--abbrev=8",
|
|
|
|
])
|
|
|
|
.output()
|
|
|
|
{
|
|
|
|
Ok(output) => match String::from_utf8(output.stdout) {
|
|
|
|
Ok(hash) => {
|
|
|
|
create_hash_file(&hash);
|
|
|
|
},
|
|
|
|
Err(e) => panic!("failed to convert git output to UTF-8: {}", e),
|
2020-02-01 20:39:39 +00:00
|
|
|
},
|
2020-11-24 01:08:57 +00:00
|
|
|
Err(e) => panic!("failed to retrieve current git commit hash: {}", e),
|
|
|
|
}
|
2020-09-16 10:50:55 +00:00
|
|
|
|
2020-11-24 01:08:57 +00:00
|
|
|
// Get the current githash
|
|
|
|
// Note: It will compare commits. As long as the commits do not diverge from the
|
|
|
|
// server no version change will be detected.
|
|
|
|
match Command::new("git")
|
|
|
|
.args(&["describe", "--exact-match", "--tags", "HEAD"])
|
|
|
|
.output()
|
|
|
|
{
|
|
|
|
Ok(output) => match String::from_utf8(output.stdout) {
|
|
|
|
Ok(tag) => {
|
|
|
|
create_tag_file(&tag);
|
|
|
|
},
|
|
|
|
Err(e) => panic!("failed to convert git output to UTF-8: {}", e),
|
2020-09-16 10:50:55 +00:00
|
|
|
},
|
2020-11-24 01:08:57 +00:00
|
|
|
Err(e) => panic!("failed to retrieve current git commit hash: {}", e),
|
|
|
|
}
|
2020-09-16 10:50:55 +00:00
|
|
|
}
|
|
|
|
|
2019-08-22 17:18:47 +00:00
|
|
|
// Check if git-lfs is working
|
2022-07-15 12:08:04 +00:00
|
|
|
if env::var("DISABLE_GIT_LFS_CHECK").is_err() && cfg!(not(feature = "no-assets")) {
|
2021-06-18 17:41:18 +00:00
|
|
|
let asset_path: PathBuf = ["..", "assets", "voxygen", "background", "bg_main.jpg"]
|
2019-10-05 08:33:18 +00:00
|
|
|
.iter()
|
|
|
|
.collect();
|
|
|
|
let asset_file = match File::open(&asset_path) {
|
|
|
|
Ok(file) => file,
|
|
|
|
Err(e) => panic!(
|
|
|
|
"failed to open asset file {}: {}",
|
|
|
|
asset_path.to_str().unwrap(),
|
|
|
|
e
|
|
|
|
),
|
|
|
|
};
|
|
|
|
const LFS_MARKER: &[u8] = b"version https://git-lfs.github.com/spec/";
|
|
|
|
let mut buffer = Vec::new();
|
|
|
|
let bytes_read = asset_file
|
|
|
|
.take(LFS_MARKER.len() as u64)
|
|
|
|
.read_to_end(&mut buffer)
|
|
|
|
.expect("failed to read asset file");
|
2019-08-22 17:18:47 +00:00
|
|
|
|
2019-10-05 08:33:18 +00:00
|
|
|
if bytes_read == LFS_MARKER.len() && buffer == LFS_MARKER {
|
|
|
|
panic!(
|
|
|
|
"\n\nGit Large File Storage (git-lfs) has not been set up correctly.\n\
|
|
|
|
Most common reasons:\n\
|
|
|
|
\t- git-lfs was not installed before cloning this repository\n\
|
|
|
|
\t- this repository was not cloned from the primary gitlab mirror.\n\
|
|
|
|
\t The github mirror does not support lfs.\n\
|
|
|
|
See the book at https://book.veloren.net/ for details.\n\n"
|
|
|
|
);
|
|
|
|
}
|
2019-08-22 17:18:47 +00:00
|
|
|
}
|
2019-07-21 17:45:31 +00:00
|
|
|
}
|
2020-06-17 11:06:40 +00:00
|
|
|
|
|
|
|
fn create_hash_file(hash: &str) {
|
|
|
|
let mut target = File::create(
|
|
|
|
Path::new(&env::var("OUT_DIR").expect("failed to query OUT_DIR environment variable"))
|
|
|
|
.join("githash"),
|
|
|
|
)
|
|
|
|
.expect("failed to create git hash file!");
|
|
|
|
target
|
|
|
|
.write_all(hash.trim().as_bytes())
|
|
|
|
.expect("failed to write to file!");
|
|
|
|
}
|
2020-09-16 10:50:55 +00:00
|
|
|
|
|
|
|
fn create_tag_file(tag: &str) {
|
|
|
|
let mut target = File::create(
|
|
|
|
Path::new(&env::var("OUT_DIR").expect("failed to query OUT_DIR environment variable"))
|
|
|
|
.join("gittag"),
|
|
|
|
)
|
|
|
|
.expect("failed to create git tag file!");
|
|
|
|
target
|
|
|
|
.write_all(tag.trim().as_bytes())
|
|
|
|
.expect("failed to write to file!");
|
|
|
|
}
|