# StatusQuo_Updates/scripts/update.ps1 # Zentraler Updater - wird von update.bat per Invoke-Expression geladen. # Erwartet im aufrufenden Scope: $proj (Projektname z.B. 'VI3DGL'), $root (Installationspfad) $ErrorActionPreference = 'Stop' $DistBase = "https://gitea.rhino.nrw/Rhino/StatusQuo_Updates/raw/branch/main/$proj" # Lokale Version lesen $localVer = '0.0.0' $verFile = Join-Path $root 'VERSION' if (Test-Path -LiteralPath $verFile) { $localVer = (Get-Content $verFile -Raw).Trim() } # Remote-Version abfragen Write-Host "Prüfe Update für $proj ..." try { $remoteVer = (Invoke-WebRequest -Uri "$DistBase/VERSION" -UseBasicParsing -TimeoutSec 15).Content.Trim() } catch { Write-Host "FEHLER: Dist-Repo nicht erreichbar. Netzverbindung prüfen." -ForegroundColor Red return } Write-Host "Lokal: v$localVer" Write-Host "Remote: v$remoteVer" if ($localVer -eq $remoteVer) { Write-Host "Bereits auf aktuellem Stand. Kein Update nötig." -ForegroundColor Green return } $yn = Read-Host "Update von v$localVer auf v$remoteVer installieren? [j/N]" if ($yn -notin 'j','J','y','Y') { Write-Host "Abgebrochen."; return } # Temp-Ordner $tmp = Join-Path $root 'TempUpdate' Remove-Item $tmp -Recurse -Force -ErrorAction SilentlyContinue New-Item -ItemType Directory -Path $tmp | Out-Null # Bundles laden Write-Host "Lade Manifest ..." $manifest = (Invoke-WebRequest -Uri "$DistBase/MANIFEST.txt" -UseBasicParsing -TimeoutSec 30).Content $bundles = ($manifest -split "`n" | Where-Object { $_ -match '^sync-bundle-' } | ForEach-Object { ($_ -split ' ')[0] } | Sort-Object -Unique) foreach ($b in $bundles) { Write-Host " $b ..." Invoke-WebRequest -Uri "$DistBase/$b" -OutFile (Join-Path $tmp $b) -UseBasicParsing -TimeoutSec 120 } Write-Host " sync-entpacken.bat ..." Invoke-WebRequest -Uri "$DistBase/sync-entpacken.bat" -OutFile (Join-Path $tmp 'sync-entpacken.bat') -UseBasicParsing -TimeoutSec 30 # Server stoppen Write-Host "Stoppe Server ..." $stopBat = Join-Path $root 'stop.bat' if (Test-Path -LiteralPath $stopBat) { & cmd /c "`"$stopBat`"" Start-Sleep -Seconds 2 } # Backup $ts = Get-Date -Format 'yyyyMMdd-HHmmss' $bkDir = Join-Path $root ".backup\$ts" New-Item -ItemType Directory -Path $bkDir -Force | Out-Null foreach ($ext in '*.ps1','*.html','*.js','*.css','*.bat') { Get-ChildItem -LiteralPath $root -File -Filter $ext -ErrorAction SilentlyContinue | Copy-Item -Destination $bkDir } Write-Host "Backup: $bkDir" # Entpacken (sync-entpacken.bat aus TempUpdate → schreibt in Root eine Ebene hoeher) Write-Host "Entpacke ..." & cmd /c "`"$(Join-Path $tmp 'sync-entpacken.bat')`"" # VERSION lokal aktualisieren [System.IO.File]::WriteAllText($verFile, ($remoteVer + "`r`n"), [System.Text.Encoding]::UTF8) Write-Host "Version auf v$remoteVer aktualisiert." -ForegroundColor Green # Aufräumen Remove-Item $tmp -Recurse -Force -ErrorAction SilentlyContinue # Server neu starten $dglBat = Join-Path $root 'dgl.bat' if (Test-Path -LiteralPath $dglBat) { Start-Process -FilePath 'cmd.exe' -ArgumentList "/c `"$dglBat`"" -WindowStyle Hidden Write-Host "Server gestartet." -ForegroundColor Green } else { Write-Host "dgl.bat nicht gefunden — bitte Server manuell starten." -ForegroundColor Yellow } Write-Host "" Write-Host "=== Update abgeschlossen ===" -ForegroundColor Green