diff --git a/Cargo.lock b/Cargo.lock index 2e03eeb..64bf42e 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -290,6 +290,7 @@ dependencies = [ "serde", "serde_json", "serde_yaml", + "thiserror 2.0.18", "walkdir", ] diff --git a/Cargo.toml b/Cargo.toml index 4a16607..59bc25f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -23,4 +23,5 @@ semver = { version = "1.0.27", features = ["serde"] } serde = { version = "1.0.228", features = ["derive"] } serde_json = { workspace = true } serde_yaml = "0.9.34" +thiserror = "2.0.18" walkdir = "2.5.0" diff --git a/src/main.rs b/src/main.rs index 1b66623..9ad84cc 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,15 +6,26 @@ use crete::cluster::get_clusters; use crete::environment::PathEnvironment; use crete::set_repo_path; use minijinja::context; +use thiserror::Error; use crate::cli::{Cli, Commands, GlobalOpts}; -fn generate(opts: &GlobalOpts) { +#[derive(Debug, Error)] +enum Error { + #[error("No clusters where found")] + NoClustersFound, +} + +fn generate(opts: &GlobalOpts) -> Result<(), Error> { set_repo_path(&opts.repo); let patch_env = PathEnvironment::new_patches(); let clusters = get_clusters(&patch_env); + if clusters.is_empty() { + return Err(Error::NoClustersFound); + } + let path = opts.repo.join("rendered"); if path.exists() { std::fs::remove_dir_all(&path).unwrap(); @@ -34,18 +45,22 @@ fn generate(opts: &GlobalOpts) { std::fs::write(path.join(template_name), content).unwrap(); } + + Ok(()) } -fn main() { +fn main() -> Result<(), Error> { let cli = Cli::parse(); match cli.command { - Commands::Generate => generate(&cli.global_opts), + Commands::Generate => generate(&cli.global_opts)?, Commands::ShellCompletions => generate_complete( Shell::from_env().unwrap_or(Shell::Bash), &mut Cli::command(), "crete", &mut std::io::stdout(), ), - } + }; + + Ok(()) }