All checks were successful
continuous-integration/drone/push Build is passing
Signed-off-by: kjuulh <contact@kjuulh.io>
149 lines
4.8 KiB
Rust
149 lines
4.8 KiB
Rust
use std::collections::HashMap;
|
|
use std::path::PathBuf;
|
|
use std::time::{SystemTime, UNIX_EPOCH};
|
|
|
|
use async_trait::async_trait;
|
|
use cuddle_ci::cuddle_file::CuddleFile;
|
|
use cuddle_ci::cuddle_please::CuddlePlease;
|
|
use cuddle_ci::cuddle_releaser::CuddleReleaser;
|
|
use cuddle_ci::rust_service::architecture::{Architecture, Os};
|
|
use cuddle_ci::rust_service::RustService;
|
|
use cuddle_ci::rust_service::{extensions::*, RustServiceContext};
|
|
use cuddle_ci::{Context, CuddleCI, MainAction, PullRequestAction};
|
|
use cuddle_clusters::catalog::cluster_vars::ClusterVars;
|
|
use cuddle_clusters::catalog::crdb_database::CockroachDB;
|
|
use cuddle_clusters::catalog::cuddle_vars::CuddleVars;
|
|
use cuddle_clusters::catalog::ingress::Ingress;
|
|
use cuddle_clusters::catalog::postgres_database::PostgresDatabase;
|
|
use cuddle_clusters::catalog::vault_secret::VaultSecret;
|
|
use cuddle_clusters::releaser::Releaser;
|
|
use cuddle_clusters::IntoComponent;
|
|
|
|
#[tokio::main]
|
|
async fn main() -> eyre::Result<()> {
|
|
tracing_subscriber::fmt::init();
|
|
|
|
dagger_sdk::connect(|client| async move {
|
|
let cuddle_file = CuddleFile::from_cuddle_file().await?;
|
|
|
|
let service = &RustService::from(client.clone())
|
|
.with_cuddle_file(&cuddle_file)
|
|
.with_arch(Architecture::Amd64)
|
|
.with_os(Os::Linux)
|
|
.with_apt(&["libssl-dev", "libz-dev", "libpq-dev", "protobuf-compiler"])
|
|
.with_apt_release(&["libssl-dev", "libz-dev", "libpq-dev"])
|
|
.with_apt_ca_certificates()
|
|
.with_workspace_crates()
|
|
.await
|
|
.with_mold("2.3.3")
|
|
.to_owned();
|
|
|
|
let deployment = &CuddleReleaser::new(client.clone()).await?;
|
|
|
|
let mut ci = CuddleCI::default();
|
|
ci.with_pull_request(service)
|
|
.with_main(service)
|
|
.with_main(deployment);
|
|
|
|
if cuddle_file.please.is_some() {
|
|
ci.with_main(&CuddlePlease::new(client.clone()));
|
|
}
|
|
|
|
ci.execute(std::env::args()).await?;
|
|
|
|
Ok(())
|
|
})
|
|
.await?;
|
|
|
|
Ok(())
|
|
}
|
|
|
|
#[derive(Default, Clone)]
|
|
struct RustServiceRender {
|
|
service: String,
|
|
registry: String,
|
|
}
|
|
|
|
impl RustServiceRender {
|
|
async fn render_templates(&self, image_tag: &str) -> eyre::Result<()> {
|
|
let mut releaser = Releaser::default();
|
|
|
|
releaser
|
|
.with_service(&self.service)
|
|
.with_registry(&self.registry);
|
|
|
|
match cuddle_clusters::process_opts(
|
|
vec![
|
|
CuddleVars::new(&std::env::current_dir()?)
|
|
.await
|
|
.map_err(|e| eyre::anyhow!("failed to get cuddle vars: {}", e.to_string()))?
|
|
.into_component(),
|
|
ClusterVars::default().into_component(),
|
|
VaultSecret::default().into_component(),
|
|
CockroachDB::new(&std::env::current_dir()?)
|
|
.await
|
|
.map_err(|e| eyre::anyhow!("failed to get cuddle vars: {}", e.to_string()))?
|
|
.into_component(),
|
|
PostgresDatabase::new(&std::env::current_dir()?)
|
|
.await
|
|
.map_err(|e| eyre::anyhow!("failed to get cuddle vars: {}", e.to_string()))?
|
|
.into_component(),
|
|
Ingress::new(&std::env::current_dir()?)
|
|
.await
|
|
.map_err(|e| eyre::anyhow!("failed to get cuddle vars: {}", e.to_string()))?
|
|
.into_component(),
|
|
],
|
|
cuddle_clusters::process::ProcessOpts {
|
|
path: std::env::current_dir()?,
|
|
output: PathBuf::from(".cuddle/tmp/cuddle-clusters"),
|
|
variables: HashMap::from([("image_tag".into(), image_tag.into())]),
|
|
},
|
|
Some(releaser),
|
|
)
|
|
.await
|
|
.map_err(|e| eyre::anyhow!("failed to process templates: {}", e.to_string()))
|
|
{
|
|
Ok(_) => {}
|
|
Err(e) => {
|
|
tracing::error!("failed to process templates: {}", e);
|
|
}
|
|
}
|
|
|
|
Ok(())
|
|
}
|
|
}
|
|
|
|
#[async_trait]
|
|
impl MainAction for RustServiceRender {
|
|
async fn execute_main(&self, ctx: &mut Context) -> eyre::Result<()> {
|
|
let image_tag = ctx
|
|
.get_image_tag()?
|
|
.ok_or(eyre::anyhow!("failed to find image_tag"))?;
|
|
|
|
self.render_templates(&image_tag).await?;
|
|
|
|
// cuddle_ci::cuddle_x::well_known::render(vec![
|
|
// "--cluster",
|
|
// "clank-prod",
|
|
// "--image_tag",
|
|
// &image_tag,
|
|
// ])
|
|
// .await?;
|
|
|
|
Ok(())
|
|
}
|
|
}
|
|
|
|
#[async_trait]
|
|
impl PullRequestAction for RustServiceRender {
|
|
async fn execute_pull_request(&self, ctx: &mut Context) -> eyre::Result<()> {
|
|
let image_tag = ctx
|
|
.get_image_tag()?
|
|
.ok_or(eyre::anyhow!("failed to find image_tag"))?;
|
|
|
|
self.render_templates(&image_tag).await?;
|
|
|
|
Ok(())
|
|
}
|
|
}
|