283 lines
8.7 KiB
Batchfile
283 lines
8.7 KiB
Batchfile
@echo off
|
|
REM FTC Project Generator for Windows
|
|
REM Copyright (c) 2026 Nexus Workshops LLC
|
|
REM Licensed under MIT License
|
|
|
|
setlocal enabledelayedexpansion
|
|
|
|
REM Set default values
|
|
set "DEFAULT_FTC_VERSION=v10.1.1"
|
|
set "FTC_VERSION=%DEFAULT_FTC_VERSION%"
|
|
if not defined FTC_SDK_DIR set "FTC_SDK_DIR=%USERPROFILE%\ftc-sdk"
|
|
|
|
REM Get script directory
|
|
set "SCRIPT_DIR=%~dp0"
|
|
set "WINDOWS_DIR=%SCRIPT_DIR%windows"
|
|
|
|
REM Parse command line arguments
|
|
set "PROJECT_NAME="
|
|
set "SHOW_HELP=0"
|
|
|
|
:parse_args
|
|
if "%~1"=="" goto args_done
|
|
if /i "%~1"=="-h" set "SHOW_HELP=1" & goto next_arg
|
|
if /i "%~1"=="--help" set "SHOW_HELP=1" & goto next_arg
|
|
if /i "%~1"=="-v" set "FTC_VERSION=%~2" & shift & goto next_arg
|
|
if /i "%~1"=="--version" set "FTC_VERSION=%~2" & shift & goto next_arg
|
|
if /i "%~1"=="-d" set "FTC_SDK_DIR=%~2" & shift & goto next_arg
|
|
if /i "%~1"=="--sdk-dir" set "FTC_SDK_DIR=%~2" & shift & goto next_arg
|
|
if "%PROJECT_NAME%"=="" set "PROJECT_NAME=%~1"
|
|
:next_arg
|
|
shift
|
|
goto parse_args
|
|
|
|
:args_done
|
|
|
|
REM Show help if requested
|
|
if %SHOW_HELP%==1 (
|
|
call "%WINDOWS_DIR%\show-usage.bat"
|
|
exit /b 0
|
|
)
|
|
|
|
REM Validate project name
|
|
if "%PROJECT_NAME%"=="" (
|
|
echo Error: Project name required
|
|
echo Usage: %~nx0 ^<project-name^> [options]
|
|
echo Run '%~nx0 --help' for more info
|
|
exit /b 1
|
|
)
|
|
|
|
echo ============================================
|
|
echo FTC Project Generator
|
|
echo ============================================
|
|
echo.
|
|
echo Checking prerequisites...
|
|
echo.
|
|
|
|
REM Check for git
|
|
where git >nul 2>&1
|
|
if errorlevel 1 (
|
|
echo ================================================================
|
|
echo ERROR: Git not found
|
|
echo ================================================================
|
|
echo.
|
|
echo Git is required to clone the FTC SDK and manage your project.
|
|
echo.
|
|
echo TO INSTALL:
|
|
echo Download: https://git-scm.com/download/win
|
|
echo Run installer with default options
|
|
echo Restart command prompt after installation
|
|
echo.
|
|
echo ================================================================
|
|
exit /b 1
|
|
)
|
|
echo + Git found
|
|
|
|
REM Check for Java
|
|
where java >nul 2>&1
|
|
if errorlevel 1 (
|
|
echo ================================================================
|
|
echo ERROR: Java not found
|
|
echo ================================================================
|
|
echo.
|
|
echo Java 11+ is required to build FTC projects.
|
|
echo.
|
|
echo TO INSTALL:
|
|
echo Download: https://adoptium.net/temurin/releases/
|
|
echo Choose: Java 17 LTS ^(recommended^) or Java 11 LTS
|
|
echo Run installer with default options
|
|
echo Restart command prompt after installation
|
|
echo.
|
|
echo ================================================================
|
|
exit /b 1
|
|
)
|
|
|
|
REM Check Java version
|
|
for /f "tokens=3" %%g in ('java -version 2^>^&1 ^| findstr /i "version"') do set JAVA_VERSION=%%g
|
|
set JAVA_VERSION=%JAVA_VERSION:"=%
|
|
for /f "tokens=1,2 delims=." %%a in ("%JAVA_VERSION%") do (
|
|
set JAVA_MAJOR=%%a
|
|
if "%%a"=="1" set JAVA_MAJOR=%%b
|
|
)
|
|
if %JAVA_MAJOR% LSS 11 (
|
|
echo ================================================================
|
|
echo ERROR: Java version too old
|
|
echo ================================================================
|
|
echo.
|
|
echo Current: Java %JAVA_VERSION%
|
|
echo Required: Java 11 or later
|
|
echo.
|
|
echo TO UPGRADE:
|
|
echo Download: https://adoptium.net/temurin/releases/
|
|
echo Choose: Java 17 LTS ^(recommended^)
|
|
echo.
|
|
echo ================================================================
|
|
exit /b 1
|
|
)
|
|
echo + Java %JAVA_VERSION% found
|
|
|
|
REM Check for Gradle
|
|
where gradle >nul 2>&1
|
|
if errorlevel 1 (
|
|
echo ================================================================
|
|
echo ERROR: Gradle not found
|
|
echo ================================================================
|
|
echo.
|
|
echo Gradle is required to generate the wrapper for your project.
|
|
echo.
|
|
echo TO INSTALL ^(choose one method^):
|
|
echo.
|
|
echo Option 1 - Chocolatey ^(recommended^):
|
|
echo choco install gradle
|
|
echo.
|
|
echo Option 2 - Scoop:
|
|
echo scoop install gradle
|
|
echo.
|
|
echo Option 3 - Manual install:
|
|
echo 1. Download: https://gradle.org/releases/
|
|
echo 2. Extract to C:\Gradle
|
|
echo 3. Add C:\Gradle\bin to PATH
|
|
echo.
|
|
echo Option 4 - SDKMAN ^(if you use it^):
|
|
echo sdk install gradle
|
|
echo.
|
|
echo After installation:
|
|
echo 1. Restart command prompt
|
|
echo 2. Run: gradle --version
|
|
echo 3. Re-run this script
|
|
echo.
|
|
echo ================================================================
|
|
exit /b 1
|
|
)
|
|
|
|
for /f "tokens=3" %%v in ('gradle --version 2^>^&1 ^| findstr /C:"Gradle"') do set GRADLE_VERSION=%%v
|
|
echo + Gradle %GRADLE_VERSION% found
|
|
|
|
echo.
|
|
echo All prerequisites satisfied!
|
|
echo.
|
|
|
|
set "PROJECT_DIR=%CD%\%PROJECT_NAME%"
|
|
|
|
echo ============================================
|
|
echo Project Configuration
|
|
echo ============================================
|
|
echo Project: %PROJECT_NAME%
|
|
echo SDK Dir: %FTC_SDK_DIR%
|
|
echo SDK Version: %FTC_VERSION%
|
|
echo Target: %PROJECT_DIR%
|
|
echo.
|
|
|
|
REM Step 1: Check/setup FTC SDK
|
|
echo ^>^>^> Checking FTC SDK...
|
|
|
|
if exist "%FTC_SDK_DIR%" (
|
|
echo SDK directory exists, checking version...
|
|
cd /d "%FTC_SDK_DIR%"
|
|
|
|
if exist ".git" (
|
|
REM Check current version
|
|
set "CURRENT_TAG="
|
|
for /f "delims=" %%i in ('git describe --tags --exact-match 2^>nul') do set "CURRENT_TAG=%%i"
|
|
if "!CURRENT_TAG!"=="" set "CURRENT_TAG=none"
|
|
|
|
if "!CURRENT_TAG!"=="%FTC_VERSION%" (
|
|
echo + SDK already at version %FTC_VERSION%
|
|
) else (
|
|
echo Current version: !CURRENT_TAG!
|
|
echo Fetching and checking out %FTC_VERSION%...
|
|
git fetch --tags
|
|
git checkout "%FTC_VERSION%"
|
|
if errorlevel 1 (
|
|
echo ERROR: Failed to checkout version %FTC_VERSION%
|
|
exit /b 1
|
|
)
|
|
echo + Updated to %FTC_VERSION%
|
|
)
|
|
) else (
|
|
echo Warning: SDK directory exists but is not a git repo
|
|
echo Using existing directory anyway...
|
|
)
|
|
) else (
|
|
echo Cloning FTC SDK %FTC_VERSION%...
|
|
echo This will take a minute ^(SDK is about 200MB^)...
|
|
git clone --depth 1 --branch "%FTC_VERSION%" https://github.com/FIRST-Tech-Challenge/FtcRobotController.git "%FTC_SDK_DIR%"
|
|
if errorlevel 1 (
|
|
echo ERROR: Failed to clone FTC SDK
|
|
echo Check your internet connection
|
|
exit /b 1
|
|
)
|
|
echo + Cloned FTC SDK %FTC_VERSION% to %FTC_SDK_DIR%
|
|
)
|
|
|
|
REM Return to starting directory
|
|
cd /d "%~dp0"
|
|
|
|
REM Step 2: Create project structure
|
|
echo.
|
|
echo ^>^>^> Creating project: %PROJECT_NAME%
|
|
|
|
if exist "%PROJECT_DIR%" (
|
|
echo ERROR: Project directory already exists: %PROJECT_DIR%
|
|
echo Choose a different name or remove the existing directory
|
|
exit /b 1
|
|
)
|
|
|
|
mkdir "%PROJECT_DIR%"
|
|
cd /d "%PROJECT_DIR%"
|
|
|
|
REM Create directory structure
|
|
mkdir src\main\java\robot\subsystems 2>nul
|
|
mkdir src\main\java\robot\hardware 2>nul
|
|
mkdir src\main\java\robot\opmodes 2>nul
|
|
mkdir src\test\java\robot\subsystems 2>nul
|
|
mkdir src\test\java\robot\hardware 2>nul
|
|
|
|
REM Step 3: Generate build files
|
|
echo Generating build configuration...
|
|
call "%WINDOWS_DIR%\generate-build-gradle.bat" "%PROJECT_DIR%"
|
|
call "%WINDOWS_DIR%\generate-settings-gradle.bat" "%PROJECT_DIR%" "%FTC_SDK_DIR%"
|
|
|
|
REM Step 4: Create Gradle wrapper using installed Gradle
|
|
echo Setting up Gradle wrapper...
|
|
call "%WINDOWS_DIR%\create-gradle-wrapper.bat" "%PROJECT_DIR%"
|
|
if errorlevel 1 (
|
|
echo.
|
|
echo ERROR: Failed to setup Gradle wrapper
|
|
echo Cleaning up partial project...
|
|
cd ..
|
|
rmdir /s /q "%PROJECT_DIR%" 2>nul
|
|
exit /b 1
|
|
)
|
|
|
|
REM Step 5: Generate source files
|
|
echo Generating example source files...
|
|
call "%WINDOWS_DIR%\generate-pose2d.bat" "%PROJECT_DIR%"
|
|
call "%WINDOWS_DIR%\generate-drive-subsystem.bat" "%PROJECT_DIR%"
|
|
call "%WINDOWS_DIR%\generate-mecanum-drive.bat" "%PROJECT_DIR%"
|
|
call "%WINDOWS_DIR%\generate-teleop.bat" "%PROJECT_DIR%"
|
|
call "%WINDOWS_DIR%\generate-drive-test.bat" "%PROJECT_DIR%"
|
|
|
|
REM Step 6: Generate helper scripts
|
|
echo Creating helper scripts...
|
|
call "%WINDOWS_DIR%\generate-build-script.bat" "%PROJECT_DIR%"
|
|
call "%WINDOWS_DIR%\generate-deploy-script.bat" "%PROJECT_DIR%"
|
|
|
|
REM Step 7: Create project files
|
|
echo Creating project files...
|
|
call "%WINDOWS_DIR%\generate-gitignore.bat" "%PROJECT_DIR%"
|
|
call "%WINDOWS_DIR%\generate-readme.bat" "%PROJECT_DIR%" "%PROJECT_NAME%"
|
|
|
|
REM Step 8: Initialize Git repository
|
|
echo.
|
|
echo ^>^>^> Initializing Git repository...
|
|
git init >nul 2>&1
|
|
git add . >nul 2>&1
|
|
git commit -m "Initial commit from FTC Project Generator" >nul 2>&1
|
|
echo + Git repository initialized
|
|
|
|
REM Final success message
|
|
call "%WINDOWS_DIR%\show-success.bat" "%PROJECT_NAME%" "%PROJECT_DIR%" "%FTC_SDK_DIR%" "%FTC_VERSION%"
|
|
|
|
endlocal
|
|
exit /b 0 |