From d8e3c54f3d83b1b592639edad5c99d3b1eecdfc1 Mon Sep 17 00:00:00 2001 From: Eric Ratliff Date: Sat, 31 Jan 2026 10:54:20 -0600 Subject: [PATCH] refactor: Remove SDK installation from `weevil new` Project creation now requires environment setup first. Checks system health and directs users to `weevil setup` if needed. Separates concerns: setup installs, new creates projects. --- src/commands/new.rs | 71 ++++++++++++++++++++++++++------------------- 1 file changed, 41 insertions(+), 30 deletions(-) diff --git a/src/commands/new.rs b/src/commands/new.rs index ea1e338..aeed30a 100644 --- a/src/commands/new.rs +++ b/src/commands/new.rs @@ -34,14 +34,47 @@ pub fn create_project( println!("{}", format!("Creating FTC project: {}", name).bright_green().bold()); println!(); + // Check system health FIRST + println!("{}", "Checking system prerequisites...".bright_yellow()); + let health = crate::commands::doctor::check_system_health()?; + + if !health.is_healthy() { + println!(); + println!("{}", "═══════════════════════════════════════════════════════════".bright_red()); + println!("{}", " ✗ System Setup Required".bright_red().bold()); + println!("{}", "═══════════════════════════════════════════════════════════".bright_red()); + println!(); + println!("{}", "Missing required components:".bright_yellow().bold()); + + if !health.java_ok { + println!(" {} Java JDK", "✗".red()); + } + if !health.ftc_sdk_ok { + println!(" {} FTC SDK", "✗".red()); + } + if !health.android_sdk_ok { + println!(" {} Android SDK", "✗".red()); + } + + println!(); + println!("{}", "Before creating a project, you need to set up your development environment.".bright_yellow()); + println!(); + println!("{}", "Run this command to install required components:".bright_yellow().bold()); + println!(" {}", "weevil setup".bright_cyan()); + println!(); + println!("{}", "Then try creating your project again:".bright_yellow().bold()); + println!(" {}", format!("weevil new {}", name).bright_cyan()); + println!(); + + bail!("System setup required"); + } + + println!("{} All prerequisites met", "✓".green()); + println!(); + // Setup or verify SDK configuration let sdk_config = SdkConfig::with_paths(ftc_sdk, android_sdk)?; - // Install SDKs if needed - println!("{}", "Checking SDKs...".bright_yellow()); - ensure_sdks(&sdk_config)?; - - println!(); println!("{}", "Creating project structure...".bright_yellow()); // Build the project @@ -57,34 +90,12 @@ pub fn create_project( println!("Version: {}", crate::sdk::ftc::get_version(&sdk_config.ftc_sdk_path).unwrap_or_else(|_| "unknown".to_string())); println!(); println!("{}", "Next steps:".bright_yellow().bold()); - println!(" 1. cd {}", name); + println!(" 1. {}", format!("cd {}", name).bright_cyan()); println!(" 2. Review README.md for project structure"); println!(" 3. Start coding in src/main/java/robot/"); - println!(" 4. Run: ./gradlew test"); - println!(" 5. Deploy: weevil deploy {}", name); + println!(" 4. Run tests: {}", "./gradlew test".bright_cyan()); + println!(" 5. Deploy to robot: {}", format!("weevil deploy {}", name).bright_cyan()); println!(); - Ok(()) -} - -fn ensure_sdks(config: &SdkConfig) -> Result<()> { - // Check FTC SDK - if !config.ftc_sdk_path.exists() { - println!("FTC SDK not found. Installing..."); - crate::sdk::ftc::install(&config.ftc_sdk_path, &config.android_sdk_path)?; - } else { - println!("{} FTC SDK found at: {}", "✓".green(), config.ftc_sdk_path.display()); - crate::sdk::ftc::verify(&config.ftc_sdk_path)?; - } - - // Check Android SDK - if !config.android_sdk_path.exists() { - println!("Android SDK not found. Installing..."); - crate::sdk::android::install(&config.android_sdk_path)?; - } else { - println!("{} Android SDK found at: {}", "✓".green(), config.android_sdk_path.display()); - crate::sdk::android::verify(&config.android_sdk_path)?; - } - Ok(()) } \ No newline at end of file