feat: Add Windows support and stabilize SDK installation (v1.0.0-rc1)

Complete Windows compatibility overhaul with robust cross-platform SDK management.
This release candidate establishes feature freeze for the 1.0.0 release.

Key improvements:
- Fixed Android SDK installation on Windows
  * Use cmd.exe wrapper for sdkmanager.bat with piped stdin
  * Properly reorganize cmdline-tools directory structure
  * Write license acceptances synchronously to avoid hangs

- Fixed FTC SDK configuration
  * Auto-generate local.properties with Android SDK path
  * Escape backslashes in Kotlin build.gradle.kts strings
  * Support both new installs and upgrades via ensure_local_properties()

- Enhanced Windows console output
  * Enable ANSI color support via enable_ansi_support crate
  * Maintain color compatibility across Windows versions

- Improved error handling and debugging
  * Added comprehensive logging throughout SDK installation
  * Better context messages for troubleshooting failures

Cross-platform testing verified on:
- Windows 11 with Eclipse Adoptium JDK 21
- Linux (existing support maintained)

Breaking changes: None
This RC introduces feature freeze - subsequent 1.0.x releases will be
bug fixes only. New features deferred to 1.1.0.

Closes Windows compatibility milestone.
This commit is contained in:
Eric Ratliff
2026-01-25 16:09:17 -06:00
parent 90ed42b3c5
commit 6626ca83d1
7 changed files with 191 additions and 48 deletions

View File

@@ -87,7 +87,6 @@ impl ProjectBuilder {
FTC Robot Project generated by Weevil v1.0.0
## Quick Start
```bash
# Test your code (runs on PC, no robot needed)
./gradlew test
@@ -124,6 +123,9 @@ deploy.bat
fs::write(project_path.join(".weevil-version"), "1.0.0")?;
// build.gradle.kts - Pure Java with deployToSDK task
// Escape backslashes for Windows paths in Kotlin strings
let sdk_path = sdk_config.ftc_sdk_path.display().to_string().replace("\\", "\\\\");
let build_gradle = format!(r#"plugins {{
java
}}
@@ -192,7 +194,7 @@ tasks.register<Exec>("buildApk") {{
println("✓ APK built successfully")
}}
}}
"#, sdk_config.ftc_sdk_path.display(), sdk_config.ftc_sdk_path.display());
"#, sdk_path, sdk_path);
fs::write(project_path.join("build.gradle.kts"), build_gradle)?;
// settings.gradle.kts