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
|
niet blijft hangen op een wachtwoordprompt van SSH
|
||||||
- `release.ps1`, `dev.ps1` en `test.ps1` eindigen expliciet met exitcode 0, en de
|
- `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
|
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
|
### Toegevoegd
|
||||||
- Testsuite: `backend/test/app.test.js` (11 tests met `node --test`) voor de
|
- Testsuite: `backend/test/app.test.js` (11 tests met `node --test`) voor de
|
||||||
|
|||||||
+70
-31
@@ -70,7 +70,11 @@ $appLatestTag = "$appBase`:latest"
|
|||||||
|
|
||||||
# ── Helpers ────────────────────────────────────────────────────────────────
|
# ── Helpers ────────────────────────────────────────────────────────────────
|
||||||
function Invoke-Cmd {
|
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 " "
|
$display = $Cmd -join " "
|
||||||
if ($DryRun) {
|
if ($DryRun) {
|
||||||
Write-Host "[DRY-RUN] $display" -ForegroundColor Yellow
|
Write-Host "[DRY-RUN] $display" -ForegroundColor Yellow
|
||||||
@@ -78,7 +82,17 @@ function Invoke-Cmd {
|
|||||||
}
|
}
|
||||||
Write-Host "> $display" -ForegroundColor DarkGray
|
Write-Host "> $display" -ForegroundColor DarkGray
|
||||||
$output = & $Cmd[0] $Cmd[1..($Cmd.Length - 1)]
|
$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
|
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
|
# Toegang tot origin nu controleren; stap 4 pusht de tag en zou anders pas
|
||||||
# na de build stranden.
|
# na de build stranden.
|
||||||
if (-not (Test-GitPushToegang)) {
|
if (-not (Test-GitPushToegang)) {
|
||||||
|
$remoteUrl = git remote get-url origin
|
||||||
Write-Host ""
|
Write-Host ""
|
||||||
Write-Error @"
|
Write-Host "Geen toegang tot origin ($remoteUrl)." -ForegroundColor Red
|
||||||
Geen toegang tot origin ($(git remote get-url origin)).
|
Write-Host ""
|
||||||
|
Write-Host "Stap 4 pusht de Git-tag, dus dit moet eerst werken. Controleer met:" -ForegroundColor Yellow
|
||||||
Controleer het met:
|
Write-Host " git ls-remote --heads origin" -ForegroundColor White
|
||||||
git ls-remote --heads origin
|
Write-Host ""
|
||||||
|
Write-Host "Bij 'Permission denied (publickey)' doet de SSH-sleutel het niet." -ForegroundColor Yellow
|
||||||
Bij "Permission denied (publickey)": de SSH-sleutel doet het niet. Snelste
|
Write-Host "Snelste alternatief is https, met hetzelfde Gitea-token als de registry:" -ForegroundColor Yellow
|
||||||
alternatief is pushen over https met hetzelfde Gitea-token als de registry:
|
Write-Host " git remote set-url origin https://<host>/<org>/<repo>.git" -ForegroundColor White
|
||||||
git remote set-url origin https://<host>/<org>/<repo>.git
|
Write-Host ""
|
||||||
"@
|
Write-Host "Er is niets gepubliceerd." -ForegroundColor DarkGray
|
||||||
exit 1
|
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
|
Write-Host "[DRY-RUN] Niet ingelogd op $registryHost — een echte push zou hier falen." -ForegroundColor Yellow
|
||||||
} else {
|
} else {
|
||||||
Write-Host ""
|
Write-Host ""
|
||||||
Write-Error @"
|
Write-Host "Niet ingelogd op $registryHost — de push zou met 401 Unauthorized falen." -ForegroundColor Red
|
||||||
Niet ingelogd op $registryHost — de push zou met 401 Unauthorized falen.
|
Write-Host ""
|
||||||
|
Write-Host "Kies een van deze twee:" -ForegroundColor Yellow
|
||||||
Kies één van deze twee:
|
Write-Host ""
|
||||||
|
Write-Host " 1. Eenmalig handmatig inloggen (credential blijft bewaard):" -ForegroundColor Yellow
|
||||||
1. Eenmalig handmatig inloggen (credential blijft bewaard):
|
Write-Host " docker login $registryHost" -ForegroundColor White
|
||||||
docker login $registryHost
|
Write-Host " Gebruikersnaam = je Gitea-account, wachtwoord = een Gitea access" -ForegroundColor DarkGray
|
||||||
Gebruikersnaam = je Gitea-account, wachtwoord = een Gitea access token
|
Write-Host " token met scope write:package (Settings > Applications > Generate" -ForegroundColor DarkGray
|
||||||
met scope write:package (Settings -> Applications -> Generate New Token).
|
Write-Host " New Token)." -ForegroundColor DarkGray
|
||||||
|
Write-Host ""
|
||||||
2. Het script laten inloggen door deze variabelen te zetten:
|
Write-Host " 2. Het script laten inloggen door deze variabelen te zetten:" -ForegroundColor Yellow
|
||||||
`$env:REGISTRY_USER = "<gitea-gebruiker>"
|
Write-Host ' $env:REGISTRY_USER = "<gitea-gebruiker>"' -ForegroundColor White
|
||||||
`$env:REGISTRY_TOKEN = "<gitea-token met write:package>"
|
Write-Host ' $env:REGISTRY_TOKEN = "<gitea-token met write:package>"' -ForegroundColor White
|
||||||
|
Write-Host ""
|
||||||
Let op: inloggen op $registryHost zonder poortnummer, en in dezelfde shell
|
Write-Host "Let op: zonder poortnummer inloggen, en in dezelfde shell en onder" -ForegroundColor DarkGray
|
||||||
en onder dezelfde Windows-gebruiker als waarin je release.ps1 draait.
|
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
|
exit 1
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -270,7 +286,24 @@ if (-not $NoBuild) {
|
|||||||
"--build-arg", "VITE_API_URL=$apiUrl",
|
"--build-arg", "VITE_API_URL=$apiUrl",
|
||||||
"--build-arg", "VITE_APP_VERSION=$appVersion",
|
"--build-arg", "VITE_APP_VERSION=$appVersion",
|
||||||
$PSScriptRoot
|
$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 {
|
} else {
|
||||||
Write-Step "[3/5] Bouwen overgeslagen (-NoBuild)"
|
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")
|
Invoke-Cmd @("git", "tag", "-a", $gitTag, "-m", "Release $gitTag")
|
||||||
|
|
||||||
Write-Host "Git-tag pushen naar origin" -ForegroundColor White
|
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 ────────────────────────────────────────
|
# ── Stap 5: Gitea-release aanmaken ────────────────────────────────────────
|
||||||
Write-Step "[5/5] Gitea-release aanmaken"
|
Write-Step "[5/5] Gitea-release aanmaken"
|
||||||
|
|||||||
Reference in New Issue
Block a user