server-up/release.ps1
bes-r 34edd95c9b
Some checks failed
Deploy server-up (prod) / deploy (push) Successful in 6s
Build and push image / build (push) Has been cancelled
v0.3.1 - UI restyle, inklapbaar menu, taalmodule
2026-06-02 23:25:30 +02:00

129 lines
5.1 KiB
PowerShell

# release.ps1 — Server Up release-script
#
# Eén commando: stage alles → commit → tag → push (commit + tag) naar Forgejo.
# Forgejo Actions pakt de tag en bouwt automatisch het image met de juiste
# SU_VERSION (zie .forgejo/workflows/build.yml of server-up-deploy/README.md).
#
# Gebruik:
# .\release.ps1 -Version 0.3.02 -Message "Boilerplates YAML rendering fix"
#
# Optioneel:
# -DryRun Toon alles, voer niets uit
# -NoPush Wel taggen, niet pushen
# -AllowDirty Sla de "wel echt iets gewijzigd?" check over
# -ChangelogTop Plak een ## v$Version blok bovenaan CHANGELOG.md
[CmdletBinding()]
param(
[Parameter(Mandatory = $true)][string]$Version,
[Parameter(Mandatory = $true)][string]$Message,
[string]$Remote = "origin",
[switch]$DryRun,
[switch]$NoPush,
[switch]$AllowDirty,
[switch]$ChangelogTop
)
$ErrorActionPreference = "Stop"
# ── Sanity checks ─────────────────────────────────────────────────────────────
# Versie formaat (semver met optionele suffix)
if ($Version -notmatch '^\d+\.\d+(\.\d+)?([\-_.][\w]+)?$') {
throw "Versie moet 'x.y' of 'x.y.z' formaat zijn, kreeg: '$Version'"
}
# In een git repo?
$gitRoot = & git rev-parse --show-toplevel 2>$null
if ($LASTEXITCODE -ne 0) { throw "Niet in een git-repository" }
Set-Location $gitRoot
Write-Host "Repo: $gitRoot" -ForegroundColor DarkGray
# Tag bestaat al?
$existing = & git tag --list "v$Version"
if ($existing) { throw "Tag v$Version bestaat al — kies een ander versienummer of verwijder de tag eerst" }
# Iets om te committen?
$status = & git status --porcelain
if (-not $status -and -not $AllowDirty) {
Write-Host "Geen wijzigingen om te committen." -ForegroundColor Yellow
$reply = Read-Host "Alleen taggen op huidige HEAD? [y/N]"
if ($reply -notmatch '^[yY]') { exit 0 }
$tagOnly = $true
} else {
$tagOnly = $false
}
# ── Plan tonen ────────────────────────────────────────────────────────────────
Write-Host ""
Write-Host "═══ Release plan ═══" -ForegroundColor Cyan
Write-Host " Versie : v$Version"
Write-Host " Bericht: $Message"
Write-Host " Remote : $Remote"
if ($DryRun) { Write-Host " Mode : DRY RUN — niets wordt uitgevoerd" -ForegroundColor Yellow }
if ($tagOnly) { Write-Host " Mode : alleen tag (geen nieuwe commit)" -ForegroundColor Yellow }
if ($NoPush) { Write-Host " Push : OVERGESLAGEN" -ForegroundColor Yellow }
if (-not $tagOnly) {
Write-Host ""
Write-Host "Gewijzigde bestanden:" -ForegroundColor DarkGray
& git status --short
}
# ── Optioneel: CHANGELOG bijwerken ────────────────────────────────────────────
if ($ChangelogTop -and -not $DryRun -and -not $tagOnly) {
$clog = Join-Path $gitRoot "CHANGELOG.md"
if (Test-Path $clog) {
$date = Get-Date -Format "yyyy-MM-dd"
$header = "# v$Version$date`n`n$Message`n`n---`n`n"
$original = Get-Content $clog -Raw
Set-Content $clog ($header + $original) -NoNewline
& git add CHANGELOG.md
Write-Host "✓ CHANGELOG.md bijgewerkt" -ForegroundColor Green
}
}
# ── Uitvoeren ─────────────────────────────────────────────────────────────────
function Run([string]$Description, [scriptblock]$Action) {
Write-Host "$Description" -ForegroundColor Cyan
if (-not $DryRun) { & $Action }
}
if (-not $tagOnly) {
Run "git add -A" { & git add -A }
Run "git commit" {
# Commit met header "release: vX.Y.Z" + jouw message als body
& git commit -m "release: v$Version" -m $Message
if ($LASTEXITCODE -ne 0) { throw "git commit faalde" }
}
}
Run "git tag -a v$Version" {
& git tag -a "v$Version" -m "v$Version$Message"
if ($LASTEXITCODE -ne 0) { throw "git tag faalde" }
}
if (-not $NoPush) {
Run "git push $Remote HEAD" {
& git push $Remote HEAD
if ($LASTEXITCODE -ne 0) { throw "git push (commit) faalde" }
}
Run "git push $Remote v$Version" {
& git push $Remote "v$Version"
if ($LASTEXITCODE -ne 0) { throw "git push (tag) faalde" }
}
}
# ── Klaar ─────────────────────────────────────────────────────────────────────
Write-Host ""
Write-Host "✓ Release v$Version klaar" -ForegroundColor Green
if (-not $NoPush -and -not $DryRun) {
Write-Host " Forgejo Actions bouwt nu het image (zie repo → Actions)" -ForegroundColor DarkGray
Write-Host " Daarna op je server:" -ForegroundColor DarkGray
Write-Host " SU_VERSION=$Version in .env" -ForegroundColor DarkGray
Write-Host " docker compose pull && docker compose up -d" -ForegroundColor DarkGray
}