@echo off REM Build-Script fuer AnwesenheitPDF.exe + Windows-Installer REM REM Ergebnis: REM build/ - temporaere PyInstaller-Artefakte REM dist/ - fertiges Programmverzeichnis (AnwesenheitPDF.exe + alle Abhaengigkeiten) REM + AnwesenheitPDF-Setup-x.y.z.exe (Windows-Installer) REM REM Voraussetzungen: REM pip install -r requirements-dev.txt REM Inno Setup 6 installiert (https://jrsoftware.org/isinfo.php) cd /d "%~dp0" echo. echo === AnwesenheitPDF Build === echo. echo [1/4] Abhaengigkeiten installieren... pip install -r requirements.txt --quiet && pip install -r requirements-dev.txt --quiet if %ERRORLEVEL% neq 0 ( echo [FEHLER] pip install fehlgeschlagen. pause exit /b 1 ) echo [2/4] Version aktualisieren... python update_version.py if %ERRORLEVEL% neq 0 ( echo [FEHLER] Version-Update fehlgeschlagen. pause exit /b 1 ) echo [3/4] Build starten... echo. python -m PyInstaller ^ --noconfirm ^ --onedir ^ --windowed ^ --distpath dist ^ --workpath build ^ --specpath build ^ --icon "%~dp0assets\icon.ico" ^ --add-data "%~dp0template;template" ^ --add-data "%~dp0config.json;." ^ --add-data "%~dp0schema.json;." ^ --add-data "%~dp0assets;assets" ^ --name "AnwesenheitPDF" ^ gui.py if %ERRORLEVEL% neq 0 ( echo. echo [FEHLER] Build fehlgeschlagen. pause exit /b 1 ) if not exist "dist\AnwesenheitPDF\template" mkdir "dist\AnwesenheitPDF\template" if not exist "dist\AnwesenheitPDF\output" mkdir "dist\AnwesenheitPDF\output" if exist "template\sab.pdf" copy /Y "template\sab.pdf" "dist\AnwesenheitPDF\template\sab.pdf" >nul echo. echo [4/4] Windows-Installer erstellen... REM Version aus config.json lesen (Format: "x.y.z+hash" -> nur "x.y.z" verwenden) for /f "tokens=2 delims=:," %%v in ('findstr /c:"\"version\"" config.json') do ( set RAW_VERSION=%%v ) REM Fuehrende/nachfolgende Leerzeichen und Anfuehrungszeichen entfernen, Hash abschneiden set RAW_VERSION=%RAW_VERSION: =% set RAW_VERSION=%RAW_VERSION:"=% for /f "tokens=1 delims=+" %%c in ("%RAW_VERSION%") do set APP_VERSION=%%c echo Version: %APP_VERSION% REM Inno Setup Compiler suchen (Standard-Installationspfade) set ISCC_PATH= if exist "%ProgramFiles(x86)%\Inno Setup 6\ISCC.exe" ( set "ISCC_PATH=%ProgramFiles(x86)%\Inno Setup 6\ISCC.exe" ) else if exist "%ProgramFiles%\Inno Setup 6\ISCC.exe" ( set "ISCC_PATH=%ProgramFiles%\Inno Setup 6\ISCC.exe" ) else if exist "%LOCALAPPDATA%\Programs\Inno Setup 6\ISCC.exe" ( set "ISCC_PATH=%LOCALAPPDATA%\Programs\Inno Setup 6\ISCC.exe" ) else ( for /f "delims=" %%i in ('where ISCC.exe 2^>nul') do set "ISCC_PATH=%%i" ) if "%ISCC_PATH%"=="" ( echo. echo [WARNUNG] Inno Setup 6 nicht gefunden. Installer wird NICHT erstellt. echo Download: https://jrsoftware.org/isinfo.php echo Nach der Installation Inno Setup 6 neu starten und build.bat erneut ausfuehren. echo. goto build_done ) "%ISCC_PATH%" /DMyAppVersion=%APP_VERSION% installer\AnwesenheitPDF.iss > build_iscc.log 2>&1 if %ERRORLEVEL% neq 0 ( echo. echo [FEHLER] Installer-Erstellung fehlgeschlagen. echo. type build_iscc.log pause exit /b 1 ) echo. echo [OK] Installer erstellt: dist\AnwesenheitPDF-Setup-%APP_VERSION%.exe echo. echo [5/5] Installer zu update_check_path deployen... REM update_check_path aus config.json auslesen for /f "tokens=2 delims=:," %%d in ('findstr /c:"\"update_check_path\"" config.json') do ( set UPDATE_PATH=%%d ) REM Leerzeichen und Anfuehrungszeichen entfernen set UPDATE_PATH=%UPDATE_PATH: =% set UPDATE_PATH=%UPDATE_PATH:"=% if "%UPDATE_PATH%"=="" ( echo [WARNUNG] update_check_path nicht in config.json gefunden. Deployment uebersprungen. goto build_done ) REM Zielverzeichnis pruefen und ggf. erstellen if not exist "%UPDATE_PATH%" ( echo [INFO] Erstelle Zielverzeichnis: %UPDATE_PATH% mkdir "%UPDATE_PATH%" if %ERRORLEVEL% neq 0 ( echo [WARNUNG] Konnte Zielverzeichnis nicht erstellen. Deployment uebersprungen. goto build_done ) ) REM Neuen Installer kopieren echo [INFO] Kopiere Installer nach: %UPDATE_PATH% copy /Y "dist\AnwesenheitPDF-Setup-%APP_VERSION%.exe" "%UPDATE_PATH%\AnwesenheitPDF-Setup-%APP_VERSION%.exe" >nul if %ERRORLEVEL% neq 0 ( echo [WARNUNG] Installer-Deployment fehlgeschlagen (Schreibrechte?). goto build_done ) echo [OK] Installer deployed zu: %UPDATE_PATH%\AnwesenheitPDF-Setup-%APP_VERSION%.exe :build_done echo. echo [OK] Build abgeschlossen. echo Programm: dist\AnwesenheitPDF\AnwesenheitPDF.exe echo Template: dist\AnwesenheitPDF\template\sab.pdf echo Output: dist\AnwesenheitPDF\output if not "%ISCC_PATH%"=="" ( echo Installer: dist\AnwesenheitPDF-Setup-%APP_VERSION%.exe ) if not "%UPDATE_PATH%"=="" ( echo Deployed: %UPDATE_PATH%\AnwesenheitPDF-Setup-%APP_VERSION%.exe ) echo. echo ... Programm wird gestartet ... start "" "dist\AnwesenheitPDF\AnwesenheitPDF.exe"