ci: derive release binary version from tag (#224)
Set the CLI build version from OBSCURA_VERSION, GitHub tag refs, or Cargo.toml fallback. Use that same build version for both --version and the startup banner, and pass the Docker tag version into Docker builds.
This commit is contained in:
1 parent
5e23903063
commit
048d72dc18
4 files changed
+45
-4
No files matched your search
@@ -0,0 +1,36 @@
|
||||
use std::env;
|
||||
|
||||
fn env_value(name: &str) -> Option<String> {
|
||||
env::var(name)
|
||||
.ok()
|
||||
.map(|value| value.trim().to_string())
|
||||
.filter(|value| !value.is_empty())
|
||||
}
|
||||
|
||||
fn normalize_version(version: String) -> String {
|
||||
version.strip_prefix('v').unwrap_or(&version).to_string()
|
||||
}
|
||||
|
||||
fn github_tag_version() -> Option<String> {
|
||||
if env_value("GITHUB_REF_TYPE").as_deref() == Some("tag") {
|
||||
return env_value("GITHUB_REF_NAME").map(normalize_version);
|
||||
}
|
||||
|
||||
env_value("GITHUB_REF")
|
||||
.and_then(|value| value.strip_prefix("refs/tags/").map(str::to_owned))
|
||||
.map(normalize_version)
|
||||
}
|
||||
|
||||
fn main() {
|
||||
println!("cargo:rerun-if-env-changed=OBSCURA_VERSION");
|
||||
println!("cargo:rerun-if-env-changed=GITHUB_REF_TYPE");
|
||||
println!("cargo:rerun-if-env-changed=GITHUB_REF_NAME");
|
||||
println!("cargo:rerun-if-env-changed=GITHUB_REF");
|
||||
|
||||
let version = env_value("OBSCURA_VERSION")
|
||||
.map(normalize_version)
|
||||
.or_else(github_tag_version)
|
||||
.unwrap_or_else(|| env::var("CARGO_PKG_VERSION").expect("Cargo sets CARGO_PKG_VERSION"));
|
||||
|
||||
println!("cargo:rustc-env=OBSCURA_BUILD_VERSION={version}");
|
||||
}
|
||||
Reference in new issue
Block a user