From bcdfaf2b2d9a4da0fb4f3f10bf8785fc80d487d9 Mon Sep 17 00:00:00 2001 From: kjuulh Date: Fri, 1 Dec 2023 21:41:13 +0100 Subject: [PATCH] feat: with docker cache Signed-off-by: kjuulh --- crates/cuddle-ci/src/rust_service.rs | 2 + .../src/rust_service/docker_cache.rs | 52 +++++++++++++++++++ 2 files changed, 54 insertions(+) create mode 100644 crates/cuddle-ci/src/rust_service/docker_cache.rs diff --git a/crates/cuddle-ci/src/rust_service.rs b/crates/cuddle-ci/src/rust_service.rs index 9b784b3..5bcd341 100644 --- a/crates/cuddle-ci/src/rust_service.rs +++ b/crates/cuddle-ci/src/rust_service.rs @@ -407,6 +407,7 @@ mod assets; mod cargo_binstall; mod cargo_clean; mod clap_sanity_test; +mod docker_cache; mod mold; mod sqlx; @@ -417,6 +418,7 @@ pub mod extensions { pub use super::cargo_binstall::*; pub use super::cargo_clean::*; pub use super::clap_sanity_test::*; + pub use super::docker_cache::*; pub use super::mold::*; pub use super::sqlx::*; } diff --git a/crates/cuddle-ci/src/rust_service/docker_cache.rs b/crates/cuddle-ci/src/rust_service/docker_cache.rs new file mode 100644 index 0000000..93519ab --- /dev/null +++ b/crates/cuddle-ci/src/rust_service/docker_cache.rs @@ -0,0 +1,52 @@ +use std::sync::Arc; + +use async_trait::async_trait; +use dagger_sdk::Container; + +use crate::dagger_middleware::DaggerMiddleware; + +use super::RustService; + +pub struct DockerCache { + client: dagger_sdk::Query, + image_name: String, +} + +impl DockerCache { + pub fn new(client: dagger_sdk::Query, image_name: impl Into) -> Self { + Self { + client, + image_name: image_name.into(), + } + } +} + +#[async_trait] +impl DaggerMiddleware for DockerCache { + async fn handle(&self, container: Container) -> eyre::Result { + container + .publish(format!( + "harbor.front.kjuulh.io/cache/{}:cache", + self.image_name + )) + .await?; + + Ok(container) + } +} + +pub trait DockerCacheExt { + fn with_docker_cache(&mut self) -> &mut Self { + self + } +} + +impl DockerCacheExt for RustService { + fn with_docker_cache(&mut self) -> &mut Self { + self.with_stage(super::RustServiceStage::AfterRelease(Arc::new( + DockerCache::new(self.client.clone(), self.bin_name.clone()), + ))); + + self + } +}