136 lines
5.2 KiB
Batchfile
136 lines
5.2 KiB
Batchfile
@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...
|
|
|
|
powershell -NoProfile -ExecutionPolicy Bypass -Command "$ErrorActionPreference = 'Stop'; $config = Get-Content -Raw -Encoding UTF8 'config.json' | ConvertFrom-Json; $updatePath = $config.update_check_path; if ([string]::IsNullOrWhiteSpace($updatePath)) { Write-Host '[WARNUNG] update_check_path nicht in config.json gefunden. Deployment uebersprungen.'; exit 0 }; $installer = Join-Path (Get-Location) 'dist\AnwesenheitPDF-Setup-%APP_VERSION%.exe'; if (-not (Test-Path -LiteralPath $installer)) { throw ('Installer nicht gefunden: ' + $installer) }; while (-not (Test-Path -LiteralPath $updatePath)) { Write-Host ''; Write-Host ' +----------------------------------------------------------+'; Write-Host ' | [!] Deployment-Pfad nicht erreichbar |'; Write-Host ' +----------------------------------------------------------+'; Write-Host ( ' | Pfad : {0}' -f $updatePath ); Write-Host ' | |'; Write-Host ' | Bitte Netzlaufwerk / Zielpfad verbinden und dann ENTER |'; Write-Host ' | druecken. |'; Write-Host ' +----------------------------------------------------------+'; [void](Read-Host 'Eingabe'); }; Write-Host ('[OK] Deployment-Pfad erreichbar: {0}' -f $updatePath); Copy-Item -LiteralPath $installer -Destination $updatePath -Force; Write-Host ('[OK] Installer deployed zu: {0}' -f (Join-Path $updatePath (Split-Path $installer -Leaf)))"
|
|
|
|
if %ERRORLEVEL% neq 0 (
|
|
echo.
|
|
echo [WARNUNG] Installer-Deployment fehlgeschlagen.
|
|
goto build_done
|
|
)
|
|
|
|
: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
|
|
)
|
|
|
|
echo.
|
|
echo ... Programm wird gestartet ...
|
|
start "" "dist\AnwesenheitPDF\AnwesenheitPDF.exe" |