87 lines
1.7 KiB
Rust
87 lines
1.7 KiB
Rust
use std::{ops::Deref, sync::Arc};
|
|
|
|
use sqlx::PgPool;
|
|
|
|
use crate::services::{
|
|
archive::Archive,
|
|
cluster_list::ClusterList,
|
|
git::{Git, SharedGit},
|
|
};
|
|
|
|
use self::infra::{
|
|
aws_s3::s3_client,
|
|
grpc::{new_client, FluxReleaserGrpcClient},
|
|
};
|
|
|
|
#[derive(Clone)]
|
|
pub struct SharedApp(Arc<App>);
|
|
|
|
impl Deref for SharedApp {
|
|
type Target = Arc<App>;
|
|
|
|
fn deref(&self) -> &Self::Target {
|
|
&self.0
|
|
}
|
|
}
|
|
|
|
impl SharedApp {
|
|
pub fn new(app: App) -> Self {
|
|
Self(Arc::new(app))
|
|
}
|
|
}
|
|
|
|
pub struct App {
|
|
pub s3_client: aws_sdk_s3::Client,
|
|
pub nats: infra::nats::Nats,
|
|
pub database: PgPool,
|
|
pub git: SharedGit,
|
|
}
|
|
|
|
impl App {
|
|
pub async fn new() -> anyhow::Result<Self> {
|
|
Ok(Self {
|
|
s3_client: s3_client().await?,
|
|
nats: infra::nats::Nats::new().await?,
|
|
database: infra::database::get_database().await?,
|
|
git: Git::new(
|
|
std::env::var("FLUX_RELEASER_GIT_REPOSITORY")
|
|
.unwrap_or("ssh://git@git.front.kjuulh.io/kjuulh/clank-clusters.git".into()),
|
|
ClusterList::default(),
|
|
Archive::default(),
|
|
)
|
|
.into(),
|
|
})
|
|
}
|
|
}
|
|
|
|
pub mod infra;
|
|
|
|
#[derive(Clone)]
|
|
pub struct SharedLocalApp(Arc<LocalApp>);
|
|
|
|
impl Deref for SharedLocalApp {
|
|
type Target = Arc<LocalApp>;
|
|
|
|
fn deref(&self) -> &Self::Target {
|
|
&self.0
|
|
}
|
|
}
|
|
|
|
impl SharedLocalApp {
|
|
pub fn new(app: LocalApp) -> Self {
|
|
Self(Arc::new(app))
|
|
}
|
|
}
|
|
|
|
pub struct LocalApp {
|
|
pub grpc_client: FluxReleaserGrpcClient,
|
|
}
|
|
|
|
impl LocalApp {
|
|
pub async fn new(registry: impl Into<String>) -> anyhow::Result<Self> {
|
|
Ok(Self {
|
|
grpc_client: new_client(registry).await?,
|
|
})
|
|
}
|
|
}
|