use crate::compose::types::ComposeFile;
use crate::error::Result;
use crate::libpod::types::image::ImageInspect;
use crate::libpod::{urlencoded, Client, API_PREFIX};
pub async fn resolve_image_digests(client: &Client, file: &ComposeFile) -> Result<ComposeFile> {
let mut out = file.clone();
for (name, svc) in out.services.iter_mut() {
let Some(image) = svc.image.clone() else {
continue;
};
let path = format!("{API_PREFIX}/images/{}/json", urlencoded(&image));
match client.get_json::<ImageInspect>(&path).await {
Ok(info) => match info.repo_digests.into_iter().next() {
Some(digest) => svc.image = Some(digest),
None => tracing::warn!(
"config --resolve-image-digests: no registry digest for {image} \
(service {name}); left unchanged"
),
},
Err(e) => tracing::warn!(
"config --resolve-image-digests: cannot inspect {image} (service {name}): {e}"
),
}
}
Ok(out)
}