From d15ebd8916e6f4f83f417a39c248ce7baa2757ef Mon Sep 17 00:00:00 2001 From: harald Date: Mon, 7 Sep 2026 16:40:49 +0200 Subject: [PATCH] feat(release): add automated Gitea release publisher script --- scripts/publish-release.ps1 | 104 ++++++++++++++++++++++++++++++++++++ 1 file changed, 104 insertions(+) create mode 100644 scripts/publish-release.ps1 diff --git a/scripts/publish-release.ps1 b/scripts/publish-release.ps1 new file mode 100644 index 0000000..a6e2787 --- /dev/null +++ b/scripts/publish-release.ps1 @@ -0,0 +1,104 @@ +param ( + [string]$Token, + [string]$GiteaUrl = "https://gitea.pansi.eu", + [string]$Owner = "harald", + [string]$Repo = "sanctum" +) + +$ErrorActionPreference = "Stop" + +$ScriptDir = Split-Path -Parent $MyInvocation.MyCommand.Path +$ProjectRoot = Split-Path -Parent $ScriptDir +$CargoToml = Get-Content (Join-Path $ProjectRoot "Cargo.toml") -Raw +if ($CargoToml -match 'version\s*=\s*"([^"]+)"') { + $Version = $matches[1] +} else { + Write-Error "Version nicht gefunden." + exit 1 +} + +$TagName = "v$Version" +$DistDir = Join-Path $ProjectRoot "dist" +$ZipFile = Join-Path $DistDir "sanctum-$TagName-windows-x86_64.zip" +$ChecksumFile = Join-Path $DistDir "SHA256SUMS.txt" + +if (-not (Test-Path $ZipFile)) { + Write-Host "Dist-Paket existiert noch nicht. Baue Paket..." -ForegroundColor Yellow + & (Join-Path $ScriptDir "package-release.ps1") +} + +# Token ermitteln (Parameter -> Environment -> Prompt) +if (-not $Token) { + if ($env:GITEA_TOKEN) { + $Token = $env:GITEA_TOKEN + } else { + $SecureToken = Read-Host "Gitea Personal Access Token (mit 'repo'-Scope)" -AsSecureString + $BSTR = [System.Runtime.InteropServices.Marshal]::SecureStringToBSTR($SecureToken) + $Token = [System.Runtime.InteropServices.Marshal]::PtrToStringAuto($BSTR) + } +} + +if (-not $Token -or $Token.Trim().Length -eq 0) { + Write-Error "Kein Token angegeben. Abgebrochen." + exit 1 +} + +Write-Host "============================================================" -ForegroundColor Cyan +Write-Host " Veroeffentliche Release $TagName auf Gitea" -ForegroundColor Cyan +Write-Host " Repository: $Owner/$Repo ($GiteaUrl)" -ForegroundColor Cyan +Write-Host "============================================================" -ForegroundColor Cyan + +$Headers = @{ + "Authorization" = "token $Token" + "Accept" = "application/json" +} + +# Pruefen ob Release bereits existiert +$ExistingReleases = try { + Invoke-RestMethod -Uri "$GiteaUrl/api/v1/repos/$Owner/$Repo/releases" -Headers $Headers -Method Get +} catch { + @() +} + +$Release = $ExistingReleases | Where-Object { $_.tag_name -eq $TagName } + +if (-not $Release) { + $Changelog = Get-Content (Join-Path $ProjectRoot "CHANGELOG.md") -Raw + $Body = @{ + tag_name = $TagName + name = "Sanctum $TagName (Windows x86_64)" + body = $Changelog + draft = $false + prerelease = $false + } | ConvertTo-Json + + $Release = Invoke-RestMethod -Uri "$GiteaUrl/api/v1/repos/$Owner/$Repo/releases" -Headers $Headers -Method Post -Body $Body -ContentType "application/json; charset=utf-8" + Write-Host "[OK] Release $TagName auf Gitea angelegt (ID: $($Release.id))." -ForegroundColor Green +} else { + Write-Host "[INFO] Release $TagName existiert bereits (ID: $($Release.id))." -ForegroundColor Yellow +} + +$UploadUrl = "$GiteaUrl/api/v1/repos/$Owner/$Repo/releases/$($Release.id)/assets" + +# ZIP Asset hochladen +Write-Host "Lade sanctum-$TagName-windows-x86_64.zip hoch..." -ForegroundColor Cyan +$ZipResult = & curl.exe -s -X POST "$UploadUrl?name=sanctum-$TagName-windows-x86_64.zip" ` + -H "Authorization: token $Token" ` + -H "Content-Type: multipart/form-data" ` + -F "attachment=@$ZipFile" + +Write-Host "[OK] sanctum-$TagName-windows-x86_64.zip hochgeladen." -ForegroundColor Green + +# SHA256SUMS.txt hochladen +Write-Host "Lade SHA256SUMS.txt hoch..." -ForegroundColor Cyan +$SumResult = & curl.exe -s -X POST "$UploadUrl?name=SHA256SUMS.txt" ` + -H "Authorization: token $Token" ` + -H "Content-Type: multipart/form-data" ` + -F "attachment=@$ChecksumFile" + +Write-Host "[OK] SHA256SUMS.txt hochgeladen." -ForegroundColor Green + +Write-Host "`n============================================================" -ForegroundColor Green +Write-Host " Release $TagName erfolgreich auf Gitea veroeffentlicht!" -ForegroundColor Green +Write-Host "============================================================" -ForegroundColor Green +Write-Host " URL: $GiteaUrl/$Owner/$Repo/releases/tag/$TagName`n"