Release 0.2.0 vorbereiten: update-agent ins Paket, Release-Skripte
Das 0.1.0-Paket enthielt keinen update-agent. "Jetzt installieren" sucht ihn ueber UpdateClient.ResolveAgentPath() neben der Anwendung - ohne ihn konnte sich keine Installation selbst aktualisieren. - BundleUpdateAgent (App-csproj): legt den Agenten beim Publish fuer eine Laufzeitkennung neben die Anwendung; fuer ein Release ein Abbruch, wenn er fehlt - scripts/release.ps1: unveraenderte Vorlage des Deploymentcenters - scripts/publish-release.ps1: holt den Agenten mit Pruefsumme aus installer.json und legt die Packager-Konfiguration neben pack-and-deploy - Version 0.2.0 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
<#
|
||||
.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
|
||||
Reference in New Issue
Block a user