fix(gh-tickets): set-board-status akzeptiert 'In Progress' mit Leerzeichen
- ValidateSet entfernt (war zu restriktiv - kein Agent-Fehler mehr bei 'In Progress') - Normalisierung: 'In Progress' → 'InProgress' via .Trim()/-replace - Fehlerdetails bei gh-Fehler sichtbar (kein Out-Null mehr) - Null-Check auf content vor content.number-Vergleich (robuster gegen Draft-Items) - Board-Fehler mit Exit 1 und Klartext-Meldung - Getestet: alle 3 Status-Übergänge + 'In Progress' mit Leerzeichen + Fehlerfälle
This commit is contained in:
parent
22154cd5b8
commit
74bf5ef060
1 changed files with 32 additions and 17 deletions
49
.github/skills/gh-tickets/set-board-status.ps1
vendored
49
.github/skills/gh-tickets/set-board-status.ps1
vendored
|
|
@ -3,43 +3,58 @@
|
|||
Setzt den Board-Status eines Issues im GitHub Project Board.
|
||||
.DESCRIPTION
|
||||
Ermittelt die Item-ID des Issues im Board und setzt den Status
|
||||
auf den angegebenen Wert (Todo, In Progress, Done).
|
||||
auf den angegebenen Wert.
|
||||
Akzeptierte Werte: "Todo", "InProgress" (oder "In Progress"), "Done".
|
||||
.PARAMETER IssueNumber
|
||||
Die Issue-Nummer (z.B. 68).
|
||||
.PARAMETER Status
|
||||
Der Zielstatus: "Todo", "InProgress" oder "Done".
|
||||
Der Zielstatus: "Todo", "InProgress", "In Progress" oder "Done".
|
||||
#>
|
||||
param(
|
||||
[Parameter(Mandatory)][int]$IssueNumber,
|
||||
[Parameter(Mandatory)][ValidateSet("Todo","InProgress","Done")][string]$Status
|
||||
[Parameter(Mandatory)][int]$IssueNumber,
|
||||
[Parameter(Mandatory)][string]$Status
|
||||
)
|
||||
|
||||
$projectId = "PVT_kwHOCFqiJ84BXk9U"
|
||||
$statusFieldId = "PVTSSF_lAHOCFqiJ84BXk9UzhSw4es"
|
||||
|
||||
# Normalisierung: "In Progress" → "InProgress" (robust gegen Agent-Varianten)
|
||||
$normalizedStatus = $Status.Trim() -replace '\s+', ''
|
||||
# "InProgress" nach Kleinschreibung angleichen an Map-Schlüssel
|
||||
$statusMap = @{
|
||||
"Todo" = "f75ad846"
|
||||
"InProgress" = "47fc9ee4"
|
||||
"Done" = "98236657"
|
||||
"Todo" = "f75ad846"
|
||||
"InProgress" = "47fc9ee4"
|
||||
"Done" = "98236657"
|
||||
}
|
||||
|
||||
$optionId = $statusMap[$Status]
|
||||
if (-not $statusMap.ContainsKey($normalizedStatus)) {
|
||||
$valid = $statusMap.Keys -join ", "
|
||||
Write-Error "Ungültiger Status '$Status'. Gültige Werte: $valid (auch 'In Progress' für InProgress)."
|
||||
exit 1
|
||||
}
|
||||
$optionId = $statusMap[$normalizedStatus]
|
||||
|
||||
# Item-ID im Board finden
|
||||
$items = gh project item-list 2 --owner jreinemann-euris --format json --limit 200 | ConvertFrom-Json
|
||||
$item = $items.items | Where-Object { $_.content.number -eq $IssueNumber } | Select-Object -First 1
|
||||
$raw = gh project item-list 2 --owner jreinemann-euris --format json --limit 200 2>&1
|
||||
if ($LASTEXITCODE -ne 0) {
|
||||
Write-Error "Fehler beim Abrufen des Project Boards: $raw"
|
||||
exit 1
|
||||
}
|
||||
$items = $raw | ConvertFrom-Json
|
||||
$item = $items.items | Where-Object { $null -ne $_.content -and $_.content.number -eq $IssueNumber } | Select-Object -First 1
|
||||
|
||||
if (-not $item) {
|
||||
Write-Error "Issue #$IssueNumber nicht im Project Board gefunden."
|
||||
exit 1
|
||||
Write-Error "Issue #$IssueNumber nicht im Project Board gefunden. Bitte zuerst mit 'gh project item-add' hinzufügen."
|
||||
exit 1
|
||||
}
|
||||
|
||||
$itemId = $item.id
|
||||
|
||||
gh project item-edit --project-id $projectId --id $itemId --field-id $statusFieldId --single-select-option-id $optionId 2>&1 | Out-Null
|
||||
$editOutput = gh project item-edit --project-id $projectId --id $itemId --field-id $statusFieldId --single-select-option-id $optionId 2>&1
|
||||
if ($LASTEXITCODE -eq 0) {
|
||||
Write-Host "Issue #$IssueNumber → $Status"
|
||||
} else {
|
||||
Write-Error "Fehler beim Setzen des Status für Issue #$IssueNumber."
|
||||
exit 1
|
||||
Write-Host "Issue #$IssueNumber → $normalizedStatus"
|
||||
}
|
||||
else {
|
||||
Write-Error "Fehler beim Setzen des Status für Issue #${IssueNumber}: $editOutput"
|
||||
exit 1
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue