<# .SYNOPSIS Baut VitosUpdater lokal (Installer + portable EXE) ohne Veröffentlichung. .DESCRIPTION Führt Frontend-Prüfung und Rust-Prüfungen aus und baut danach mit `cargo tauri build`. Ergebnis: src-tauri\target\release\bundle\nsis\*-setup.exe sowie src-tauri\target\release\vitos-updater.exe (portabel). Für signierte Updater-Artefakte muss der Signierschlüssel gesetzt sein (siehe README, Abschnitt "Release"). Für eine Veröffentlichung auf Gitea stattdessen scripts\release.ps1 verwenden. #> [CmdletBinding()] param([switch]$SkipChecks) Set-StrictMode -Version Latest $ErrorActionPreference = 'Stop' Set-Location $PSScriptRoot function Invoke-Native([string]$Description, [scriptblock]$Command) { & $Command if ($LASTEXITCODE -ne 0) { throw "$Description ist fehlgeschlagen (Exit-Code $LASTEXITCODE)." } } $defaultKey = Join-Path $env:USERPROFILE '.vitosupdater\updater.key' if (-not $env:TAURI_SIGNING_PRIVATE_KEY -and -not $env:TAURI_SIGNING_PRIVATE_KEY_PATH -and (Test-Path $defaultKey)) { $env:TAURI_SIGNING_PRIVATE_KEY_PATH = $defaultKey } $env:CI = 'true' if (-not (Test-Path 'node_modules')) { Invoke-Native 'npm install' { npm install } } if (-not $SkipChecks) { Write-Host '==> Prüfungen' -ForegroundColor Cyan Invoke-Native 'svelte-check' { npm run check } Push-Location 'src-tauri' try { Invoke-Native 'cargo clippy' { cargo clippy --all-targets -- -D warnings } Invoke-Native 'cargo test' { cargo test } } finally { Pop-Location } } Write-Host '==> Bauen (cargo tauri build)' -ForegroundColor Cyan Invoke-Native 'cargo tauri build' { cargo tauri build } Write-Host '' Write-Host 'Fertig. Ergebnisse:' -ForegroundColor Green Get-ChildItem 'src-tauri\target\release\bundle\nsis' -Filter '*-setup.exe' | ForEach-Object { Write-Host " Installer: $($_.FullName)" } Write-Host " Portabel: $(Resolve-Path 'src-tauri\target\release\vitos-updater.exe')"