Leesbare foutmeldingen in release.ps1 in plaats van een stacktrace
Invoke-Cmd gooide bij een fout een exception, waardoor je een PowerShell- stacktrace met het volledige buildx-commando kreeg en de eigenlijke oorzaak (401 van de registry) wegviel. - Invoke-Cmd meldt nu "Mislukt: <commando> (exitcode N)" en stopt met exit 1 - Optionele -Uitleg scriptblock per stap: de push-stap test opnieuw of je op de registry bent ingelogd en geeft dan de docker login-instructie; de tag-push wijst naar git ls-remote en het https-alternatief - De preflight-meldingen zijn gewone gekleurde regels in plaats van Write-Error, dus geen "Write-Error:" voorvoegsel meer - Elke afbreking sluit af met "Er is niets gepubliceerd." Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
50ed671e97
commit
cb98262698
@@ -43,6 +43,10 @@
|
||||
niet blijft hangen op een wachtwoordprompt van SSH
|
||||
- `release.ps1`, `dev.ps1` en `test.ps1` eindigen expliciet met exitcode 0, en de
|
||||
slotregel van een `-DryRun` zegt nu dat er niets is gepubliceerd
|
||||
- Mislukte stappen in `release.ps1` geven geen PowerShell-stacktrace meer maar
|
||||
een gerichte melding: bij een mislukte push wordt de registry-login opnieuw
|
||||
getest en volgt de bijbehorende instructie, bij een mislukte tag-push het
|
||||
https-alternatief
|
||||
|
||||
### Toegevoegd
|
||||
- Testsuite: `backend/test/app.test.js` (11 tests met `node --test`) voor de
|
||||
|
||||
+70
-31
@@ -70,7 +70,11 @@ $appLatestTag = "$appBase`:latest"
|
||||
|
||||
# ── Helpers ────────────────────────────────────────────────────────────────
|
||||
function Invoke-Cmd {
|
||||
param([string[]]$Cmd)
|
||||
param(
|
||||
[string[]]$Cmd,
|
||||
# Wordt bij een fout uitgevoerd om een gerichte uitleg te geven
|
||||
[scriptblock]$Uitleg
|
||||
)
|
||||
$display = $Cmd -join " "
|
||||
if ($DryRun) {
|
||||
Write-Host "[DRY-RUN] $display" -ForegroundColor Yellow
|
||||
@@ -78,7 +82,17 @@ function Invoke-Cmd {
|
||||
}
|
||||
Write-Host "> $display" -ForegroundColor DarkGray
|
||||
$output = & $Cmd[0] $Cmd[1..($Cmd.Length - 1)]
|
||||
if ($LASTEXITCODE -ne 0) { throw "Commando mislukt: $display" }
|
||||
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
# Geen 'throw': dat levert een PowerShell-stacktrace met het hele
|
||||
# commando erin, wat de eigenlijke oorzaak wegdrukt.
|
||||
Write-Host ""
|
||||
Write-Host "Mislukt: $($Cmd[0]) $($Cmd[1]) (exitcode $LASTEXITCODE)" -ForegroundColor Red
|
||||
if ($Uitleg) { & $Uitleg }
|
||||
Write-Host ""
|
||||
Write-Host "Er is niets gepubliceerd. Los het bovenstaande op en draai release.ps1 opnieuw." -ForegroundColor DarkGray
|
||||
exit 1
|
||||
}
|
||||
return $output
|
||||
}
|
||||
|
||||
@@ -145,17 +159,18 @@ if (-not $DryRun -and -not $Force) {
|
||||
# Toegang tot origin nu controleren; stap 4 pusht de tag en zou anders pas
|
||||
# na de build stranden.
|
||||
if (-not (Test-GitPushToegang)) {
|
||||
$remoteUrl = git remote get-url origin
|
||||
Write-Host ""
|
||||
Write-Error @"
|
||||
Geen toegang tot origin ($(git remote get-url origin)).
|
||||
|
||||
Controleer het met:
|
||||
git ls-remote --heads origin
|
||||
|
||||
Bij "Permission denied (publickey)": de SSH-sleutel doet het niet. Snelste
|
||||
alternatief is pushen over https met hetzelfde Gitea-token als de registry:
|
||||
git remote set-url origin https://<host>/<org>/<repo>.git
|
||||
"@
|
||||
Write-Host "Geen toegang tot origin ($remoteUrl)." -ForegroundColor Red
|
||||
Write-Host ""
|
||||
Write-Host "Stap 4 pusht de Git-tag, dus dit moet eerst werken. Controleer met:" -ForegroundColor Yellow
|
||||
Write-Host " git ls-remote --heads origin" -ForegroundColor White
|
||||
Write-Host ""
|
||||
Write-Host "Bij 'Permission denied (publickey)' doet de SSH-sleutel het niet." -ForegroundColor Yellow
|
||||
Write-Host "Snelste alternatief is https, met hetzelfde Gitea-token als de registry:" -ForegroundColor Yellow
|
||||
Write-Host " git remote set-url origin https://<host>/<org>/<repo>.git" -ForegroundColor White
|
||||
Write-Host ""
|
||||
Write-Host "Er is niets gepubliceerd." -ForegroundColor DarkGray
|
||||
exit 1
|
||||
}
|
||||
|
||||
@@ -218,23 +233,24 @@ if (-not $NoBuild) {
|
||||
Write-Host "[DRY-RUN] Niet ingelogd op $registryHost — een echte push zou hier falen." -ForegroundColor Yellow
|
||||
} else {
|
||||
Write-Host ""
|
||||
Write-Error @"
|
||||
Niet ingelogd op $registryHost — de push zou met 401 Unauthorized falen.
|
||||
|
||||
Kies één van deze twee:
|
||||
|
||||
1. Eenmalig handmatig inloggen (credential blijft bewaard):
|
||||
docker login $registryHost
|
||||
Gebruikersnaam = je Gitea-account, wachtwoord = een Gitea access token
|
||||
met scope write:package (Settings -> Applications -> Generate New Token).
|
||||
|
||||
2. Het script laten inloggen door deze variabelen te zetten:
|
||||
`$env:REGISTRY_USER = "<gitea-gebruiker>"
|
||||
`$env:REGISTRY_TOKEN = "<gitea-token met write:package>"
|
||||
|
||||
Let op: inloggen op $registryHost zonder poortnummer, en in dezelfde shell
|
||||
en onder dezelfde Windows-gebruiker als waarin je release.ps1 draait.
|
||||
"@
|
||||
Write-Host "Niet ingelogd op $registryHost — de push zou met 401 Unauthorized falen." -ForegroundColor Red
|
||||
Write-Host ""
|
||||
Write-Host "Kies een van deze twee:" -ForegroundColor Yellow
|
||||
Write-Host ""
|
||||
Write-Host " 1. Eenmalig handmatig inloggen (credential blijft bewaard):" -ForegroundColor Yellow
|
||||
Write-Host " docker login $registryHost" -ForegroundColor White
|
||||
Write-Host " Gebruikersnaam = je Gitea-account, wachtwoord = een Gitea access" -ForegroundColor DarkGray
|
||||
Write-Host " token met scope write:package (Settings > Applications > Generate" -ForegroundColor DarkGray
|
||||
Write-Host " New Token)." -ForegroundColor DarkGray
|
||||
Write-Host ""
|
||||
Write-Host " 2. Het script laten inloggen door deze variabelen te zetten:" -ForegroundColor Yellow
|
||||
Write-Host ' $env:REGISTRY_USER = "<gitea-gebruiker>"' -ForegroundColor White
|
||||
Write-Host ' $env:REGISTRY_TOKEN = "<gitea-token met write:package>"' -ForegroundColor White
|
||||
Write-Host ""
|
||||
Write-Host "Let op: zonder poortnummer inloggen, en in dezelfde shell en onder" -ForegroundColor DarkGray
|
||||
Write-Host "dezelfde Windows-gebruiker als waarin je release.ps1 draait." -ForegroundColor DarkGray
|
||||
Write-Host ""
|
||||
Write-Host "Er is niets gepubliceerd." -ForegroundColor DarkGray
|
||||
exit 1
|
||||
}
|
||||
}
|
||||
@@ -270,7 +286,24 @@ if (-not $NoBuild) {
|
||||
"--build-arg", "VITE_API_URL=$apiUrl",
|
||||
"--build-arg", "VITE_APP_VERSION=$appVersion",
|
||||
$PSScriptRoot
|
||||
)
|
||||
) -Uitleg {
|
||||
# Meestal is de build zelf goed en weigert de registry de push.
|
||||
if (-not (Test-RegistryLogin $appBase)) {
|
||||
Write-Host "Oorzaak: geen geldige login op $registryHost (de push geeft dan 401 Unauthorized)." -ForegroundColor Yellow
|
||||
Write-Host ""
|
||||
Write-Host " docker login $registryHost" -ForegroundColor White
|
||||
Write-Host " gebruikersnaam : je Gitea-account" -ForegroundColor DarkGray
|
||||
Write-Host " wachtwoord : Gitea access token met scope write:package" -ForegroundColor DarkGray
|
||||
Write-Host " (Gitea -> Settings -> Applications -> Generate New Token)" -ForegroundColor DarkGray
|
||||
Write-Host ""
|
||||
Write-Host "Of laat het script inloggen:" -ForegroundColor Yellow
|
||||
Write-Host ' $env:REGISTRY_USER = "<gitea-gebruiker>"' -ForegroundColor White
|
||||
Write-Host ' $env:REGISTRY_TOKEN = "<gitea-token>"' -ForegroundColor White
|
||||
} else {
|
||||
Write-Host "De registry-login is in orde, dus dit is een build- of netwerkfout." -ForegroundColor Yellow
|
||||
Write-Host "Bekijk de regels boven deze melding; de eerste ERROR wijst de oorzaak aan." -ForegroundColor DarkGray
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Write-Step "[3/5] Bouwen overgeslagen (-NoBuild)"
|
||||
}
|
||||
@@ -293,7 +326,13 @@ Write-Host "Git-tag aanmaken: $gitTag" -ForegroundColor White
|
||||
Invoke-Cmd @("git", "tag", "-a", $gitTag, "-m", "Release $gitTag")
|
||||
|
||||
Write-Host "Git-tag pushen naar origin" -ForegroundColor White
|
||||
Invoke-Cmd @("git", "push", "origin", "refs/tags/$gitTag")
|
||||
Invoke-Cmd @("git", "push", "origin", "refs/tags/$gitTag") -Uitleg {
|
||||
Write-Host "Kon de tag niet naar origin pushen." -ForegroundColor Yellow
|
||||
Write-Host "Het image staat al in de registry; alleen de tag en de Gitea-release ontbreken." -ForegroundColor DarkGray
|
||||
Write-Host "Controleer de toegang met: git ls-remote --heads origin" -ForegroundColor White
|
||||
Write-Host "Bij 'Permission denied (publickey)' is https het snelste alternatief:" -ForegroundColor DarkGray
|
||||
Write-Host " git remote set-url origin https://<host>/<org>/<repo>.git" -ForegroundColor White
|
||||
}
|
||||
|
||||
# ── Stap 5: Gitea-release aanmaken ────────────────────────────────────────
|
||||
Write-Step "[5/5] Gitea-release aanmaken"
|
||||
|
||||
Reference in New Issue
Block a user