m/cup
1
0
mirror of https://github.com/sergi0g/cup.git synced 2025-11-16 09:03:46 -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 let handles: Vec<_> = ctx.config.servers
.iter() .iter()
.map(|(name, url)| async { .map(|(name, url)| async move {
let base_url = if url.starts_with("http://") || url.starts_with("https://") { let base_url = if url.starts_with("http://") || url.starts_with("https://") {
format!("{}/api/v3/", url.trim_end_matches('/')) format!("{}/api/v3/", url.trim_end_matches('/'))
} else { } else {
@@ -47,16 +47,21 @@ async fn get_remote_updates(ctx: &Context, client: &Client, refresh: bool) -> Ve
return Vec::new(); return Vec::new();
} }
let json = parse_json(&get_response_body(response).await); 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() { if let Some(updates) = json["images"].as_array() {
let mut server_updates: Vec<Update> = updates let mut server_updates: Vec<Update> = updates
.iter() .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(); .collect();
// Add server origin to each image // Add server origin to each image
for update in &mut server_updates { for update in &mut server_updates {
update.server = Some(name.clone()); update.server = Some(name.clone());
update.status = update.get_status(); update.status = update.get_status();
} }
ctx.logger.debug(format!("Updates for {}: {:#?}", name, server_updates));
return server_updates; return server_updates;
} }

View File

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

View File

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