m/cup
1
0
mirror of https://github.com/sergi0g/cup.git synced 2025-11-15 00:23:48 -05:00

Probably a bad attempt at fixing a huge bug in multiple servers

This commit is contained in:
Sergio
2025-02-27 21:41:23 +02:00
parent 14f3f1d19b
commit 3cfa4771eb
3 changed files with 21 additions and 15 deletions

View File

@@ -17,7 +17,7 @@ async fn get_remote_updates(ctx: &Context, client: &Client, refresh: bool) -> Ve
let handles: Vec<_> = ctx.config.servers
.iter()
.map(|(name, url)| async {
.map(|(name, url)| async move {
let base_url = if url.starts_with("http://") || url.starts_with("https://") {
format!("{}/api/v3/", url.trim_end_matches('/'))
} else {
@@ -47,16 +47,21 @@ async fn get_remote_updates(ctx: &Context, client: &Client, refresh: bool) -> Ve
return Vec::new();
}
let json = parse_json(&get_response_body(response).await);
ctx.logger.debug(format!("JSON response for {}: {}", name, json));
if let Some(updates) = json["images"].as_array() {
let mut server_updates: Vec<Update> = updates
.iter()
.filter_map(|img| serde_json::from_value(img.clone()).ok())
.filter_map(|img| match serde_json::from_value(img.clone()) {
Ok(o) => o,
Err(e) => {dbg!(e);None}
})
.collect();
// Add server origin to each image
for update in &mut server_updates {
update.server = Some(name.clone());
update.status = update.get_status();
}
ctx.logger.debug(format!("Updates for {}: {:#?}", name, server_updates));
return server_updates;
}

View File

@@ -1,8 +1,7 @@
use std::fmt::Display;
/// Enum for image status
#[derive(Ord, Eq, PartialEq, PartialOrd, Clone)]
#[cfg_attr(test, derive(Debug))]
#[derive(Ord, Eq, PartialEq, PartialOrd, Clone, Debug)]
pub enum Status {
UpdateMajor,
UpdateMinor,

View File

@@ -2,8 +2,8 @@ use serde::{ser::SerializeStruct, Deserialize, Serialize};
use super::{parts::Parts, status::Status};
#[derive(Serialize, Deserialize, Clone)]
#[cfg_attr(test, derive(PartialEq, Debug, Default))]
#[derive(Serialize, Deserialize, Clone, Debug)]
#[cfg_attr(test, derive(PartialEq, Default))]
pub struct Update {
pub reference: String,
pub parts: Parts,
@@ -14,16 +14,16 @@ pub struct Update {
pub status: Status,
}
#[derive(Serialize, Deserialize, Clone)]
#[cfg_attr(test, derive(PartialEq, Debug, Default))]
#[derive(Serialize, Deserialize, Clone, Debug)]
#[cfg_attr(test, derive(PartialEq, Default))]
pub struct UpdateResult {
pub has_update: Option<bool>,
pub info: UpdateInfo,
pub error: Option<String>,
}
#[derive(Serialize, Deserialize, Clone)]
#[cfg_attr(test, derive(PartialEq, Debug, Default))]
#[derive(Serialize, Deserialize, Clone, Debug)]
#[cfg_attr(test, derive(PartialEq, Default))]
#[serde(untagged)]
pub enum UpdateInfo {
#[cfg_attr(test, default)]
@@ -32,8 +32,8 @@ pub enum UpdateInfo {
Digest(DigestUpdateInfo),
}
#[derive(Deserialize, Clone)]
#[cfg_attr(test, derive(PartialEq, Debug))]
#[derive(Deserialize, Clone, Debug)]
#[cfg_attr(test, derive(PartialEq))]
pub struct VersionUpdateInfo {
pub version_update_type: String,
pub new_tag: String,
@@ -41,8 +41,8 @@ pub struct VersionUpdateInfo {
pub new_version: String,
}
#[derive(Deserialize, Clone)]
#[cfg_attr(test, derive(PartialEq, Debug))]
#[derive(Deserialize, Clone, Debug)]
#[cfg_attr(test, derive(PartialEq))]
pub struct DigestUpdateInfo {
pub local_digests: Vec<String>,
pub remote_digest: Option<String>,
@@ -53,10 +53,12 @@ impl Serialize for VersionUpdateInfo {
where
S: serde::Serializer,
{
let mut state = serializer.serialize_struct("VersionUpdateInfo", 3)?;
let mut state = serializer.serialize_struct("VersionUpdateInfo", 5)?;
let _ = state.serialize_field("type", "version");
let _ = state.serialize_field("version_update_type", &self.version_update_type);
let _ = state.serialize_field("new_tag", &self.new_tag);
let _ = state.serialize_field("current_version", &self.current_version);
let _ = state.serialize_field("new_version", &self.new_version);
state.end()
}
}