Compare commits
1 Commits
v1.1.0-dev
...
20bac7322d
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
20bac7322d |
273
README.md
273
README.md
@@ -26,8 +26,6 @@ This approach works against standard software engineering practices and creates
|
|||||||
- ✅ Generate all build/deploy scripts automatically
|
- ✅ Generate all build/deploy scripts automatically
|
||||||
- ✅ Enable proper version control workflows
|
- ✅ Enable proper version control workflows
|
||||||
- ✅ Are actually testable and maintainable
|
- ✅ Are actually testable and maintainable
|
||||||
- ✅ Work seamlessly with Android Studio
|
|
||||||
- ✅ Support proxy/air-gapped environments
|
|
||||||
|
|
||||||
Students focus on building robots, not navigating SDK internals.
|
Students focus on building robots, not navigating SDK internals.
|
||||||
|
|
||||||
@@ -41,7 +39,6 @@ my-robot/
|
|||||||
├── src/
|
├── src/
|
||||||
│ ├── main/java/robot/ # Your robot code lives here
|
│ ├── main/java/robot/ # Your robot code lives here
|
||||||
│ └── test/java/robot/ # Unit tests (run on PC!)
|
│ └── test/java/robot/ # Unit tests (run on PC!)
|
||||||
├── .idea/ # Android Studio integration (auto-generated)
|
|
||||||
├── build.sh / build.bat # One command to build
|
├── build.sh / build.bat # One command to build
|
||||||
├── deploy.sh / deploy.bat # One command to deploy
|
├── deploy.sh / deploy.bat # One command to deploy
|
||||||
└── .weevil.toml # Project configuration
|
└── .weevil.toml # Project configuration
|
||||||
@@ -49,9 +46,6 @@ my-robot/
|
|||||||
|
|
||||||
### 🚀 Simple Commands
|
### 🚀 Simple Commands
|
||||||
```bash
|
```bash
|
||||||
# Set up development environment
|
|
||||||
weevil setup
|
|
||||||
|
|
||||||
# Create a new robot project
|
# Create a new robot project
|
||||||
weevil new awesome-robot
|
weevil new awesome-robot
|
||||||
|
|
||||||
@@ -66,9 +60,6 @@ cd awesome-robot
|
|||||||
|
|
||||||
### 🔧 Project Management
|
### 🔧 Project Management
|
||||||
```bash
|
```bash
|
||||||
# Check system health
|
|
||||||
weevil doctor
|
|
||||||
|
|
||||||
# Upgrade project infrastructure
|
# Upgrade project infrastructure
|
||||||
weevil upgrade awesome-robot
|
weevil upgrade awesome-robot
|
||||||
|
|
||||||
@@ -78,36 +69,8 @@ weevil config awesome-robot --set-sdk /path/to/different/sdk
|
|||||||
|
|
||||||
# Check SDK status
|
# Check SDK status
|
||||||
weevil sdk status
|
weevil sdk status
|
||||||
|
|
||||||
# Remove installed components
|
|
||||||
weevil uninstall --dry-run
|
|
||||||
weevil uninstall
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### 🌐 Proxy Support (v1.1.0)
|
|
||||||
Work behind corporate firewalls or in air-gapped environments:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Use HTTP proxy for all downloads
|
|
||||||
weevil --proxy http://proxy.company.com:8080 setup
|
|
||||||
weevil --proxy http://proxy.company.com:8080 new my-robot
|
|
||||||
|
|
||||||
# Bypass proxy (for local/direct connections)
|
|
||||||
weevil --no-proxy setup
|
|
||||||
|
|
||||||
# Proxy auto-detected from HTTPS_PROXY/HTTP_PROXY environment variables
|
|
||||||
export HTTPS_PROXY=http://proxy:8080
|
|
||||||
weevil setup # Uses proxy automatically
|
|
||||||
```
|
|
||||||
|
|
||||||
### 💻 Android Studio Integration (v1.1.0)
|
|
||||||
Projects work seamlessly with Android Studio:
|
|
||||||
- **One-click deployment** - Run configurations appear automatically in the Run dropdown
|
|
||||||
- **Clean file tree** - Internal directories hidden, only your code visible
|
|
||||||
- **No configuration needed** - Just open the project and hit Run
|
|
||||||
|
|
||||||
See [Android Studio Setup](#android-studio-setup) for details.
|
|
||||||
|
|
||||||
### ✨ Smart Features
|
### ✨ Smart Features
|
||||||
- **Per-project SDK configuration** - Different projects can use different SDK versions
|
- **Per-project SDK configuration** - Different projects can use different SDK versions
|
||||||
- **Automatic Gradle wrapper** - No manual setup required
|
- **Automatic Gradle wrapper** - No manual setup required
|
||||||
@@ -115,8 +78,6 @@ See [Android Studio Setup](#android-studio-setup) for details.
|
|||||||
- **Zero SDK modification** - Your SDK stays pristine
|
- **Zero SDK modification** - Your SDK stays pristine
|
||||||
- **Git-ready** - Projects initialize with proper `.gitignore`
|
- **Git-ready** - Projects initialize with proper `.gitignore`
|
||||||
- **Upgrade-safe** - Update build scripts without losing code
|
- **Upgrade-safe** - Update build scripts without losing code
|
||||||
- **System diagnostics** - `weevil doctor` checks your environment health
|
|
||||||
- **Selective uninstall** - Remove specific components without nuking everything
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -135,49 +96,30 @@ export PATH="$PATH:$(pwd)/target/release"
|
|||||||
```
|
```
|
||||||
|
|
||||||
### Prerequisites
|
### Prerequisites
|
||||||
- Rust 1.70+ (for building Weevil)
|
- Rust 1.70+ (for building)
|
||||||
- Java 11+ (for running Gradle)
|
- Java 11+ (for running Gradle)
|
||||||
- Android SDK with platform-tools (for deployment)
|
- Android SDK with platform-tools (for deployment)
|
||||||
- FTC SDK (Weevil can install it for you)
|
- FTC SDK (Weevil can download it for you)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Quick Start
|
## Quick Start
|
||||||
|
|
||||||
### 1. Set Up Your Environment
|
### 1. Create Your First Project
|
||||||
|
|
||||||
```bash
|
|
||||||
# Check what's installed
|
|
||||||
weevil doctor
|
|
||||||
|
|
||||||
# Install everything automatically
|
|
||||||
weevil setup
|
|
||||||
|
|
||||||
# Or install to custom location
|
|
||||||
weevil setup --ftc-sdk ~/my-sdks/ftc --android-sdk ~/my-sdks/android
|
|
||||||
```
|
|
||||||
|
|
||||||
Weevil will:
|
|
||||||
- Download and install FTC SDK
|
|
||||||
- Download and install Android SDK (if needed)
|
|
||||||
- Set up Gradle wrapper
|
|
||||||
- Verify all dependencies
|
|
||||||
|
|
||||||
### 2. Create Your First Project
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
weevil new my-robot
|
weevil new my-robot
|
||||||
cd my-robot
|
cd my-robot
|
||||||
```
|
```
|
||||||
|
|
||||||
Weevil generates:
|
Weevil will:
|
||||||
- Clean project structure
|
- Download the FTC SDK if needed (or use existing)
|
||||||
- Android Studio run configurations
|
- Generate your project structure
|
||||||
- Example test files
|
- Set up Gradle wrapper
|
||||||
- Build and deploy scripts
|
- Initialize git repository
|
||||||
- Git repository with `.gitignore`
|
- Create example test files
|
||||||
|
|
||||||
### 3. Write Some Code
|
### 2. Write Some Code
|
||||||
|
|
||||||
Create `src/main/java/robot/MyOpMode.java`:
|
Create `src/main/java/robot/MyOpMode.java`:
|
||||||
|
|
||||||
@@ -204,7 +146,7 @@ public class MyOpMode extends LinearOpMode {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### 4. Test Locally (No Robot!)
|
### 3. Test Locally (No Robot!)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
./gradlew test
|
./gradlew test
|
||||||
@@ -212,7 +154,7 @@ public class MyOpMode extends LinearOpMode {
|
|||||||
|
|
||||||
Write unit tests in `src/test/java/robot/` that run on your PC. No need to deploy to a robot for every code change!
|
Write unit tests in `src/test/java/robot/` that run on your PC. No need to deploy to a robot for every code change!
|
||||||
|
|
||||||
### 5. Deploy to Robot
|
### 4. Deploy to Robot
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Build APK
|
# Build APK
|
||||||
@@ -230,93 +172,8 @@ Write unit tests in `src/test/java/robot/` that run on your PC. No need to deplo
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Android Studio Setup
|
|
||||||
|
|
||||||
### Opening a Weevil Project
|
|
||||||
|
|
||||||
1. Launch Android Studio
|
|
||||||
2. Choose **Open** (not "New Project")
|
|
||||||
3. Navigate to your project directory (e.g., `my-robot`)
|
|
||||||
4. Click OK
|
|
||||||
|
|
||||||
Android Studio will index the project. After a few seconds, you'll see:
|
|
||||||
- **Clean file tree** - Only `src/`, scripts, and essential files visible
|
|
||||||
- **Run configurations** - Dropdown next to the green play button shows:
|
|
||||||
- **Build** - Builds APK without deploying
|
|
||||||
- **Deploy (auto)** - Auto-detects USB or WiFi
|
|
||||||
- **Deploy (USB)** - Forces USB connection
|
|
||||||
- **Deploy (WiFi)** - Forces WiFi connection
|
|
||||||
- **Test** - Runs unit tests
|
|
||||||
|
|
||||||
### First-Time Setup: Shell Script Plugin
|
|
||||||
|
|
||||||
**Important:** Android Studio requires the Shell Script plugin to run Weevil's deployment scripts.
|
|
||||||
|
|
||||||
1. Go to **File → Settings** (or **Ctrl+Alt+S**)
|
|
||||||
2. Navigate to **Plugins**
|
|
||||||
3. Click the **Marketplace** tab
|
|
||||||
4. Search for **"Shell Script"**
|
|
||||||
5. Install the plugin (by JetBrains)
|
|
||||||
6. Restart Android Studio
|
|
||||||
|
|
||||||
After restart, the run configurations will work.
|
|
||||||
|
|
||||||
### Running from Android Studio
|
|
||||||
|
|
||||||
1. Select a configuration from the dropdown (e.g., "Deploy (auto)")
|
|
||||||
2. Click the green play button (▶) or press **Shift+F10**
|
|
||||||
3. Watch the output in the Run panel at the bottom
|
|
||||||
|
|
||||||
**That's it!** Students can now build and deploy without leaving the IDE.
|
|
||||||
|
|
||||||
### Platform Notes
|
|
||||||
|
|
||||||
- **Linux/macOS:** Uses the Unix run configurations (`.sh` scripts)
|
|
||||||
- **Windows:** Uses the Windows run configurations (`.bat` scripts)
|
|
||||||
- Android Studio automatically hides the configurations for the other platform
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Advanced Usage
|
## Advanced Usage
|
||||||
|
|
||||||
### Proxy Configuration
|
|
||||||
|
|
||||||
#### Corporate Environments
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Set proxy for all Weevil operations
|
|
||||||
weevil --proxy http://proxy.company.com:8080 setup
|
|
||||||
weevil --proxy http://proxy.company.com:8080 new robot-project
|
|
||||||
|
|
||||||
# Or use environment variables (auto-detected)
|
|
||||||
export HTTPS_PROXY=http://proxy:8080
|
|
||||||
export HTTP_PROXY=http://proxy:8080
|
|
||||||
weevil setup # Automatically uses proxy
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Air-Gapped / Offline Installation
|
|
||||||
|
|
||||||
If you're on an isolated network without internet:
|
|
||||||
|
|
||||||
1. **Download SDKs manually on a connected machine:**
|
|
||||||
- FTC SDK: `git clone https://github.com/FIRST-Tech-Challenge/FtcRobotController.git`
|
|
||||||
- Android SDK: Download from https://developer.android.com/studio
|
|
||||||
- Gradle: Download distribution from https://gradle.org/releases/
|
|
||||||
|
|
||||||
2. **Transfer to isolated machine via USB drive**
|
|
||||||
|
|
||||||
3. **Install using local paths:**
|
|
||||||
```bash
|
|
||||||
weevil setup --ftc-sdk /path/to/FtcRobotController --android-sdk /path/to/android-sdk
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Bypass Proxy
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Force direct connection (ignore proxy environment variables)
|
|
||||||
weevil --no-proxy setup
|
|
||||||
```
|
|
||||||
|
|
||||||
### Multiple SDK Versions
|
### Multiple SDK Versions
|
||||||
|
|
||||||
Working with multiple SDK versions? No problem:
|
Working with multiple SDK versions? No problem:
|
||||||
@@ -346,27 +203,10 @@ This updates:
|
|||||||
- Build scripts
|
- Build scripts
|
||||||
- Deployment scripts
|
- Deployment scripts
|
||||||
- Gradle configuration
|
- Gradle configuration
|
||||||
- Android Studio run configurations
|
|
||||||
- Project templates
|
- Project templates
|
||||||
|
|
||||||
**Your code in `src/` is never touched.**
|
**Your code in `src/` is never touched.**
|
||||||
|
|
||||||
### System Maintenance
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Check what's installed
|
|
||||||
weevil doctor
|
|
||||||
|
|
||||||
# See what can be uninstalled
|
|
||||||
weevil uninstall --dry-run
|
|
||||||
|
|
||||||
# Remove specific components
|
|
||||||
weevil uninstall --only 1 # Removes FTC SDK only
|
|
||||||
|
|
||||||
# Full uninstall (removes everything Weevil installed)
|
|
||||||
weevil uninstall
|
|
||||||
```
|
|
||||||
|
|
||||||
### Cross-Platform Development
|
### Cross-Platform Development
|
||||||
|
|
||||||
All scripts work on Windows, Linux, and macOS:
|
All scripts work on Windows, Linux, and macOS:
|
||||||
@@ -380,11 +220,9 @@ All scripts work on Windows, Linux, and macOS:
|
|||||||
**Windows:**
|
**Windows:**
|
||||||
```cmd
|
```cmd
|
||||||
build.bat
|
build.bat
|
||||||
deploy.bat
|
deploy.bat --wifi
|
||||||
```
|
```
|
||||||
|
|
||||||
**Android Studio:** Works identically on all platforms
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Project Configuration
|
## Project Configuration
|
||||||
@@ -393,10 +231,9 @@ Each project has a `.weevil.toml` file:
|
|||||||
|
|
||||||
```toml
|
```toml
|
||||||
project_name = "my-robot"
|
project_name = "my-robot"
|
||||||
weevil_version = "1.1.0"
|
weevil_version = "1.0.0"
|
||||||
ftc_sdk_path = "/home/user/.weevil/ftc-sdk"
|
ftc_sdk_path = "/home/user/.weevil/ftc-sdk"
|
||||||
ftc_sdk_version = "v10.1.1"
|
ftc_sdk_version = "v10.1.1"
|
||||||
android_sdk_path = "/home/user/.weevil/android-sdk"
|
|
||||||
```
|
```
|
||||||
|
|
||||||
You can edit this manually or use:
|
You can edit this manually or use:
|
||||||
@@ -436,7 +273,6 @@ git push
|
|||||||
1. **Unit Tests** - Test business logic on your PC
|
1. **Unit Tests** - Test business logic on your PC
|
||||||
```bash
|
```bash
|
||||||
./gradlew test
|
./gradlew test
|
||||||
# Or from Android Studio: select "Test" and click Run
|
|
||||||
```
|
```
|
||||||
|
|
||||||
2. **Integration Tests** - Test on actual hardware
|
2. **Integration Tests** - Test on actual hardware
|
||||||
@@ -457,7 +293,7 @@ cd robot
|
|||||||
# Check SDK location
|
# Check SDK location
|
||||||
weevil config .
|
weevil config .
|
||||||
|
|
||||||
# Set SDK to local path (if different from .weevil.toml)
|
# Set SDK to local path
|
||||||
weevil config . --set-sdk ~/ftc-sdk
|
weevil config . --set-sdk ~/ftc-sdk
|
||||||
|
|
||||||
# Build and deploy
|
# Build and deploy
|
||||||
@@ -465,29 +301,15 @@ weevil config . --set-sdk ~/ftc-sdk
|
|||||||
./deploy.sh
|
./deploy.sh
|
||||||
```
|
```
|
||||||
|
|
||||||
**Android Studio users:** Just open the project. The `.idea/` folder contains all run configurations.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Command Reference
|
## Command Reference
|
||||||
|
|
||||||
### Environment Commands
|
|
||||||
|
|
||||||
| Command | Description |
|
|
||||||
|---------|-------------|
|
|
||||||
| `weevil doctor` | Check system health and dependencies |
|
|
||||||
| `weevil setup` | Install FTC SDK, Android SDK, and dependencies |
|
|
||||||
| `weevil setup --ftc-sdk <path>` | Install to custom FTC SDK location |
|
|
||||||
| `weevil uninstall` | Remove all Weevil-managed components |
|
|
||||||
| `weevil uninstall --dry-run` | Show what would be removed |
|
|
||||||
| `weevil uninstall --only <N>` | Remove specific component by index |
|
|
||||||
|
|
||||||
### Project Commands
|
### Project Commands
|
||||||
|
|
||||||
| Command | Description |
|
| Command | Description |
|
||||||
|---------|-------------|
|
|---------|-------------|
|
||||||
| `weevil new <name>` | Create new FTC project |
|
| `weevil new <name>` | Create new FTC project |
|
||||||
| `weevil new <name> --ftc-sdk <path>` | Create with specific SDK |
|
|
||||||
| `weevil upgrade <path>` | Update project infrastructure |
|
| `weevil upgrade <path>` | Update project infrastructure |
|
||||||
| `weevil config <path>` | View project configuration |
|
| `weevil config <path>` | View project configuration |
|
||||||
| `weevil config <path> --set-sdk <sdk>` | Change FTC SDK path |
|
| `weevil config <path> --set-sdk <sdk>` | Change FTC SDK path |
|
||||||
@@ -500,13 +322,6 @@ weevil config . --set-sdk ~/ftc-sdk
|
|||||||
| `weevil sdk install` | Download and install SDKs |
|
| `weevil sdk install` | Download and install SDKs |
|
||||||
| `weevil sdk update` | Update SDKs to latest versions |
|
| `weevil sdk update` | Update SDKs to latest versions |
|
||||||
|
|
||||||
### Global Flags
|
|
||||||
|
|
||||||
| Flag | Description |
|
|
||||||
|------|-------------|
|
|
||||||
| `--proxy <url>` | Use HTTP proxy for all network operations |
|
|
||||||
| `--no-proxy` | Bypass proxy (ignore HTTPS_PROXY env vars) |
|
|
||||||
|
|
||||||
### Deployment Options
|
### Deployment Options
|
||||||
|
|
||||||
**`deploy.sh` / `deploy.bat` flags:**
|
**`deploy.sh` / `deploy.bat` flags:**
|
||||||
@@ -528,7 +343,6 @@ weevil config . --set-sdk ~/ftc-sdk
|
|||||||
- Creates standalone Java project structure
|
- Creates standalone Java project structure
|
||||||
- Generates Gradle build files that reference FTC SDK
|
- Generates Gradle build files that reference FTC SDK
|
||||||
- Sets up deployment scripts
|
- Sets up deployment scripts
|
||||||
- Creates Android Studio run configurations
|
|
||||||
|
|
||||||
2. **Build Process**
|
2. **Build Process**
|
||||||
- Runs `deployToSDK` Gradle task
|
- Runs `deployToSDK` Gradle task
|
||||||
@@ -541,18 +355,12 @@ weevil config . --set-sdk ~/ftc-sdk
|
|||||||
- Connects to Control Hub (USB or WiFi)
|
- Connects to Control Hub (USB or WiFi)
|
||||||
- Installs APK using `adb`
|
- Installs APK using `adb`
|
||||||
|
|
||||||
4. **Proxy Support**
|
|
||||||
- reqwest HTTP client respects `--proxy` flag and HTTPS_PROXY env vars
|
|
||||||
- git2/libgit2 gets temporary proxy env vars during clone/fetch
|
|
||||||
- Gradle wrapper reads HTTPS_PROXY natively
|
|
||||||
|
|
||||||
### Why This Approach?
|
### Why This Approach?
|
||||||
|
|
||||||
**Separation of Concerns:**
|
**Separation of Concerns:**
|
||||||
- Your code: `my-robot/src/`
|
- Your code: `my-robot/src/`
|
||||||
- Build infrastructure: `my-robot/*.gradle.kts`
|
- Build infrastructure: `my-robot/*.gradle.kts`
|
||||||
- FTC SDK: System-level installation
|
- FTC SDK: System-level installation
|
||||||
- IDE integration: Auto-generated, auto-upgraded
|
|
||||||
|
|
||||||
**Benefits:**
|
**Benefits:**
|
||||||
- Test code without SDK complications
|
- Test code without SDK complications
|
||||||
@@ -560,7 +368,6 @@ weevil config . --set-sdk ~/ftc-sdk
|
|||||||
- SDK updates don't break your projects
|
- SDK updates don't break your projects
|
||||||
- Proper version control (no massive SDK in repo)
|
- Proper version control (no massive SDK in repo)
|
||||||
- Industry-standard project structure
|
- Industry-standard project structure
|
||||||
- Students use familiar tools (Android Studio)
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -575,7 +382,6 @@ cargo test
|
|||||||
# Run specific test suites
|
# Run specific test suites
|
||||||
cargo test --test integration
|
cargo test --test integration
|
||||||
cargo test --test project_lifecycle
|
cargo test --test project_lifecycle
|
||||||
cargo test --test proxy_integration
|
|
||||||
cargo test config_tests
|
cargo test config_tests
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -586,8 +392,6 @@ cargo test config_tests
|
|||||||
- ✅ Build script generation
|
- ✅ Build script generation
|
||||||
- ✅ Upgrade workflow
|
- ✅ Upgrade workflow
|
||||||
- ✅ CLI commands
|
- ✅ CLI commands
|
||||||
- ✅ Proxy configuration and network operations
|
|
||||||
- ✅ Environment setup and health checks
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -596,11 +400,11 @@ cargo test config_tests
|
|||||||
### "FTC SDK not found"
|
### "FTC SDK not found"
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Check system health
|
# Check SDK status
|
||||||
weevil doctor
|
weevil sdk status
|
||||||
|
|
||||||
# Install SDK
|
# Install SDK
|
||||||
weevil setup
|
weevil sdk install
|
||||||
|
|
||||||
# Or specify custom location
|
# Or specify custom location
|
||||||
weevil new my-robot --ftc-sdk /custom/path/to/sdk
|
weevil new my-robot --ftc-sdk /custom/path/to/sdk
|
||||||
@@ -612,10 +416,6 @@ Install Android platform-tools:
|
|||||||
|
|
||||||
**Linux:**
|
**Linux:**
|
||||||
```bash
|
```bash
|
||||||
# Weevil can install it for you
|
|
||||||
weevil setup
|
|
||||||
|
|
||||||
# Or install manually
|
|
||||||
sudo apt install android-tools-adb
|
sudo apt install android-tools-adb
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -625,7 +425,7 @@ brew install android-platform-tools
|
|||||||
```
|
```
|
||||||
|
|
||||||
**Windows:**
|
**Windows:**
|
||||||
Download Android SDK Platform Tools from Google or run `weevil setup`.
|
Download Android SDK Platform Tools from Google.
|
||||||
|
|
||||||
### "Build failed"
|
### "Build failed"
|
||||||
|
|
||||||
@@ -637,9 +437,6 @@ cd my-robot
|
|||||||
|
|
||||||
# Check SDK path
|
# Check SDK path
|
||||||
weevil config .
|
weevil config .
|
||||||
|
|
||||||
# Verify system health
|
|
||||||
weevil doctor
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### "Deploy failed - No devices"
|
### "Deploy failed - No devices"
|
||||||
@@ -654,24 +451,6 @@ weevil doctor
|
|||||||
2. Find Control Hub IP (usually 192.168.43.1 or 192.168.49.1)
|
2. Find Control Hub IP (usually 192.168.43.1 or 192.168.49.1)
|
||||||
3. Try `./deploy.sh -i <ip>`
|
3. Try `./deploy.sh -i <ip>`
|
||||||
|
|
||||||
### Android Studio: "Unknown run configuration type ShellScript"
|
|
||||||
|
|
||||||
The Shell Script plugin is not installed. See [Android Studio Setup](#android-studio-setup) for installation instructions.
|
|
||||||
|
|
||||||
### Proxy Issues
|
|
||||||
|
|
||||||
```bash
|
|
||||||
# Test proxy connectivity
|
|
||||||
weevil --proxy http://proxy:8080 sdk status
|
|
||||||
|
|
||||||
# Bypass proxy if it's causing issues
|
|
||||||
weevil --no-proxy setup
|
|
||||||
|
|
||||||
# Check environment variables
|
|
||||||
echo $HTTPS_PROXY
|
|
||||||
echo $HTTP_PROXY
|
|
||||||
```
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## Contributing
|
## Contributing
|
||||||
@@ -711,7 +490,6 @@ Like the boll weevil that bores through complex cotton bolls to reach the valuab
|
|||||||
3. **Testability** - Enable TDD and proper testing workflows
|
3. **Testability** - Enable TDD and proper testing workflows
|
||||||
4. **Simplicity** - One command should do one obvious thing
|
4. **Simplicity** - One command should do one obvious thing
|
||||||
5. **Transparency** - Students should understand what's happening
|
5. **Transparency** - Students should understand what's happening
|
||||||
6. **Tool compatibility** - Work with tools students already know
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -733,27 +511,22 @@ Built with frustration at unnecessarily complex robotics frameworks, and hope th
|
|||||||
|
|
||||||
## Project Status
|
## Project Status
|
||||||
|
|
||||||
**Current Version:** 1.1.0
|
**Current Version:** 1.0.0
|
||||||
|
|
||||||
**What Works:**
|
**What Works:**
|
||||||
- ✅ Project generation
|
- ✅ Project generation
|
||||||
- ✅ Cross-platform build/deploy
|
- ✅ Cross-platform build/deploy
|
||||||
- ✅ SDK management and auto-install
|
- ✅ SDK management
|
||||||
- ✅ Configuration management
|
- ✅ Configuration management
|
||||||
- ✅ Project upgrades
|
- ✅ Project upgrades
|
||||||
- ✅ Local unit testing
|
- ✅ Local testing
|
||||||
- ✅ System diagnostics (`weevil doctor`)
|
|
||||||
- ✅ Selective uninstall
|
|
||||||
- ✅ Proxy support for corporate/air-gapped environments
|
|
||||||
- ✅ Android Studio integration with one-click deployment
|
|
||||||
|
|
||||||
**Roadmap:**
|
**Roadmap:**
|
||||||
- 📋 Package management for FTC libraries
|
- 📋 Package management for FTC libraries
|
||||||
- 📋 Template system for common robot configurations
|
- 📋 Template system for common robot configurations
|
||||||
- 📋 VS Code integration
|
- 📋 IDE integration (VS Code, IntelliJ)
|
||||||
- 📋 Team collaboration features
|
- 📋 Team collaboration features
|
||||||
- 📋 Automated testing on robot hardware
|
- 📋 Automated testing on robot hardware
|
||||||
- 📋 Multi-robot support (manage multiple Control Hubs)
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -55,16 +55,10 @@ pub fn upgrade_project(path: &str) -> Result<()> {
|
|||||||
// Android Studio integration — regenerated so run configs stay in
|
// Android Studio integration — regenerated so run configs stay in
|
||||||
// sync if deploy.sh flags or script names ever change.
|
// sync if deploy.sh flags or script names ever change.
|
||||||
".idea/workspace.xml",
|
".idea/workspace.xml",
|
||||||
".idea/runConfigurations/Build.xml",
|
|
||||||
".idea/runConfigurations/Build (Windows).xml",
|
|
||||||
".idea/runConfigurations/Deploy (auto).xml",
|
".idea/runConfigurations/Deploy (auto).xml",
|
||||||
".idea/runConfigurations/Deploy (auto) (Windows).xml",
|
|
||||||
".idea/runConfigurations/Deploy (USB).xml",
|
".idea/runConfigurations/Deploy (USB).xml",
|
||||||
".idea/runConfigurations/Deploy (USB) (Windows).xml",
|
|
||||||
".idea/runConfigurations/Deploy (WiFi).xml",
|
".idea/runConfigurations/Deploy (WiFi).xml",
|
||||||
".idea/runConfigurations/Deploy (WiFi) (Windows).xml",
|
|
||||||
".idea/runConfigurations/Test.xml",
|
".idea/runConfigurations/Test.xml",
|
||||||
".idea/runConfigurations/Test (Windows).xml",
|
|
||||||
];
|
];
|
||||||
|
|
||||||
println!("{}", "Updating infrastructure files...".bright_yellow());
|
println!("{}", "Updating infrastructure files...".bright_yellow());
|
||||||
|
|||||||
@@ -470,74 +470,21 @@ class BasicTest {
|
|||||||
// Weevil's scripts. Android Studio shows these in the Run dropdown
|
// Weevil's scripts. Android Studio shows these in the Run dropdown
|
||||||
// at the top of the IDE — no configuration needed by the student.
|
// at the top of the IDE — no configuration needed by the student.
|
||||||
//
|
//
|
||||||
// We generate both Unix (.sh, ./gradlew) and Windows (.bat, gradlew.bat)
|
// We generate platform-specific configs: .sh on Unix, .bat on Windows.
|
||||||
// variants. Android Studio automatically hides configs whose script files
|
// The SCRIPT element uses $PROJECT_DIR$ so it's location-independent.
|
||||||
// don't exist, so only the platform-appropriate ones appear in the dropdown.
|
|
||||||
|
|
||||||
// Build (Unix) — just builds the APK without deploying
|
|
||||||
let build_unix_xml = r#"<component name="ProjectRunConfigurationManager">
|
|
||||||
<configuration name="Build" type="ShConfigurationType">
|
|
||||||
<option name="SCRIPT_TEXT" value="" />
|
|
||||||
<option name="INDEPENDENT_SCRIPT_PATH" value="true" />
|
|
||||||
<option name="SCRIPT_PATH" value="$PROJECT_DIR$/build.sh" />
|
|
||||||
<option name="SCRIPT_OPTIONS" value="" />
|
|
||||||
<option name="INDEPENDENT_SCRIPT_WORKING_DIRECTORY" value="true" />
|
|
||||||
<option name="SCRIPT_WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
|
||||||
<option name="INDEPENDENT_INTERPRETER_PATH" value="true" />
|
|
||||||
<option name="INTERPRETER_PATH" value="/bin/bash" />
|
|
||||||
<option name="INTERPRETER_OPTIONS" value="" />
|
|
||||||
<option name="EXECUTE_IN_TERMINAL" value="true" />
|
|
||||||
<option name="EXECUTE_SCRIPT_FILE" value="true" />
|
|
||||||
<envs />
|
|
||||||
<method v="2" />
|
|
||||||
</configuration>
|
|
||||||
</component>
|
|
||||||
"#;
|
|
||||||
fs::write(
|
|
||||||
project_path.join(".idea/runConfigurations/Build.xml"),
|
|
||||||
build_unix_xml,
|
|
||||||
)?;
|
|
||||||
|
|
||||||
// Build (Windows) — same, but calls build.bat
|
|
||||||
let build_windows_xml = r#"<component name="ProjectRunConfigurationManager">
|
|
||||||
<configuration name="Build (Windows)" type="ShConfigurationType">
|
|
||||||
<option name="SCRIPT_TEXT" value="" />
|
|
||||||
<option name="INDEPENDENT_SCRIPT_PATH" value="true" />
|
|
||||||
<option name="SCRIPT_PATH" value="$PROJECT_DIR$/build.bat" />
|
|
||||||
<option name="SCRIPT_OPTIONS" value="" />
|
|
||||||
<option name="INDEPENDENT_SCRIPT_WORKING_DIRECTORY" value="true" />
|
|
||||||
<option name="SCRIPT_WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
|
||||||
<option name="INDEPENDENT_INTERPRETER_PATH" value="true" />
|
|
||||||
<option name="INTERPRETER_PATH" value="cmd.exe" />
|
|
||||||
<option name="INTERPRETER_OPTIONS" value="/c" />
|
|
||||||
<option name="EXECUTE_IN_TERMINAL" value="true" />
|
|
||||||
<option name="EXECUTE_SCRIPT_FILE" value="true" />
|
|
||||||
<envs />
|
|
||||||
<method v="2" />
|
|
||||||
</configuration>
|
|
||||||
</component>
|
|
||||||
"#;
|
|
||||||
fs::write(
|
|
||||||
project_path.join(".idea/runConfigurations/Build (Windows).xml"),
|
|
||||||
build_windows_xml,
|
|
||||||
)?;
|
|
||||||
|
|
||||||
// Deploy (auto) — no flags, deploy.sh auto-detects USB vs WiFi
|
// Deploy (auto) — no flags, deploy.sh auto-detects USB vs WiFi
|
||||||
let deploy_auto_xml = r#"<component name="ProjectRunConfigurationManager">
|
let deploy_auto_xml = r#"<component name="ProjectRunConfigurationManager">
|
||||||
<configuration name="Deploy (auto)" type="ShConfigurationType">
|
<configuration default="false" name="Deploy (auto)" type="ShellScript" factoryName="Shell script">
|
||||||
<option name="SCRIPT_TEXT" value="" />
|
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/deploy.sh" />
|
||||||
<option name="INDEPENDENT_SCRIPT_PATH" value="true" />
|
|
||||||
<option name="SCRIPT_PATH" value="$PROJECT_DIR$/deploy.sh" />
|
|
||||||
<option name="SCRIPT_OPTIONS" value="" />
|
<option name="SCRIPT_OPTIONS" value="" />
|
||||||
<option name="INDEPENDENT_SCRIPT_WORKING_DIRECTORY" value="true" />
|
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
||||||
<option name="SCRIPT_WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
|
||||||
<option name="INDEPENDENT_INTERPRETER_PATH" value="true" />
|
|
||||||
<option name="INTERPRETER_PATH" value="/bin/bash" />
|
<option name="INTERPRETER_PATH" value="/bin/bash" />
|
||||||
<option name="INTERPRETER_OPTIONS" value="" />
|
|
||||||
<option name="EXECUTE_IN_TERMINAL" value="true" />
|
|
||||||
<option name="EXECUTE_SCRIPT_FILE" value="true" />
|
|
||||||
<envs />
|
<envs />
|
||||||
<method v="2" />
|
<EXTENSION ID="net.ash.shed.shell-script.run-configuration.DefaultRunConfigurationExtension" />
|
||||||
|
<method v="2">
|
||||||
|
<option name="RUN_SCRIPT_TASK" enabled="true" />
|
||||||
|
</method>
|
||||||
</configuration>
|
</configuration>
|
||||||
</component>
|
</component>
|
||||||
"#;
|
"#;
|
||||||
@@ -546,46 +493,18 @@ class BasicTest {
|
|||||||
deploy_auto_xml,
|
deploy_auto_xml,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
// Deploy (auto) (Windows)
|
|
||||||
let deploy_auto_windows_xml = r#"<component name="ProjectRunConfigurationManager">
|
|
||||||
<configuration name="Deploy (auto) (Windows)" type="ShConfigurationType">
|
|
||||||
<option name="SCRIPT_TEXT" value="" />
|
|
||||||
<option name="INDEPENDENT_SCRIPT_PATH" value="true" />
|
|
||||||
<option name="SCRIPT_PATH" value="$PROJECT_DIR$/deploy.bat" />
|
|
||||||
<option name="SCRIPT_OPTIONS" value="" />
|
|
||||||
<option name="INDEPENDENT_SCRIPT_WORKING_DIRECTORY" value="true" />
|
|
||||||
<option name="SCRIPT_WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
|
||||||
<option name="INDEPENDENT_INTERPRETER_PATH" value="true" />
|
|
||||||
<option name="INTERPRETER_PATH" value="cmd.exe" />
|
|
||||||
<option name="INTERPRETER_OPTIONS" value="/c" />
|
|
||||||
<option name="EXECUTE_IN_TERMINAL" value="true" />
|
|
||||||
<option name="EXECUTE_SCRIPT_FILE" value="true" />
|
|
||||||
<envs />
|
|
||||||
<method v="2" />
|
|
||||||
</configuration>
|
|
||||||
</component>
|
|
||||||
"#;
|
|
||||||
fs::write(
|
|
||||||
project_path.join(".idea/runConfigurations/Deploy (auto) (Windows).xml"),
|
|
||||||
deploy_auto_windows_xml,
|
|
||||||
)?;
|
|
||||||
|
|
||||||
// Deploy (USB) — forces USB connection
|
// Deploy (USB) — forces USB connection
|
||||||
let deploy_usb_xml = r#"<component name="ProjectRunConfigurationManager">
|
let deploy_usb_xml = r#"<component name="ProjectRunConfigurationManager">
|
||||||
<configuration name="Deploy (USB)" type="ShConfigurationType">
|
<configuration default="false" name="Deploy (USB)" type="ShellScript" factoryName="Shell script">
|
||||||
<option name="SCRIPT_TEXT" value="" />
|
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/deploy.sh" />
|
||||||
<option name="INDEPENDENT_SCRIPT_PATH" value="true" />
|
|
||||||
<option name="SCRIPT_PATH" value="$PROJECT_DIR$/deploy.sh" />
|
|
||||||
<option name="SCRIPT_OPTIONS" value="--usb" />
|
<option name="SCRIPT_OPTIONS" value="--usb" />
|
||||||
<option name="INDEPENDENT_SCRIPT_WORKING_DIRECTORY" value="true" />
|
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
||||||
<option name="SCRIPT_WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
|
||||||
<option name="INDEPENDENT_INTERPRETER_PATH" value="true" />
|
|
||||||
<option name="INTERPRETER_PATH" value="/bin/bash" />
|
<option name="INTERPRETER_PATH" value="/bin/bash" />
|
||||||
<option name="INTERPRETER_OPTIONS" value="" />
|
|
||||||
<option name="EXECUTE_IN_TERMINAL" value="true" />
|
|
||||||
<option name="EXECUTE_SCRIPT_FILE" value="true" />
|
|
||||||
<envs />
|
<envs />
|
||||||
<method v="2" />
|
<EXTENSION ID="net.ash.shed.shell-script.run-configuration.DefaultRunConfigurationExtension" />
|
||||||
|
<method v="2">
|
||||||
|
<option name="RUN_SCRIPT_TASK" enabled="true" />
|
||||||
|
</method>
|
||||||
</configuration>
|
</configuration>
|
||||||
</component>
|
</component>
|
||||||
"#;
|
"#;
|
||||||
@@ -594,46 +513,18 @@ class BasicTest {
|
|||||||
deploy_usb_xml,
|
deploy_usb_xml,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
// Deploy (USB) (Windows)
|
|
||||||
let deploy_usb_windows_xml = r#"<component name="ProjectRunConfigurationManager">
|
|
||||||
<configuration name="Deploy (USB) (Windows)" type="ShConfigurationType">
|
|
||||||
<option name="SCRIPT_TEXT" value="" />
|
|
||||||
<option name="INDEPENDENT_SCRIPT_PATH" value="true" />
|
|
||||||
<option name="SCRIPT_PATH" value="$PROJECT_DIR$/deploy.bat" />
|
|
||||||
<option name="SCRIPT_OPTIONS" value="" />
|
|
||||||
<option name="INDEPENDENT_SCRIPT_WORKING_DIRECTORY" value="true" />
|
|
||||||
<option name="SCRIPT_WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
|
||||||
<option name="INDEPENDENT_INTERPRETER_PATH" value="true" />
|
|
||||||
<option name="INTERPRETER_PATH" value="cmd.exe" />
|
|
||||||
<option name="INTERPRETER_OPTIONS" value="/c" />
|
|
||||||
<option name="EXECUTE_IN_TERMINAL" value="true" />
|
|
||||||
<option name="EXECUTE_SCRIPT_FILE" value="true" />
|
|
||||||
<envs />
|
|
||||||
<method v="2" />
|
|
||||||
</configuration>
|
|
||||||
</component>
|
|
||||||
"#;
|
|
||||||
fs::write(
|
|
||||||
project_path.join(".idea/runConfigurations/Deploy (USB) (Windows).xml"),
|
|
||||||
deploy_usb_windows_xml,
|
|
||||||
)?;
|
|
||||||
|
|
||||||
// Deploy (WiFi) — forces WiFi connection to default 192.168.43.1
|
// Deploy (WiFi) — forces WiFi connection to default 192.168.43.1
|
||||||
let deploy_wifi_xml = r#"<component name="ProjectRunConfigurationManager">
|
let deploy_wifi_xml = r#"<component name="ProjectRunConfigurationManager">
|
||||||
<configuration name="Deploy (WiFi)" type="ShConfigurationType">
|
<configuration default="false" name="Deploy (WiFi)" type="ShellScript" factoryName="Shell script">
|
||||||
<option name="SCRIPT_TEXT" value="" />
|
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/deploy.sh" />
|
||||||
<option name="INDEPENDENT_SCRIPT_PATH" value="true" />
|
|
||||||
<option name="SCRIPT_PATH" value="$PROJECT_DIR$/deploy.sh" />
|
|
||||||
<option name="SCRIPT_OPTIONS" value="--wifi" />
|
<option name="SCRIPT_OPTIONS" value="--wifi" />
|
||||||
<option name="INDEPENDENT_SCRIPT_WORKING_DIRECTORY" value="true" />
|
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
||||||
<option name="SCRIPT_WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
|
||||||
<option name="INDEPENDENT_INTERPRETER_PATH" value="true" />
|
|
||||||
<option name="INTERPRETER_PATH" value="/bin/bash" />
|
<option name="INTERPRETER_PATH" value="/bin/bash" />
|
||||||
<option name="INTERPRETER_OPTIONS" value="" />
|
|
||||||
<option name="EXECUTE_IN_TERMINAL" value="true" />
|
|
||||||
<option name="EXECUTE_SCRIPT_FILE" value="true" />
|
|
||||||
<envs />
|
<envs />
|
||||||
<method v="2" />
|
<EXTENSION ID="net.ash.shed.shell-script.run-configuration.DefaultRunConfigurationExtension" />
|
||||||
|
<method v="2">
|
||||||
|
<option name="RUN_SCRIPT_TASK" enabled="true" />
|
||||||
|
</method>
|
||||||
</configuration>
|
</configuration>
|
||||||
</component>
|
</component>
|
||||||
"#;
|
"#;
|
||||||
@@ -642,46 +533,18 @@ class BasicTest {
|
|||||||
deploy_wifi_xml,
|
deploy_wifi_xml,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
// Deploy (WiFi) (Windows)
|
|
||||||
let deploy_wifi_windows_xml = r#"<component name="ProjectRunConfigurationManager">
|
|
||||||
<configuration name="Deploy (WiFi) (Windows)" type="ShConfigurationType">
|
|
||||||
<option name="SCRIPT_TEXT" value="" />
|
|
||||||
<option name="INDEPENDENT_SCRIPT_PATH" value="true" />
|
|
||||||
<option name="SCRIPT_PATH" value="$PROJECT_DIR$/deploy.bat" />
|
|
||||||
<option name="SCRIPT_OPTIONS" value="" />
|
|
||||||
<option name="INDEPENDENT_SCRIPT_WORKING_DIRECTORY" value="true" />
|
|
||||||
<option name="SCRIPT_WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
|
||||||
<option name="INDEPENDENT_INTERPRETER_PATH" value="true" />
|
|
||||||
<option name="INTERPRETER_PATH" value="cmd.exe" />
|
|
||||||
<option name="INTERPRETER_OPTIONS" value="/c" />
|
|
||||||
<option name="EXECUTE_IN_TERMINAL" value="true" />
|
|
||||||
<option name="EXECUTE_SCRIPT_FILE" value="true" />
|
|
||||||
<envs />
|
|
||||||
<method v="2" />
|
|
||||||
</configuration>
|
|
||||||
</component>
|
|
||||||
"#;
|
|
||||||
fs::write(
|
|
||||||
project_path.join(".idea/runConfigurations/Deploy (WiFi) (Windows).xml"),
|
|
||||||
deploy_wifi_windows_xml,
|
|
||||||
)?;
|
|
||||||
|
|
||||||
// Test — runs the unit test suite via Gradle
|
// Test — runs the unit test suite via Gradle
|
||||||
let test_xml = r#"<component name="ProjectRunConfigurationManager">
|
let test_xml = r#"<component name="ProjectRunConfigurationManager">
|
||||||
<configuration name="Test" type="ShConfigurationType">
|
<configuration default="false" name="Test" type="ShellScript" factoryName="Shell script">
|
||||||
<option name="SCRIPT_TEXT" value="" />
|
<option name="SCRIPT_NAME" value="$PROJECT_DIR$/gradlew" />
|
||||||
<option name="INDEPENDENT_SCRIPT_PATH" value="true" />
|
|
||||||
<option name="SCRIPT_PATH" value="$PROJECT_DIR$/gradlew" />
|
|
||||||
<option name="SCRIPT_OPTIONS" value="test" />
|
<option name="SCRIPT_OPTIONS" value="test" />
|
||||||
<option name="INDEPENDENT_SCRIPT_WORKING_DIRECTORY" value="true" />
|
<option name="WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
||||||
<option name="SCRIPT_WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
|
||||||
<option name="INDEPENDENT_INTERPRETER_PATH" value="true" />
|
|
||||||
<option name="INTERPRETER_PATH" value="/bin/bash" />
|
<option name="INTERPRETER_PATH" value="/bin/bash" />
|
||||||
<option name="INTERPRETER_OPTIONS" value="" />
|
|
||||||
<option name="EXECUTE_IN_TERMINAL" value="true" />
|
|
||||||
<option name="EXECUTE_SCRIPT_FILE" value="true" />
|
|
||||||
<envs />
|
<envs />
|
||||||
<method v="2" />
|
<EXTENSION ID="net.ash.shed.shell-script.run-configuration.DefaultRunConfigurationExtension" />
|
||||||
|
<method v="2">
|
||||||
|
<option name="RUN_SCRIPT_TASK" enabled="true" />
|
||||||
|
</method>
|
||||||
</configuration>
|
</configuration>
|
||||||
</component>
|
</component>
|
||||||
"#;
|
"#;
|
||||||
@@ -690,31 +553,6 @@ class BasicTest {
|
|||||||
test_xml,
|
test_xml,
|
||||||
)?;
|
)?;
|
||||||
|
|
||||||
// Test (Windows)
|
|
||||||
let test_windows_xml = r#"<component name="ProjectRunConfigurationManager">
|
|
||||||
<configuration name="Test (Windows)" type="ShConfigurationType">
|
|
||||||
<option name="SCRIPT_TEXT" value="" />
|
|
||||||
<option name="INDEPENDENT_SCRIPT_PATH" value="true" />
|
|
||||||
<option name="SCRIPT_PATH" value="$PROJECT_DIR$/gradlew.bat" />
|
|
||||||
<option name="SCRIPT_OPTIONS" value="test" />
|
|
||||||
<option name="INDEPENDENT_SCRIPT_WORKING_DIRECTORY" value="true" />
|
|
||||||
<option name="SCRIPT_WORKING_DIRECTORY" value="$PROJECT_DIR$" />
|
|
||||||
<option name="INDEPENDENT_INTERPRETER_PATH" value="true" />
|
|
||||||
<option name="INTERPRETER_PATH" value="cmd.exe" />
|
|
||||||
<option name="INTERPRETER_OPTIONS" value="/c" />
|
|
||||||
<option name="EXECUTE_IN_TERMINAL" value="true" />
|
|
||||||
<option name="EXECUTE_SCRIPT_FILE" value="true" />
|
|
||||||
<envs />
|
|
||||||
<method v="2" />
|
|
||||||
</configuration>
|
|
||||||
</component>
|
|
||||||
"#;
|
|
||||||
fs::write(
|
|
||||||
project_path.join(".idea/runConfigurations/Test (Windows).xml"),
|
|
||||||
test_windows_xml,
|
|
||||||
)?;
|
|
||||||
|
|
||||||
|
|
||||||
Ok(())
|
Ok(())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user