<# .SYNOPSIS Veroeffentlicht PolyTrader im Deploymentcenter - der Aufruf fuer ein Release. .DESCRIPTION Vorschalt-Skript fuer scripts/release.ps1. Die Vorlage des Deploymentcenters bleibt unveraendert (so laesst sie sich bei einer neuen Fassung einfach ersetzen); was PolyTrader zusaetzlich braucht, passiert hier: 1. update-agent je Zielplattform von /installer/ holen und gegen installer.json pruefen. Das Publish-Ziel BundleUpdateAgent (PolyTrader.App.Avalonia.csproj) legt ihn neben die Anwendung - ohne ihn kann sich eine Installation nie selbst aktualisieren. 2. deploy/packager.config.json neben pack-and-deploy legen. Dort sucht das Werkzeug seine Zugangsdaten, und dort stehen die excludePatterns, die appsettings.Local.json, master.key und server_settings.xml aus dem Paket halten. Beides bleibt in .dc-tools/ (gitignored). 3. DcRequireUpdateAgent=true setzen: fehlt der Agent, bricht das Publish ab statt ein Paket ohne Update-Weg zu veroeffentlichen. .EXAMPLE .\scripts\publish-release.ps1 -Version 0.2.0 -Changelog "WebUI-Paritaet, Passwortsperre" .EXAMPLE .\scripts\publish-release.ps1 -WhatIf #> [CmdletBinding(SupportsShouldProcess = $true)] param( [string] $Version, [ValidateSet('prod', 'beta', 'dev')] [string] $Channel = 'prod', [string] $Changelog ) $ErrorActionPreference = 'Stop' $ProgressPreference = 'SilentlyContinue' # PowerShell 5.1 laedt mit Fortschrittsbalken um ein Vielfaches langsamer $repoRoot = Resolve-Path (Join-Path $PSScriptRoot '..') $toolDir = Join-Path $repoRoot '.dc-tools' $config = Get-Content (Join-Path $PSScriptRoot 'release.config.json') -Raw | ConvertFrom-Json $baseUrl = if ($config.baseUrl) { $config.baseUrl.TrimEnd('/') } else { 'https://dc.mhdf.de' } New-Item -ItemType Directory -Force -Path $toolDir | Out-Null # ------------------------------------------------------------ 1. update-agent $installer = Invoke-RestMethod -Uri "$baseUrl/installer/installer.json" -UseBasicParsing Write-Host "update-agent $($installer.version) laut installer.json" -ForegroundColor DarkGray foreach ($rid in $config.runtimes) { $name = if ($rid.StartsWith('win')) { "update-agent-$rid.exe" } else { "update-agent-$rid" } $entry = $installer.binaries | Where-Object { $_.file -eq $name } if (-not $entry) { throw "installer.json fuehrt keinen update-agent fuer $rid." } $expected = $entry.sha256.ToLower() $target = Join-Path $toolDir $name if ((Test-Path $target) -and (Get-FileHash $target -Algorithm SHA256).Hash.ToLower() -eq $expected) { Write-Host " $name vorhanden, Pruefsumme in Ordnung" -ForegroundColor DarkGray continue } Write-Host " $name wird geholt ..." -ForegroundColor Cyan $temp = "$target.download" Invoke-WebRequest -Uri "$baseUrl/installer/$name" -OutFile $temp -UseBasicParsing $actual = (Get-FileHash $temp -Algorithm SHA256).Hash.ToLower() if ($actual -ne $expected) { Remove-Item $temp -Force throw "Pruefsumme von $name stimmt nicht.`n erwartet: $expected`n erhalten: $actual" } Move-Item $temp $target -Force Write-Host " Pruefsumme in Ordnung" -ForegroundColor DarkGray } # ---------------------------------------------------- 2. Packager-Konfiguration $packagerConfig = Join-Path $repoRoot 'deploy/packager.config.json' if (-not (Test-Path $packagerConfig)) { throw "deploy/packager.config.json fehlt. Vorlage: deploy/packager.config.example.json" } Copy-Item $packagerConfig (Join-Path $toolDir 'packager.config.json') -Force # ----------------------------------------------------------- 3. Release-Vorlage $env:DcRequireUpdateAgent = 'true' try { & (Join-Path $PSScriptRoot 'release.ps1') @PSBoundParameters $code = $LASTEXITCODE } finally { Remove-Item Env:DcRequireUpdateAgent -ErrorAction SilentlyContinue } exit $code