<# .SYNOPSIS 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. Akzeptierte Werte: "Todo", "InProgress" (oder "In Progress"), "Done". .PARAMETER IssueNumber Die Issue-Nummer (z.B. 68). .PARAMETER Status Der Zielstatus: "Todo", "InProgress", "In Progress" oder "Done". #> param( [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" } 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 $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. Bitte zuerst mit 'gh project item-add' hinzufügen." exit 1 } $itemId = $item.id $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 → $normalizedStatus" } else { Write-Error "Fehler beim Setzen des Status für Issue #${IssueNumber}: $editOutput" exit 1 }