76 lines
3.1 KiB
PowerShell
76 lines
3.1 KiB
PowerShell
|
|
#Requires -Version 5.1
|
||
|
|
<#
|
||
|
|
.SYNOPSIS
|
||
|
|
Baut whisper-local mit PyInstaller und erstellt ein versioniertes ZIP.
|
||
|
|
.DESCRIPTION
|
||
|
|
Liest die Version aus pyproject.toml, führt PyInstaller aus und packt
|
||
|
|
das dist-Verzeichnis als whisper-local-v{version}-win64.zip.
|
||
|
|
.EXAMPLE
|
||
|
|
.\build.ps1
|
||
|
|
.\build.ps1 -Clean # löscht dist/ und build/ vor dem Build
|
||
|
|
.\build.ps1 -SkipBuild # nur ZIP aus bestehendem dist/ erstellen
|
||
|
|
#>
|
||
|
|
param(
|
||
|
|
[switch]$Clean,
|
||
|
|
[switch]$SkipBuild
|
||
|
|
)
|
||
|
|
|
||
|
|
Set-StrictMode -Version Latest
|
||
|
|
$ErrorActionPreference = "Stop"
|
||
|
|
|
||
|
|
# ── Versionsnummer aus pyproject.toml lesen ───────────────────────────────────
|
||
|
|
$pyproject = Get-Content "pyproject.toml" -Raw
|
||
|
|
if ($pyproject -match 'version\s*=\s*"([^"]+)"') {
|
||
|
|
$version = $Matches[1]
|
||
|
|
} else {
|
||
|
|
Write-Error "Konnte Version nicht aus pyproject.toml lesen."
|
||
|
|
exit 1
|
||
|
|
}
|
||
|
|
|
||
|
|
$zipName = "whisper-local-v$version-win64.zip"
|
||
|
|
$distDir = "dist\whisper-local"
|
||
|
|
|
||
|
|
Write-Host "=== whisper-local Build v$version ===" -ForegroundColor Cyan
|
||
|
|
|
||
|
|
# ── Optional: Bereinigen ──────────────────────────────────────────────────────
|
||
|
|
if ($Clean) {
|
||
|
|
Write-Host "Bereinige build/ und dist/ ..." -ForegroundColor Yellow
|
||
|
|
if (Test-Path "build") { Remove-Item -Recurse -Force "build" }
|
||
|
|
if (Test-Path "dist") { Remove-Item -Recurse -Force "dist" }
|
||
|
|
if (Test-Path $zipName) { Remove-Item -Force $zipName }
|
||
|
|
}
|
||
|
|
|
||
|
|
# ── PyInstaller ausführen ────────────────────────────────────────────────────
|
||
|
|
if (-not $SkipBuild) {
|
||
|
|
Write-Host "Synchronisiere Build-Abhängigkeiten ..." -ForegroundColor Yellow
|
||
|
|
uv sync --group build
|
||
|
|
|
||
|
|
Write-Host "Starte PyInstaller ..." -ForegroundColor Yellow
|
||
|
|
uv run --group build python -m PyInstaller whisper_local.spec --noconfirm
|
||
|
|
|
||
|
|
if ($LASTEXITCODE -ne 0) {
|
||
|
|
Write-Error "PyInstaller fehlgeschlagen (Exit-Code $LASTEXITCODE)"
|
||
|
|
exit $LASTEXITCODE
|
||
|
|
}
|
||
|
|
}
|
||
|
|
|
||
|
|
# ── Prüfen ob dist-Ordner vorhanden ──────────────────────────────────────────
|
||
|
|
if (-not (Test-Path $distDir)) {
|
||
|
|
Write-Error "Ordner '$distDir' nicht gefunden — Build fehlgeschlagen?"
|
||
|
|
exit 1
|
||
|
|
}
|
||
|
|
|
||
|
|
# ── ZIP erstellen ─────────────────────────────────────────────────────────────
|
||
|
|
if (Test-Path $zipName) { Remove-Item -Force $zipName }
|
||
|
|
|
||
|
|
Write-Host "Erstelle $zipName ..." -ForegroundColor Yellow
|
||
|
|
Compress-Archive -Path $distDir -DestinationPath $zipName -CompressionLevel Optimal
|
||
|
|
|
||
|
|
$sizeMB = [math]::Round((Get-Item $zipName).Length / 1MB, 1)
|
||
|
|
Write-Host ""
|
||
|
|
Write-Host "Fertig: $zipName ($sizeMB MB)" -ForegroundColor Green
|
||
|
|
Write-Host ""
|
||
|
|
Write-Host "Testen:" -ForegroundColor Cyan
|
||
|
|
Write-Host " Expand-Archive $zipName -DestinationPath test-release"
|
||
|
|
Write-Host " .\test-release\whisper-local\whisper-local.exe"
|