mirror of
https://github.com/dani-garcia/vaultwarden
synced 2024-11-10 20:11:49 +01:00
f4a9645b54
Squashed commit of the following: commit 1bdf1c7954e0731c95703d10118f3874ab5155d3 Merge:8ba6e61
7257251
Author: Daniel García <dani-garcia@users.noreply.github.com> Date: Sun Jan 23 23:40:17 2022 +0100 Merge branch 'remove-bwrs' of https://github.com/RealOrangeOne/vaultwarden into RealOrangeOne-remove-bwrs commit7257251ecf
Author: Jake Howard <git@theorangeone.net> Date: Thu Jan 6 17:48:18 2022 +0000 Use `or_else` to save potentially unnecessary function call commit40ae81dd3c
Author: Jake Howard <git@theorangeone.net> Date: Wed Jan 5 21:18:24 2022 +0000 Move $BWRS_VERSION fallback into build.rs commit743ef74b30
Author: Jake Howard <git@theorangeone.net> Date: Sat Jan 1 23:08:27 2022 +0000 Revert "Add feature to enable use of `Option::or` in const context" This reverts commitfe8e043b8a
. We want to run on stable soon, where these features are not supported commita1f0da638c
Author: Jake Howard <git@theorangeone.net> Date: Sat Jan 1 13:04:47 2022 +0000 Rename web vault version file https://github.com/dani-garcia/bw_web_builds/pull/58 commitfe8e043b8a
Author: Jake Howard <git@theorangeone.net> Date: Sat Jan 1 12:56:44 2022 +0000 Add feature to enable use of `Option::or` in const context commit687435c8b2
Author: Jake Howard <git@theorangeone.net> Date: Sat Jan 1 12:27:28 2022 +0000 Continue to allow using `$BWRS_VERSION` commit8e2f708e50
Author: Jake Howard <git@theorangeone.net> Date: Fri Dec 31 11:41:34 2021 +0000 Remove references to "bwrs" The only remaining one is getting the version of the web vault, which requires coordinating with the web vault patching.
75 lines
2.8 KiB
Rust
75 lines
2.8 KiB
Rust
use std::env;
|
|
use std::process::Command;
|
|
|
|
fn main() {
|
|
// This allow using #[cfg(sqlite)] instead of #[cfg(feature = "sqlite")], which helps when trying to add them through macros
|
|
#[cfg(feature = "sqlite")]
|
|
println!("cargo:rustc-cfg=sqlite");
|
|
#[cfg(feature = "mysql")]
|
|
println!("cargo:rustc-cfg=mysql");
|
|
#[cfg(feature = "postgresql")]
|
|
println!("cargo:rustc-cfg=postgresql");
|
|
|
|
#[cfg(not(any(feature = "sqlite", feature = "mysql", feature = "postgresql")))]
|
|
compile_error!(
|
|
"You need to enable one DB backend. To build with previous defaults do: cargo build --features sqlite"
|
|
);
|
|
|
|
// Support $BWRS_VERSION for legacy compatibility, but default to $VW_VERSION.
|
|
// If neither exist, read from git.
|
|
let maybe_vaultwarden_version =
|
|
env::var("VW_VERSION").or_else(|_| env::var("BWRS_VERSION")).or_else(|_| version_from_git_info());
|
|
|
|
if let Ok(version) = maybe_vaultwarden_version {
|
|
println!("cargo:rustc-env=VW_VERSION={}", version);
|
|
println!("cargo:rustc-env=CARGO_PKG_VERSION={}", version);
|
|
}
|
|
}
|
|
|
|
fn run(args: &[&str]) -> Result<String, std::io::Error> {
|
|
let out = Command::new(args[0]).args(&args[1..]).output()?;
|
|
if !out.status.success() {
|
|
use std::io::{Error, ErrorKind};
|
|
return Err(Error::new(ErrorKind::Other, "Command not successful"));
|
|
}
|
|
Ok(String::from_utf8(out.stdout).unwrap().trim().to_string())
|
|
}
|
|
|
|
/// This method reads info from Git, namely tags, branch, and revision
|
|
/// To access these values, use:
|
|
/// - env!("GIT_EXACT_TAG")
|
|
/// - env!("GIT_LAST_TAG")
|
|
/// - env!("GIT_BRANCH")
|
|
/// - env!("GIT_REV")
|
|
/// - env!("VW_VERSION")
|
|
fn version_from_git_info() -> Result<String, std::io::Error> {
|
|
// The exact tag for the current commit, can be empty when
|
|
// the current commit doesn't have an associated tag
|
|
let exact_tag = run(&["git", "describe", "--abbrev=0", "--tags", "--exact-match"]).ok();
|
|
if let Some(ref exact) = exact_tag {
|
|
println!("cargo:rustc-env=GIT_EXACT_TAG={}", exact);
|
|
}
|
|
|
|
// The last available tag, equal to exact_tag when
|
|
// the current commit is tagged
|
|
let last_tag = run(&["git", "describe", "--abbrev=0", "--tags"])?;
|
|
println!("cargo:rustc-env=GIT_LAST_TAG={}", last_tag);
|
|
|
|
// The current branch name
|
|
let branch = run(&["git", "rev-parse", "--abbrev-ref", "HEAD"])?;
|
|
println!("cargo:rustc-env=GIT_BRANCH={}", branch);
|
|
|
|
// The current git commit hash
|
|
let rev = run(&["git", "rev-parse", "HEAD"])?;
|
|
let rev_short = rev.get(..8).unwrap_or_default();
|
|
println!("cargo:rustc-env=GIT_REV={}", rev_short);
|
|
|
|
// Combined version
|
|
if let Some(exact) = exact_tag {
|
|
Ok(exact)
|
|
} else if &branch != "main" && &branch != "master" {
|
|
Ok(format!("{}-{} ({})", last_tag, rev_short, branch))
|
|
} else {
|
|
Ok(format!("{}-{}", last_tag, rev_short))
|
|
}
|
|
}
|