4 Commits

Author SHA1 Message Date
Eric Ratliff
8add733514 Updated email to eric@nxlearn.net 2026-01-26 19:18:26 -06:00
Eric Ratliff
8f12a0a09d Updated versioning information to align to RC2 2026-01-26 19:16:02 -06:00
Eric Ratliff
655a213113 docs: Add project roadmap for v1.0.0 and beyond
Add ROADMAP.md documenting planned features and improvements for the
initial stable release and future versions.

Roadmap includes:
- Pre-1.0.0: Critical fixes for Windows deployment and documentation
- v1.0.0 features: Enhanced project templates, improved error handling
- Post-1.0.0: Advanced features like custom templates, project analytics,
  multi-robot support, and CI/CD integration

This provides transparency for users and contributors about the project's
direction and planned capabilities.
2026-01-26 18:43:44 -06:00
Eric Ratliff
64826e2ce2 fix: Complete Windows deployment pipeline
Fixes critical bugs in Windows APK deployment workflow including APK path
resolution, adb integration, and config file parsing.

Changes:
- Fix APK search to look for TeamCode-debug.apk instead of *app-debug.apk
- Strip both single and double quotes from batch file path parsing
- Add android_sdk_path to project configuration (.weevil.toml)
- Resolve adb.exe from Android SDK platform-tools directory
- Check adb install exit code and report deployment failures correctly
- Add migration support for old .weevil.toml files missing android_sdk_path
- Update all tests to use new ProjectConfig::new() signature

The deployment workflow now properly finds the generated APK, locates adb,
and reports success/failure accurately on Windows.
2026-01-26 18:42:06 -06:00
3 changed files with 10 additions and 5 deletions

View File

@@ -511,7 +511,7 @@ Built with frustration at unnecessarily complex robotics frameworks, and hope th
## Project Status ## Project Status
**Current Version:** 1.0.0-rc1 **Current Version:** 1.0.0-rc2
**What Works:** **What Works:**
- ✅ Project generation - ✅ Project generation
@@ -532,7 +532,7 @@ Built with frustration at unnecessarily complex robotics frameworks, and hope th
**Questions? Issues? Suggestions?** **Questions? Issues? Suggestions?**
📧 Email: [eric@nxws.dev](mailto:eric@nxws.dev) 📧 Email: [eric@nxlearn.net](mailto:eric@nxlearn.net)
🐛 Issues: Open an issue on the repository 🐛 Issues: Open an issue on the repository
Building better tools so you can build better robots. 🤖 Building better tools so you can build better robots. 🤖

View File

@@ -2,7 +2,7 @@
This document outlines the planned feature development for Weevil across multiple versions. Features are subject to change based on user feedback, technical constraints, and market needs. This document outlines the planned feature development for Weevil across multiple versions. Features are subject to change based on user feedback, technical constraints, and market needs.
**Current Version:** 1.0.0-rc1 **Current Version:** 1.0.0-rc2
**Next Release:** 1.1.0 (Target: TBD) **Next Release:** 1.1.0 (Target: TBD)
--- ---

View File

@@ -13,6 +13,7 @@ use weevil::sdk::SdkConfig;
fn test_config_create_and_save() { fn test_config_create_and_save() {
let temp_dir = TempDir::new().unwrap(); let temp_dir = TempDir::new().unwrap();
let sdk_path = temp_dir.path().join("mock-sdk"); let sdk_path = temp_dir.path().join("mock-sdk");
let android_sdk_path = temp_dir.path().join("android-sdk");
// Create minimal SDK structure // Create minimal SDK structure
fs::create_dir_all(sdk_path.join("TeamCode/src/main/java")).unwrap(); fs::create_dir_all(sdk_path.join("TeamCode/src/main/java")).unwrap();
@@ -20,10 +21,11 @@ fn test_config_create_and_save() {
fs::write(sdk_path.join("build.gradle"), "// test").unwrap(); fs::write(sdk_path.join("build.gradle"), "// test").unwrap();
fs::write(sdk_path.join(".version"), "v10.1.1").unwrap(); fs::write(sdk_path.join(".version"), "v10.1.1").unwrap();
let config = ProjectConfig::new("test-robot", sdk_path.clone()).unwrap(); let config = ProjectConfig::new("test-robot", sdk_path.clone(), android_sdk_path.clone()).unwrap();
assert_eq!(config.project_name, "test-robot"); assert_eq!(config.project_name, "test-robot");
assert_eq!(config.ftc_sdk_path, sdk_path); assert_eq!(config.ftc_sdk_path, sdk_path);
assert_eq!(config.android_sdk_path, android_sdk_path);
assert_eq!(config.weevil_version, "1.0.0"); assert_eq!(config.weevil_version, "1.0.0");
// Save and reload // Save and reload
@@ -34,12 +36,14 @@ fn test_config_create_and_save() {
let loaded = ProjectConfig::load(&project_path).unwrap(); let loaded = ProjectConfig::load(&project_path).unwrap();
assert_eq!(loaded.project_name, config.project_name); assert_eq!(loaded.project_name, config.project_name);
assert_eq!(loaded.ftc_sdk_path, config.ftc_sdk_path); assert_eq!(loaded.ftc_sdk_path, config.ftc_sdk_path);
assert_eq!(loaded.android_sdk_path, config.android_sdk_path);
} }
#[test] #[test]
fn test_config_toml_format() { fn test_config_toml_format() {
let temp_dir = TempDir::new().unwrap(); let temp_dir = TempDir::new().unwrap();
let sdk_path = temp_dir.path().join("sdk"); let sdk_path = temp_dir.path().join("sdk");
let android_sdk_path = temp_dir.path().join("android-sdk");
// Create minimal SDK // Create minimal SDK
fs::create_dir_all(sdk_path.join("TeamCode/src/main/java")).unwrap(); fs::create_dir_all(sdk_path.join("TeamCode/src/main/java")).unwrap();
@@ -47,7 +51,7 @@ fn test_config_toml_format() {
fs::write(sdk_path.join("build.gradle"), "// test").unwrap(); fs::write(sdk_path.join("build.gradle"), "// test").unwrap();
fs::write(sdk_path.join(".version"), "v10.1.1").unwrap(); fs::write(sdk_path.join(".version"), "v10.1.1").unwrap();
let config = ProjectConfig::new("my-robot", sdk_path).unwrap(); let config = ProjectConfig::new("my-robot", sdk_path, android_sdk_path).unwrap();
let project_path = temp_dir.path().join("project"); let project_path = temp_dir.path().join("project");
fs::create_dir_all(&project_path).unwrap(); fs::create_dir_all(&project_path).unwrap();
@@ -59,6 +63,7 @@ fn test_config_toml_format() {
assert!(content.contains("weevil_version = \"1.0.0\"")); assert!(content.contains("weevil_version = \"1.0.0\""));
assert!(content.contains("ftc_sdk_path")); assert!(content.contains("ftc_sdk_path"));
assert!(content.contains("ftc_sdk_version")); assert!(content.contains("ftc_sdk_version"));
assert!(content.contains("android_sdk_path"));
} }
#[test] #[test]