diff --git a/crates/cuddle-ci/src/rust_service.rs b/crates/cuddle-ci/src/rust_service.rs index 44e7a6c..00ab8eb 100644 --- a/crates/cuddle-ci/src/rust_service.rs +++ b/crates/cuddle-ci/src/rust_service.rs @@ -7,7 +7,7 @@ use futures::{stream, StreamExt}; use crate::{ dagger_middleware::{DaggerMiddleware, DynMiddleware}, - Context, MainAction, PullRequestAction, + Context, MainAction, PullRequestAction, ReleaseAction, }; use self::architecture::{Architecture, Os}; @@ -348,6 +348,32 @@ impl PullRequestAction for RustService { } } +#[async_trait] +impl ReleaseAction for RustService { + async fn execute_release(&self, ctx: &mut Context) -> eyre::Result<()> { + self.build_test().await?; + + let container = self.build_release().await?; + + let tag = { + if let Ok(tag) = std::env::var("RELEASE_TAG") { + tag + } else if let Ok(tag) = std::env::var("DRONE_TAG") { + tag + } else { + eyre::bail!("failed to find a valid tag"); + } + }; + + let tag = format!("docker.io/kasperhermansen/{}:{}", self.bin_name, tag); + + container.publish(&tag).await?; + ctx.set_image_tag(tag)?; + + Ok(()) + } +} + const IMAGE_TAG: &str = "RUST_SERVICE_IMAGE_TAG"; pub trait RustServiceContext { @@ -488,8 +514,6 @@ pub mod extensions { #[cfg(test)] mod test { - - #[tokio::test] #[cfg(any(feature = "dagger", feature = "integration"))] async fn test_can_build_rust() -> eyre::Result<()> {