From 7d586337e944621c186c5ca5b09312ebe5f83e9b Mon Sep 17 00:00:00 2001 From: kjuulh Date: Sat, 6 Apr 2024 22:29:06 +0200 Subject: [PATCH] feat: add dagger bin Signed-off-by: kjuulh --- crates/cuddle-ci/src/rust_service.rs | 2 + .../cuddle-ci/src/rust_service/dagger_bin.rs | 61 +++++++++++++++++++ 2 files changed, 63 insertions(+) create mode 100644 crates/cuddle-ci/src/rust_service/dagger_bin.rs diff --git a/crates/cuddle-ci/src/rust_service.rs b/crates/cuddle-ci/src/rust_service.rs index 3eb5e29..b659aef 100644 --- a/crates/cuddle-ci/src/rust_service.rs +++ b/crates/cuddle-ci/src/rust_service.rs @@ -443,6 +443,7 @@ mod cargo_clean; mod clap_sanity_test; mod cuddle_cli; mod cuddle_file; +mod dagger_bin; mod docker_cache; mod docker_cli; mod kubectl; @@ -460,6 +461,7 @@ pub mod extensions { pub use super::clap_sanity_test::*; pub use super::cuddle_cli::*; pub use super::cuddle_file::*; + pub use super::dagger_bin::*; pub use super::docker_cache::*; pub use super::docker_cli::*; pub use super::kubectl::*; diff --git a/crates/cuddle-ci/src/rust_service/dagger_bin.rs b/crates/cuddle-ci/src/rust_service/dagger_bin.rs new file mode 100644 index 0000000..975f053 --- /dev/null +++ b/crates/cuddle-ci/src/rust_service/dagger_bin.rs @@ -0,0 +1,61 @@ +use std::sync::Arc; + +use async_trait::async_trait; +use dagger_sdk::{Container, ImageMediaTypes}; + +use crate::dagger_middleware::DaggerMiddleware; + +use super::RustService; + +pub struct DaggerBin { + client: dagger_sdk::Query, + version: String, +} + +impl DaggerBin { + pub fn new(client: dagger_sdk::Query, version: impl Into) -> Self { + Self { + client, + version: version.into(), + } + } +} + +#[async_trait] +impl DaggerMiddleware for DaggerBin { + async fn handle(&self, container: Container) -> eyre::Result { + let install_script = self.client.http("https://dl.dagger.io/dagger/install.sh"); + + let dagger_bin = self + .client + .container() + .from("debian:bookworm") + .with_file_opts( + "/mnt/install.sh", + install_script, + dagger_sdk::ContainerWithFileOpts { + owner: None, + permissions: Some(755), + }, + ) + .with_env_variable("DAGGER_VERSION", self.version) + .with_exec(vec!["/mtn/install.sh"]) + .file("/bin/dagger"); + + Some(container.with_file("/bin/dagger", dagger_bin)) + } +} + +pub trait DaggerBinExt { + fn with_dagger_bin(&mut self, dagger_version: impl Into) -> &mut Self; +} + +impl DaggerBinExt for RustService { + fn with_dagger_bin(&mut self, dagger_version: impl Into) -> &mut Self { + self.with_stage(super::RustServiceStage::AfterPackage(Arc::new( + DaggerBin::new(self.client.clone(), dagger_version.into()), + ))); + + self + } +}