mirror of
https://github.com/moghtech/komodo.git
synced 2026-09-11 16:01:27 +00:00
66 lines
1.5 KiB
Rust
66 lines
1.5 KiB
Rust
use monitor_client::entities::{to_monitor_name, update::Log};
|
|
use periphery_client::api::git::{CloneRepo, DeleteRepo, PullRepo};
|
|
use resolver_api::Resolve;
|
|
|
|
use crate::{config::periphery_config, helpers::git, State};
|
|
|
|
#[async_trait::async_trait]
|
|
impl Resolve<CloneRepo> for State {
|
|
#[instrument(name = "CloneRepo", skip(self))]
|
|
async fn resolve(
|
|
&self,
|
|
CloneRepo { args, github_token }: CloneRepo,
|
|
_: (),
|
|
) -> anyhow::Result<Vec<Log>> {
|
|
git::clone(args, github_token).await
|
|
}
|
|
}
|
|
|
|
//
|
|
|
|
#[async_trait::async_trait]
|
|
impl Resolve<PullRepo> for State {
|
|
#[instrument(name = "PullRepo", skip(self))]
|
|
async fn resolve(
|
|
&self,
|
|
PullRepo {
|
|
name,
|
|
branch,
|
|
on_pull,
|
|
}: PullRepo,
|
|
_: (),
|
|
) -> anyhow::Result<Vec<Log>> {
|
|
let name = to_monitor_name(&name);
|
|
Ok(
|
|
git::pull(
|
|
&periphery_config().repo_dir.join(name),
|
|
&branch,
|
|
&on_pull,
|
|
)
|
|
.await,
|
|
)
|
|
}
|
|
}
|
|
|
|
//
|
|
|
|
#[async_trait::async_trait]
|
|
impl Resolve<DeleteRepo> for State {
|
|
#[instrument(name = "DeleteRepo", skip(self))]
|
|
async fn resolve(
|
|
&self,
|
|
DeleteRepo { name }: DeleteRepo,
|
|
_: (),
|
|
) -> anyhow::Result<Log> {
|
|
let name = to_monitor_name(&name);
|
|
let deleted = std::fs::remove_dir_all(
|
|
periphery_config().repo_dir.join(&name),
|
|
);
|
|
let msg = match deleted {
|
|
Ok(_) => format!("deleted repo {name}"),
|
|
Err(_) => format!("no repo at {name} to delete"),
|
|
};
|
|
Ok(Log::simple("delete repo", msg))
|
|
}
|
|
}
|