@@ -3,6 +3,8 @@ use cuddle_ci::rust_service::architecture::{Architecture, Os};
|
||||
use cuddle_ci::rust_service::extensions::*;
|
||||
use cuddle_ci::rust_service::RustService;
|
||||
use cuddle_ci::{cuddle_please, CuddleCI};
|
||||
use dagger_sdk::HostDirectoryOptsBuilder;
|
||||
use eyre::Context;
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> eyre::Result<()> {
|
||||
@@ -22,11 +24,13 @@ async fn main() -> eyre::Result<()> {
|
||||
.to_owned();
|
||||
|
||||
let cuddle_please = &cuddle_please::CuddlePlease::new(client.clone());
|
||||
let rust_releaser = &RustReleaser::new(client.clone());
|
||||
|
||||
CuddleCI::default()
|
||||
.with_pull_request(service)
|
||||
.with_main(service)
|
||||
.with_main(cuddle_please)
|
||||
.with_release(rust_releaser)
|
||||
.execute(std::env::args())
|
||||
.await?;
|
||||
|
||||
@@ -35,3 +39,48 @@ async fn main() -> eyre::Result<()> {
|
||||
.await?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[derive(Clone)]
|
||||
pub struct RustReleaser {
|
||||
client: dagger_sdk::Query,
|
||||
}
|
||||
|
||||
impl RustReleaser {
|
||||
pub fn new(client: dagger_sdk::Query) -> Self {
|
||||
Self { client }
|
||||
}
|
||||
}
|
||||
|
||||
#[async_trait::async_trait]
|
||||
impl cuddle_ci::ReleaseAction for RustReleaser {
|
||||
async fn execute_release(&self, _ctx: &mut cuddle_ci::Context) -> eyre::Result<()> {
|
||||
let cuddle_file = CuddleFile::from_cuddle_file().await?;
|
||||
|
||||
let crates_token = std::env::var("CRATES_IO_TOKEN")
|
||||
.context("failed to find crates.io token (env: CRATES_IO_TOKEN)")?;
|
||||
|
||||
let rust_image = self.client.container().from("rustlang/rust:nightly");
|
||||
|
||||
let src = self.client.host().directory_opts(
|
||||
".",
|
||||
HostDirectoryOptsBuilder::default()
|
||||
.exclude([".git/", ".cuddle/", "target/"])
|
||||
.build()?,
|
||||
);
|
||||
|
||||
let service = &cuddle_file.vars.service;
|
||||
|
||||
rust_image
|
||||
.with_workdir("/mnt/src")
|
||||
.with_directory("/mnt/src", src)
|
||||
.with_secret_variable(
|
||||
"CARGO_REGISTRY_TOKEN",
|
||||
self.client.set_secret("CARGO_REGISTRY_TOKEN", crates_token),
|
||||
)
|
||||
.with_exec(vec!["cargo", "publish", "-p", service, "--allow-dirty"])
|
||||
.sync()
|
||||
.await?;
|
||||
|
||||
Ok(())
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user