syncable_cli/handlers/
generate.rs1use crate::{analyzer::analyze_monorepo, generator};
2
3pub fn handle_generate(
4 path: std::path::PathBuf,
5 _output: Option<std::path::PathBuf>,
6 dockerfile: bool,
7 compose: bool,
8 terraform: bool,
9 all: bool,
10 dry_run: bool,
11 _force: bool,
12) -> crate::Result<()> {
13 println!("š Analyzing project for generation: {}", path.display());
14
15 let monorepo_analysis = analyze_monorepo(&path)?;
16
17 println!("ā
Analysis complete. Generating IaC files...");
18
19 if monorepo_analysis.is_monorepo {
20 println!(
21 "š¦ Detected monorepo with {} projects",
22 monorepo_analysis.projects.len()
23 );
24 println!(
25 "š§ Monorepo IaC generation is coming soon! For now, generating for the overall structure."
26 );
27 println!(
28 "š” Tip: You can run generate commands on individual project directories for now."
29 );
30 }
31
32 let main_project = &monorepo_analysis.projects[0];
35
36 let generate_all = all || (!dockerfile && !compose && !terraform);
37
38 if generate_all || dockerfile {
39 println!("\nš³ Generating Dockerfile...");
40 let dockerfile_content = generator::generate_dockerfile(&main_project.analysis)?;
41
42 if dry_run {
43 println!("--- Dockerfile (dry run) ---");
44 println!("{}", dockerfile_content);
45 } else {
46 std::fs::write("Dockerfile", dockerfile_content)?;
47 println!("ā
Dockerfile generated successfully!");
48 }
49 }
50
51 if generate_all || compose {
52 println!("\nš Generating Docker Compose file...");
53 let compose_content = generator::generate_compose(&main_project.analysis)?;
54
55 if dry_run {
56 println!("--- docker-compose.yml (dry run) ---");
57 println!("{}", compose_content);
58 } else {
59 std::fs::write("docker-compose.yml", compose_content)?;
60 println!("ā
Docker Compose file generated successfully!");
61 }
62 }
63
64 if generate_all || terraform {
65 println!("\nšļø Generating Terraform configuration...");
66 let terraform_content = generator::generate_terraform(&main_project.analysis)?;
67
68 if dry_run {
69 println!("--- main.tf (dry run) ---");
70 println!("{}", terraform_content);
71 } else {
72 std::fs::write("main.tf", terraform_content)?;
73 println!("ā
Terraform configuration generated successfully!");
74 }
75 }
76
77 if !dry_run {
78 println!("\nš Generation complete! IaC files have been created in the current directory.");
79
80 if monorepo_analysis.is_monorepo {
81 println!("š§ Note: Generated files are based on the main project structure.");
82 println!(" Advanced monorepo support with per-project generation is coming soon!");
83 }
84 }
85
86 Ok(())
87}
88
89pub fn handle_validate(
90 _path: std::path::PathBuf,
91 _types: Option<Vec<String>>,
92 _fix: bool,
93) -> crate::Result<()> {
94 println!("š Validating IaC files...");
95 println!("ā ļø Validation feature is not yet implemented.");
96 Ok(())
97}