@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 ^ [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