From 80b99c27a59f82c16bffc62f8f89d678cbd6a3eb Mon Sep 17 00:00:00 2001 From: kjuulh Date: Fri, 29 Dec 2023 19:43:04 +0100 Subject: [PATCH] feat: with cuddle please Signed-off-by: kjuulh --- Cargo.lock | 1 + crates/cuddle-ci/Cargo.toml | 1 + crates/cuddle-ci/src/cli.rs | 41 +++++++++++++++----------- crates/cuddle-ci/src/lib.rs | 40 +++++++++++++++++++++++++ crates/dagger-cuddle-please/src/lib.rs | 4 +-- 5 files changed, 68 insertions(+), 19 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 3f7fae3..ec31792 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -326,6 +326,7 @@ version = "0.2.0" dependencies = [ "async-trait", "clap", + "dagger-cuddle-please", "dagger-rust", "dagger-sdk", "eyre", diff --git a/crates/cuddle-ci/Cargo.toml b/crates/cuddle-ci/Cargo.toml index cfcf24d..065257e 100644 --- a/crates/cuddle-ci/Cargo.toml +++ b/crates/cuddle-ci/Cargo.toml @@ -11,6 +11,7 @@ repository.workspace = true [dependencies] dagger-rust.workspace = true +dagger-cuddle-please.workspace = true dagger-sdk.workspace = true eyre.workspace = true diff --git a/crates/cuddle-ci/src/cli.rs b/crates/cuddle-ci/src/cli.rs index 138dd56..2549bbf 100644 --- a/crates/cuddle-ci/src/cli.rs +++ b/crates/cuddle-ci/src/cli.rs @@ -4,9 +4,9 @@ use async_trait::async_trait; use tokio::sync::Mutex; pub struct CuddleCI { - pr_action: Arc>, - main_action: Arc>, - release_action: Arc>, + pr_action: Vec>>, + main_action: Vec>>, + release_action: Vec>>, } impl CuddleCI { @@ -16,9 +16,9 @@ impl CuddleCI { release: Arc>, ) -> Self { Self { - pr_action: pr, - main_action: main, - release_action: release, + pr_action: vec![pr], + main_action: vec![main], + release_action: vec![release], } } @@ -26,13 +26,13 @@ impl CuddleCI { &mut self, pr: Arc>, ) -> &mut Self { - self.pr_action = pr; + self.pr_action.push(pr); self } pub fn with_main(&mut self, main: Arc>) -> &mut Self { - self.main_action = main; + self.main_action.push(main); self } @@ -41,7 +41,7 @@ impl CuddleCI { &mut self, release: Arc>, ) -> &mut Self { - self.release_action = release; + self.release_action.push(release); self } @@ -62,17 +62,23 @@ impl CuddleCI { Some((name, args)) => match (name, args) { ("pr", _args) => { eprintln!("starting pr validate"); - self.pr_action.lock().await.execute_pull_request().await?; + for pr_action in self.pr_action.iter() { + pr_action.lock().await.execute_pull_request().await?; + } eprintln!("finished pr validate"); } ("main", _args) => { eprintln!("starting main validate"); - self.main_action.lock().await.execute_main().await?; + for main_action in self.main_action.iter() { + main_action.lock().await.execute_main().await?; + } eprintln!("finished main validate"); } ("release", _args) => { eprintln!("starting release validate"); - self.release_action.lock().await.execute_release().await?; + for release_action in self.release_action.iter() { + release_action.lock().await.execute_release().await?; + } eprintln!("finished release validate"); } (command_name, _) => { @@ -110,15 +116,16 @@ impl PullRequestAction for DefaultPullRequestAction {} #[async_trait] pub trait MainAction { - async fn execute_main(&self) -> eyre::Result<()> { - eprintln!("validate main: noop"); - Ok(()) - } + async fn execute_main(&self) -> eyre::Result<()>; } pub struct DefaultMainAction {} #[async_trait] -impl MainAction for DefaultMainAction {} +impl MainAction for DefaultMainAction { + async fn execute_main(&self) -> eyre::Result<()> { + Ok(()) + } +} #[async_trait] pub trait ReleaseAction { diff --git a/crates/cuddle-ci/src/lib.rs b/crates/cuddle-ci/src/lib.rs index adbe70e..f1e1c1f 100644 --- a/crates/cuddle-ci/src/lib.rs +++ b/crates/cuddle-ci/src/lib.rs @@ -6,3 +6,43 @@ pub mod dagger_middleware; pub mod node_service; pub mod rust_lib; pub mod rust_service; +pub mod cuddle_please { + use async_trait::async_trait; + use dagger_cuddle_please::{ + models::CuddlePleaseSrcArgs, DaggerCuddlePlease, DaggerCuddlePleaseAction, + }; + + use crate::{MainAction, PullRequestAction}; + + pub struct CuddlePlease { + client: dagger_sdk::Query, + } + + impl CuddlePlease { + pub fn new(client: dagger_sdk::Query) -> Self { + Self { client } + } + } + + #[async_trait] + impl MainAction for CuddlePlease { + async fn execute_main(&self) -> eyre::Result<()> { + let client = self.client.clone(); + + let action = DaggerCuddlePlease::new(client); + + action + .cuddle_please_src(&CuddlePleaseSrcArgs { + cuddle_image: "kasperhermansen/cuddle-please:latest".into(), + server: dagger_cuddle_please::models::SrcServer::Gitea { + token: std::env::var("CUDDLE_PLEASE_TOKEN") + .expect("CUDDLE_PLEASE_TOKEN to be present"), + }, + log_level: Some(dagger_cuddle_please::models::LogLevel::Debug), + }) + .await?; + + Ok(()) + } + } +} diff --git a/crates/dagger-cuddle-please/src/lib.rs b/crates/dagger-cuddle-please/src/lib.rs index 07c806b..df3f4f8 100644 --- a/crates/dagger-cuddle-please/src/lib.rs +++ b/crates/dagger-cuddle-please/src/lib.rs @@ -1,4 +1,4 @@ -use std::sync::{Arc}; +use std::sync::Arc; use models::{CuddlePleaseArgs, CuddlePleaseSrcArgs}; use traits::CuddlePlease; @@ -103,7 +103,7 @@ impl DaggerCuddlePleaseAction { } #[derive(Clone)] -struct DaggerCuddlePlease { +pub struct DaggerCuddlePlease { client: dagger_sdk::Query, }