chore: Use Semver to grab OS version from image
This commit is contained in:
parent
1d05290266
commit
2bf7c99aaf
7 changed files with 14 additions and 15 deletions
|
|
@ -89,7 +89,7 @@ impl<'a> Module<'a> {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub fn generate_akmods_info(&'a self, os_version: &str) -> AkmodsInfo {
|
pub fn generate_akmods_info(&'a self, os_version: &u64) -> AkmodsInfo {
|
||||||
#[derive(Debug, Copy, Clone)]
|
#[derive(Debug, Copy, Clone)]
|
||||||
enum NvidiaAkmods {
|
enum NvidiaAkmods {
|
||||||
Nvidia(bool),
|
Nvidia(bool),
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ impl ModuleExt<'_> {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub fn get_akmods_info_list(&self, os_version: &str) -> Vec<AkmodsInfo> {
|
pub fn get_akmods_info_list(&self, os_version: &u64) -> Vec<AkmodsInfo> {
|
||||||
trace!("get_akmods_image_list({self:#?}, {os_version})");
|
trace!("get_akmods_image_list({self:#?}, {os_version})");
|
||||||
|
|
||||||
let mut seen = HashSet::new();
|
let mut seen = HashSet::new();
|
||||||
|
|
|
||||||
|
|
@ -44,7 +44,7 @@ pub struct Recipe<'a> {
|
||||||
|
|
||||||
impl<'a> Recipe<'a> {
|
impl<'a> Recipe<'a> {
|
||||||
#[must_use]
|
#[must_use]
|
||||||
pub fn generate_tags(&self, os_version: &str) -> Vec<String> {
|
pub fn generate_tags(&self, os_version: u64) -> Vec<String> {
|
||||||
trace!("Recipe::generate_tags()");
|
trace!("Recipe::generate_tags()");
|
||||||
trace!("Generating image tags for {}", &self.name);
|
trace!("Generating image tags for {}", &self.name);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -211,7 +211,7 @@ impl BuildCommand {
|
||||||
|
|
||||||
let recipe = Recipe::parse(&recipe_path)?;
|
let recipe = Recipe::parse(&recipe_path)?;
|
||||||
let os_version = Driver::get_os_version(&recipe)?;
|
let os_version = Driver::get_os_version(&recipe)?;
|
||||||
let tags = recipe.generate_tags(&os_version);
|
let tags = recipe.generate_tags(os_version);
|
||||||
let image_name = self.generate_full_image_name(&recipe)?;
|
let image_name = self.generate_full_image_name(&recipe)?;
|
||||||
|
|
||||||
if self.push {
|
if self.push {
|
||||||
|
|
|
||||||
|
|
@ -95,7 +95,7 @@ static INSPECT_DRIVER: Lazy<Arc<dyn InspectDriver>> = Lazy::new(|| {
|
||||||
static BUILD_ID: Lazy<Uuid> = Lazy::new(Uuid::new_v4);
|
static BUILD_ID: Lazy<Uuid> = Lazy::new(Uuid::new_v4);
|
||||||
|
|
||||||
/// The cached os versions
|
/// The cached os versions
|
||||||
static OS_VERSION: Lazy<Mutex<HashMap<String, String>>> = Lazy::new(|| Mutex::new(HashMap::new()));
|
static OS_VERSION: Lazy<Mutex<HashMap<String, u64>>> = Lazy::new(|| Mutex::new(HashMap::new()));
|
||||||
|
|
||||||
/// Trait for retrieving version of a driver.
|
/// Trait for retrieving version of a driver.
|
||||||
pub trait DriverVersion {
|
pub trait DriverVersion {
|
||||||
|
|
@ -309,7 +309,7 @@ impl Driver<'_> {
|
||||||
/// # Errors
|
/// # Errors
|
||||||
/// Will error if the image doesn't have OS version info
|
/// Will error if the image doesn't have OS version info
|
||||||
/// or we are unable to lock a mutex.
|
/// or we are unable to lock a mutex.
|
||||||
pub fn get_os_version(recipe: &Recipe) -> Result<String> {
|
pub fn get_os_version(recipe: &Recipe) -> Result<u64> {
|
||||||
trace!("Driver::get_os_version({recipe:#?})");
|
trace!("Driver::get_os_version({recipe:#?})");
|
||||||
let image = format!("{}:{}", &recipe.base_image, &recipe.image_version);
|
let image = format!("{}:{}", &recipe.base_image, &recipe.image_version);
|
||||||
|
|
||||||
|
|
@ -339,13 +339,13 @@ impl Driver<'_> {
|
||||||
}
|
}
|
||||||
Some(os_version) => {
|
Some(os_version) => {
|
||||||
debug!("Found cached {os_version} for {image}");
|
debug!("Found cached {os_version} for {image}");
|
||||||
os_version.clone()
|
*os_version
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
if let Entry::Vacant(entry) = os_version_lock.entry(image.clone()) {
|
if let Entry::Vacant(entry) = os_version_lock.entry(image.clone()) {
|
||||||
trace!("Caching version {os_version} for {image}");
|
trace!("Caching version {os_version} for {image}");
|
||||||
entry.insert(os_version.clone());
|
entry.insert(os_version);
|
||||||
}
|
}
|
||||||
drop(os_version_lock);
|
drop(os_version_lock);
|
||||||
Ok(os_version)
|
Ok(os_version)
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,5 @@
|
||||||
use blue_build_utils::constants::IMAGE_VERSION_LABEL;
|
use blue_build_utils::constants::IMAGE_VERSION_LABEL;
|
||||||
|
use semver::Version;
|
||||||
use serde::Deserialize;
|
use serde::Deserialize;
|
||||||
use serde_json::Value;
|
use serde_json::Value;
|
||||||
use std::collections::HashMap;
|
use std::collections::HashMap;
|
||||||
|
|
@ -13,15 +14,14 @@ pub struct ImageMetadata {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ImageMetadata {
|
impl ImageMetadata {
|
||||||
pub fn get_version(&self) -> Option<String> {
|
#[must_use]
|
||||||
|
pub fn get_version(&self) -> Option<u64> {
|
||||||
Some(
|
Some(
|
||||||
self.labels
|
self.labels
|
||||||
.get(IMAGE_VERSION_LABEL)?
|
.get(IMAGE_VERSION_LABEL)?
|
||||||
.as_str()
|
.as_str()
|
||||||
.map(std::string::ToString::to_string)?
|
.and_then(|v| Version::parse(v).ok())?
|
||||||
.split('.')
|
.major,
|
||||||
.take(1)
|
|
||||||
.collect(),
|
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,8 +23,7 @@ pub struct ContainerFileTemplate<'a> {
|
||||||
#[builder(setter(into))]
|
#[builder(setter(into))]
|
||||||
build_id: Uuid,
|
build_id: Uuid,
|
||||||
|
|
||||||
#[builder(setter(into))]
|
os_version: u64,
|
||||||
os_version: Cow<'a, str>,
|
|
||||||
|
|
||||||
#[builder(setter(into))]
|
#[builder(setter(into))]
|
||||||
registry: Cow<'a, str>,
|
registry: Cow<'a, str>,
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue