Use Rust build metadata for system version

This commit is contained in:
fawney19
2026-05-03 22:06:16 +08:00
parent b4a8c5dde2
commit cb5b8ee1ee
3 changed files with 50 additions and 18 deletions

View File

@@ -74,6 +74,7 @@ jobs:
- name: Build - name: Build
env: env:
AETHER_VERSION: ${{ startsWith(github.ref, 'refs/tags/v') && github.ref_name || '' }}
CARGO_TERM_COLOR: always CARGO_TERM_COLOR: always
run: cross build --release --locked -p aether-gateway --target ${{ matrix.target }} run: cross build --release --locked -p aether-gateway --target ${{ matrix.target }}

View File

@@ -0,0 +1,45 @@
use std::env;
use std::process::Command;
fn main() {
println!("cargo:rerun-if-env-changed=AETHER_VERSION");
println!("cargo:rerun-if-env-changed=GITHUB_REF_NAME");
println!("cargo:rerun-if-changed=../../.git/HEAD");
let package_version = env::var("CARGO_PKG_VERSION").unwrap_or_else(|_| "unknown".to_string());
let version = env::var("AETHER_VERSION")
.ok()
.filter(|value| !value.trim().is_empty())
.or_else(|| {
env::var("GITHUB_REF_NAME")
.ok()
.filter(|value| value.trim().starts_with('v'))
})
.or_else(git_describe_version)
.map(|value| normalize_version(&value))
.filter(|value| !value.is_empty())
.unwrap_or(package_version);
println!("cargo:rustc-env=AETHER_BUILD_VERSION={version}");
}
fn git_describe_version() -> Option<String> {
let output = Command::new("git")
.args(["describe", "--tags", "--always", "--dirty"])
.output()
.ok()?;
if !output.status.success() {
return None;
}
let version = String::from_utf8(output.stdout).ok()?;
let version = version.trim();
if version.is_empty() {
None
} else {
Some(version.to_string())
}
}
fn normalize_version(value: &str) -> String {
value.trim().strip_prefix('v').unwrap_or(value.trim()).to_string()
}

View File

@@ -12,26 +12,12 @@ use aether_admin::system::{
use axum::body::Bytes; use axum::body::Bytes;
use axum::http; use axum::http;
use serde_json::json; use serde_json::json;
use std::fs;
pub(crate) fn current_aether_version() -> String { pub(crate) fn current_aether_version() -> String {
let version_file = option_env!("AETHER_BUILD_VERSION")
std::path::Path::new(env!("CARGO_MANIFEST_DIR")).join("../../src/_version.py"); .filter(|version| !version.is_empty())
if let Ok(contents) = fs::read_to_string(version_file) { .unwrap_or(env!("CARGO_PKG_VERSION"))
for line in contents.lines() { .to_string()
let line = line.trim();
if let Some(version) = line
.strip_prefix("__version__ = version = '")
.and_then(|value| value.strip_suffix('\''))
{
if !version.is_empty() {
return version.to_string();
}
}
}
}
env!("CARGO_PKG_VERSION").to_string()
} }
pub(crate) fn build_admin_system_check_update_payload() -> serde_json::Value { pub(crate) fn build_admin_system_check_update_payload() -> serde_json::Value {