mirror of
https://github.com/fawney19/Aether.git
synced 2026-09-02 01:10:23 +08:00
Use Rust build metadata for system version
This commit is contained in:
1
.github/workflows/docker-publish.yml
vendored
1
.github/workflows/docker-publish.yml
vendored
@@ -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 }}
|
||||||
|
|
||||||
|
|||||||
45
apps/aether-gateway/build.rs
Normal file
45
apps/aether-gateway/build.rs
Normal 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()
|
||||||
|
}
|
||||||
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user