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