# ============================================================================= # Warlock Studio — Windows Build Script (PowerShell) # ============================================================================= # Builds with PyInstaller and optionally packages into an installer via Inno Setup. # # Usage: # .\build-scripts\build-windows.ps1 [-InnoSetup] [-OutputDir .\dist] # # Requires: Python 3.10+, pip, PyInstaller # Optional: Inno Setup (for -InnoSetup flag) # ============================================================================= param( [switch]$InnoSetup, [string]$OutputDir = (Join-Path (Get-Location) "dist") ) $ErrorActionPreference = "Stop" $ProjectRoot = Split-Path -Parent (Split-Path -Parent $PSCommandPath) $AppName = "Warlock-Studio" Write-Host "==========================================" -ForegroundColor Cyan Write-Host " Warlock Studio — Windows Build" -ForegroundColor Cyan Write-Host "==========================================" -ForegroundColor Cyan # ---- Step 1: Install Python dependencies ---- Write-Host "[1/5] Installing Python dependencies..." -ForegroundColor Yellow python -m pip install --upgrade pip wheel setuptools pip install -r (Join-Path $ProjectRoot "requirements.txt") pip install pyinstaller onnxruntime-directml # ---- Step 2: Build with PyInstaller ---- Write-Host "[2/5] Building with PyInstaller..." -ForegroundColor Yellow $specFile = Join-Path $ProjectRoot "Warlock-Studio.spec" $distPath = $OutputDir pyinstaller $specFile --noconfirm --distpath $distPath # Verify output $binaryPath = Join-Path $distPath $AppName "$AppName.exe" if (-not (Test-Path $binaryPath)) { Write-Error "Build failed: $binaryPath not found" exit 1 } Write-Host " Binary: $binaryPath" -ForegroundColor Green # ---- Step 3: Create versioned archive ---- Write-Host "[3/5] Creating ZIP archive..." -ForegroundColor Yellow $version = "dev" $tag = git describe --tags --abbrev=0 2>$null if ($tag) { $version = $tag.TrimStart('v') } $archiveName = "$AppName-$version-win64.zip" $archivePath = Join-Path $ProjectRoot $archiveName $buildDir = Join-Path $distPath $AppName Compress-Archive -Path "$buildDir\*" -DestinationPath $archivePath -Force Write-Host " Archive: $archivePath" -ForegroundColor Green # ---- Step 4: Build Inno Setup installer (optional) ---- if ($InnoSetup) { Write-Host "[4/5] Building Inno Setup installer..." -ForegroundColor Yellow # Check if ISCC is available $iscc = Get-Command "iscc" -ErrorAction SilentlyContinue if (-not $iscc) { $possiblePaths = @( "${env:ProgramFiles(x86)}\Inno Setup 6\ISCC.exe", "${env:ProgramFiles}\Inno Setup 6\ISCC.exe", "${env:ProgramFiles(x86)}\Inno Setup 5\ISCC.exe" ) $isccPath = $possiblePaths | Where-Object { Test-Path $_ } | Select-Object -First 1 if (-not $isccPath) { Write-Warning "Inno Setup not found. Skipping installer build." Write-Warning " Install from: https://jrsoftware.org/isdl.php" } else { $iscc = $isccPath } } if ($iscc) { $issFile = Join-Path $ProjectRoot "Setup.iss" if (Test-Path $issFile) { & $iscc $issFile Write-Host " Installer built." -ForegroundColor Green } else { Write-Warning "Setup.iss not found. Skipping installer." } } } else { Write-Host "[4/5] Skipped (use -InnoSetup to build installer)" -ForegroundColor Gray } # ---- Step 5: Cleanup ---- Write-Host "[5/5] Cleanup..." -ForegroundColor Yellow Remove-Item -Recurse -Force "build" -ErrorAction SilentlyContinue Write-Host "" Write-Host "==========================================" -ForegroundColor Cyan Write-Host " BUILD COMPLETE" -ForegroundColor Cyan Write-Host "==========================================" -ForegroundColor Cyan Write-Host "Output: $archiveName" -ForegroundColor Green if ($InnoSetup -and $iscc) { Write-Host "Installer: Output\Warlock-Studio-$version-Full-Installer.exe" -ForegroundColor Green }