@echo off rem KOTA Sensorbox Technician Tool - update to the newest released version. rem Checks Gitea for the newest release tag (vX.Y) and downloads only what changed (git). rem Works in a git clone and in a folder unpacked from a release zip (it is connected on first run). setlocal EnableDelayedExpansion cd /d "%~dp0" title KOTA Technician Tool - update if not defined KOTA_REPO_URL set "KOTA_REPO_URL=https://gitea.kota-app.com/kkallas/kota-technician-tool.git" set "UV_PROJECT_ENVIRONMENT=%LOCALAPPDATA%\KotaTechnicianTool\venv" set "PATH=%USERPROFILE%\.local\bin;%ProgramFiles%\Git\cmd;%PATH%" rem ---- git ---------------------------------------------------------------- where git >nul 2>nul if errorlevel 1 ( echo Git is not installed. It is needed to download updates. choice /m "Install Git for Windows now" if errorlevel 2 goto :fail winget install --id Git.Git -e --source winget --accept-package-agreements where git >nul 2>nul if errorlevel 1 ( echo [!] Git installation failed. Install it from https://git-scm.com and run this again. goto :fail ) ) rem ---- connect a folder unpacked from a zip --------------------------------- if not exist ".git" ( echo Connecting this folder to %KOTA_REPO_URL% ... git init -q || goto :fail git remote add origin "%KOTA_REPO_URL%" || goto :fail ) rem A developer copy follows a branch; it is updated with "git pull", not here. git rev-parse -q --verify HEAD >nul 2>nul if not errorlevel 1 ( for /f "delims=" %%b in ('git symbolic-ref -q --short HEAD 2^>nul') do ( echo This is a developer copy on branch %%b. Update it with: git pull goto :done ) ) echo Checking for a new version... git fetch --quiet --force --tags origin if errorlevel 1 ( echo [!] Cannot reach %KOTA_REPO_URL%. echo Check the Internet connection and your Gitea login, then try again. goto :fail ) set "LATEST=" for /f "delims=" %%t in ('git tag -l "v*" --sort^=-v:refname') do if not defined LATEST set "LATEST=%%t" if not defined LATEST ( echo [!] No released version found on the server. goto :fail ) set "CURRENT=" for /f "delims=" %%t in ('git describe --tags --exact-match HEAD 2^>nul') do set "CURRENT=%%t" if "%CURRENT%"=="%LATEST%" ( echo You already have the newest version %LATEST%. goto :deps ) if defined CURRENT ( for /f "delims=" %%s in ('git status --porcelain --untracked-files^=no') do set "DIRTY=1" if defined DIRTY ( echo Some tool files in this folder were changed by hand. They will be replaced by %LATEST%. choice /m "Continue" if errorlevel 2 goto :fail ) echo Updating %CURRENT% -^> %LATEST%. Changes: git --no-pager log --oneline --no-decorate "%CURRENT%..%LATEST%" ) else ( echo Installing %LATEST%... ) git -c advice.detachedHead=false checkout -q -f "%LATEST%" if errorlevel 1 goto :fail echo Now on %LATEST%. rem ---- Python libraries (only what changed) ---------------------------------- :deps where uv >nul 2>nul if errorlevel 1 ( echo Installing uv ^(Python package runner, current user only^)... powershell -NoProfile -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" ) where uv >nul 2>nul if errorlevel 1 ( echo [!] uv installation failed. Ask the firmware team for help. goto :fail ) echo Checking Python libraries... uv sync --frozen --no-dev --python 3.12 --quiet if errorlevel 1 goto :fail echo. echo Done. Start the tool with run_windows.bat. :done if not defined KOTA_NO_PAUSE pause exit /b 0 :fail echo. echo [!] Update did not finish. if not defined KOTA_NO_PAUSE pause exit /b 1