feat: with updated dagger-sdk
Signed-off-by: kjuulh <contact@kjuulh.io>
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
use std::sync::Arc;
|
||||
use std::sync::{Arc, Mutex};
|
||||
|
||||
use models::{CuddlePleaseArgs, CuddlePleaseSrcArgs};
|
||||
use traits::CuddlePlease;
|
||||
@@ -80,11 +80,11 @@ pub mod traits {
|
||||
}
|
||||
}
|
||||
|
||||
pub struct DaggerCuddlePleaseAction(Arc<dyn CuddlePlease + Send + Sync + 'static>);
|
||||
pub struct DaggerCuddlePleaseAction(Arc<dyn CuddlePlease>);
|
||||
|
||||
impl DaggerCuddlePleaseAction {
|
||||
/// Create a [`traits::CuddlePlease`] client based on dagger
|
||||
pub fn dagger(client: Arc<dagger_sdk::Query>) -> Self {
|
||||
pub fn dagger(client: dagger_sdk::Query) -> Self {
|
||||
Self(Arc::new(DaggerCuddlePlease::new(client)))
|
||||
}
|
||||
|
||||
@@ -104,31 +104,27 @@ impl DaggerCuddlePleaseAction {
|
||||
|
||||
#[derive(Clone)]
|
||||
struct DaggerCuddlePlease {
|
||||
client: Arc<dagger_sdk::Query>,
|
||||
client: dagger_sdk::Query,
|
||||
}
|
||||
|
||||
#[async_trait::async_trait]
|
||||
impl CuddlePlease for DaggerCuddlePlease {
|
||||
async fn execute(&self, args: &CuddlePleaseArgs) -> eyre::Result<()> {
|
||||
self.cuddle_please(self.client.clone(), args).await
|
||||
self.cuddle_please(args).await
|
||||
}
|
||||
|
||||
async fn execute_src(&self, args: &CuddlePleaseSrcArgs) -> eyre::Result<()> {
|
||||
self.cuddle_please_src(self.client.clone(), args).await
|
||||
self.cuddle_please_src(args).await
|
||||
}
|
||||
}
|
||||
|
||||
impl DaggerCuddlePlease {
|
||||
pub fn new(client: Arc<dagger_sdk::Query>) -> Self {
|
||||
pub fn new(client: dagger_sdk::Query) -> Self {
|
||||
Self { client }
|
||||
}
|
||||
|
||||
pub async fn cuddle_please(
|
||||
&self,
|
||||
client: Arc<dagger_sdk::Query>,
|
||||
args: &CuddlePleaseArgs,
|
||||
) -> eyre::Result<()> {
|
||||
let build_image = client.container().from(&args.cuddle_image);
|
||||
pub async fn cuddle_please(&self, args: &CuddlePleaseArgs) -> eyre::Result<()> {
|
||||
let build_image = self.client.container().from(&args.cuddle_image);
|
||||
|
||||
let repo_url = match &args.server {
|
||||
Server::Gitea {
|
||||
@@ -182,11 +178,12 @@ impl DaggerCuddlePlease {
|
||||
};
|
||||
|
||||
let src = if args.use_ssh_socket {
|
||||
let socket = client
|
||||
let socket = self
|
||||
.client
|
||||
.host()
|
||||
.unix_socket(std::env::var("SSH_AGENT").expect("SSH_AGENT to be set"));
|
||||
|
||||
client
|
||||
self.client
|
||||
.git_opts(
|
||||
&repo_url,
|
||||
dagger_sdk::QueryGitOpts {
|
||||
@@ -200,7 +197,7 @@ impl DaggerCuddlePlease {
|
||||
ssh_known_hosts: None,
|
||||
})
|
||||
} else {
|
||||
client
|
||||
self.client
|
||||
.git_opts(
|
||||
&repo_url,
|
||||
dagger_sdk::QueryGitOpts {
|
||||
@@ -215,19 +212,16 @@ impl DaggerCuddlePlease {
|
||||
let res = build_image
|
||||
.with_secret_variable(
|
||||
"CUDDLE_PLEASE_TOKEN",
|
||||
client
|
||||
.set_secret(
|
||||
"CUDDLE_PLEASE_TOKEN",
|
||||
match &args.server {
|
||||
Server::Gitea { token, .. } => token,
|
||||
Server::GitHub { token } => token,
|
||||
},
|
||||
)
|
||||
.id()
|
||||
.await?,
|
||||
self.client.set_secret(
|
||||
"CUDDLE_PLEASE_TOKEN",
|
||||
match &args.server {
|
||||
Server::Gitea { token, .. } => token,
|
||||
Server::GitHub { token } => token,
|
||||
},
|
||||
),
|
||||
)
|
||||
.with_workdir("/mnt/app")
|
||||
.with_directory(".", src.id().await?)
|
||||
.with_directory(".", src)
|
||||
.with_exec(vec!["git", "remote", "set-url", "origin", &repo_url])
|
||||
.with_exec(vec![
|
||||
"cuddle-please",
|
||||
@@ -257,10 +251,7 @@ impl DaggerCuddlePlease {
|
||||
},
|
||||
]);
|
||||
|
||||
let exit_code = res.exit_code().await?;
|
||||
if exit_code != 0 {
|
||||
eyre::bail!("failed to run cuddle-please");
|
||||
}
|
||||
res.sync().await?;
|
||||
|
||||
let please_out = res.stdout().await?;
|
||||
println!("{please_out}");
|
||||
@@ -269,37 +260,26 @@ impl DaggerCuddlePlease {
|
||||
|
||||
Ok(())
|
||||
}
|
||||
pub async fn cuddle_please_src(
|
||||
&self,
|
||||
client: Arc<dagger_sdk::Query>,
|
||||
args: &CuddlePleaseSrcArgs,
|
||||
) -> eyre::Result<()> {
|
||||
let build_image = client.container().from(&args.cuddle_image);
|
||||
pub async fn cuddle_please_src(&self, args: &CuddlePleaseSrcArgs) -> eyre::Result<()> {
|
||||
let build_image = self.client.container().from(&args.cuddle_image);
|
||||
let res = build_image
|
||||
.with_secret_variable(
|
||||
"CUDDLE_PLEASE_TOKEN",
|
||||
client
|
||||
.set_secret(
|
||||
"CUDDLE_PLEASE_TOKEN",
|
||||
match &args.server {
|
||||
SrcServer::Gitea { token, .. } => token,
|
||||
SrcServer::GitHub { token } => token,
|
||||
},
|
||||
)
|
||||
.id()
|
||||
.await?,
|
||||
self.client.set_secret(
|
||||
"CUDDLE_PLEASE_TOKEN",
|
||||
match &args.server {
|
||||
SrcServer::Gitea { token, .. } => token,
|
||||
SrcServer::GitHub { token } => token,
|
||||
},
|
||||
),
|
||||
)
|
||||
.with_workdir("/mnt/app")
|
||||
.with_directory(".", client.host().directory(".").id().await?)
|
||||
.with_directory(".", self.client.host().directory("."))
|
||||
.with_unix_socket(
|
||||
"/tmp/ssh.sock",
|
||||
client
|
||||
.host()
|
||||
.unix_socket(
|
||||
std::env::var("SSH_AUTH_SOCK").expect("expect SSH_AUTH_SOCK to be present"),
|
||||
)
|
||||
.id()
|
||||
.await?,
|
||||
self.client.host().unix_socket(
|
||||
std::env::var("SSH_AUTH_SOCK").expect("expect SSH_AUTH_SOCK to be present"),
|
||||
),
|
||||
)
|
||||
.with_env_variable("SSH_AUTH_SOCK", "/tmp/ssh.sock")
|
||||
.with_new_file_opts(
|
||||
@@ -357,10 +337,7 @@ Host *
|
||||
},
|
||||
]);
|
||||
|
||||
let exit_code = res.exit_code().await?;
|
||||
if exit_code != 0 {
|
||||
eyre::bail!("failed to run cuddle-please");
|
||||
}
|
||||
res.sync().await?;
|
||||
|
||||
let please_out = res.stdout().await?;
|
||||
println!("{please_out}");
|
||||
|
Reference in New Issue
Block a user