From 28476af222d76ee28ff36d1aa9eca7a871e44505 Mon Sep 17 00:00:00 2001 From: tahahawa Date: Wed, 9 Jul 2025 00:24:02 -0400 Subject: [PATCH] push using bollard --- harmony/src/modules/application/rust.rs | 36 +++++++++---------------- 1 file changed, 13 insertions(+), 23 deletions(-) diff --git a/harmony/src/modules/application/rust.rs b/harmony/src/modules/application/rust.rs index 8e1d03b..f991dc2 100644 --- a/harmony/src/modules/application/rust.rs +++ b/harmony/src/modules/application/rust.rs @@ -5,6 +5,8 @@ use std::process; use std::sync::Arc; use async_trait::async_trait; +use bollard::image::PushImageOptions; +use bollard::query_parameters::PushImageOptionsBuilder; use bollard::{Docker, body_full}; use dockerfile_builder::Dockerfile; use dockerfile_builder::instruction::{CMD, COPY, ENV, EXPOSE, FROM, RUN, USER, WORKDIR}; @@ -123,6 +125,7 @@ impl OCICompliant for RustWebapp { let remote_image_name = self.image_name(); // 2. Push the image to the registry. self.push_docker_image(&local_image_name, &remote_image_name) + .await .map_err(|e| format!("Failed to push Docker image: {}", e))?; info!("Successfully pushed Docker image to: {}", remote_image_name); @@ -204,36 +207,23 @@ impl RustWebapp { } /// Tags and pushes a Docker image to the configured remote registry. - fn push_docker_image( + async fn push_docker_image( &self, image_name: &str, full_tag: &str, ) -> Result> { info!("Pushing docker image {full_tag}"); - // Tag the image for the remote registry. - let output = process::Command::new("docker") - .args(["tag", image_name, &full_tag]) - .spawn()? - .wait_with_output()?; - self.check_output(&output, "Tagging docker image failed")?; - debug!( - "docker tag output: stdout: {}, stderr: {}", - String::from_utf8_lossy(&output.stdout), - String::from_utf8_lossy(&output.stderr) - ); + let docker = Docker::connect_with_socket_defaults().unwrap(); - // Push the image. - let output = process::Command::new("docker") - .args(["push", &full_tag]) - .spawn()? - .wait_with_output()?; - self.check_output(&output, "Pushing docker image failed")?; - debug!( - "docker push output: stdout: {}, stderr: {}", - String::from_utf8_lossy(&output.stdout), - String::from_utf8_lossy(&output.stderr) - ); + // let push_options = PushImageOptionsBuilder::new().tag(tag); + + let mut push_image_stream = + docker.push_image(full_tag, Some(PushImageOptionsBuilder::new().build()), None); + + while let Some(msg) = push_image_stream.next().await { + println!("Message: {msg:?}"); + } Ok(full_tag.to_string()) }