116 lines
4.2 KiB
PowerShell
116 lines
4.2 KiB
PowerShell
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")
|
|
}
|
|
|
|
# .env-Datei laden falls vorhanden (ist in .gitignore)
|
|
$EnvFile = Join-Path $ProjectRoot ".env"
|
|
if (Test-Path $EnvFile) {
|
|
Get-Content $EnvFile | ForEach-Object {
|
|
if ($_ -match '^\s*([A-Za-z_][A-Za-z0-9_]*)\s*=\s*(.*)\s*$') {
|
|
$val = $matches[2].Trim('"', "'")
|
|
[System.Environment]::SetEnvironmentVariable($matches[1], $val, "Process")
|
|
}
|
|
}
|
|
}
|
|
|
|
# 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"
|