From 95e262d00921a706ddd45f25a52e4e2fb2b51562 Mon Sep 17 00:00:00 2001 From: Jens Reinemann Date: Sun, 17 May 2026 01:51:18 +0200 Subject: [PATCH] chore: Backlog-Status in Board-Skripten ergaenzen - set-board-status.ps1: 'Backlog' (4ce6ee37) als gueltigen Status erganzt - create-next-ticket.ps1: -Status Parameter (Todo|Backlog, Default: Todo) Todo: Order = min - 1 (naechstes Ticket) Backlog: Order = max + 10 (ans Ende gestellt) Explizite Status-Setzung via gh project item-edit nach Board-Add --- .../skills/gh-tickets/create-next-ticket.ps1 | 66 ++++++++++++++----- .../skills/gh-tickets/set-board-status.ps1 | 5 +- 2 files changed, 51 insertions(+), 20 deletions(-) diff --git a/.github/skills/gh-tickets/create-next-ticket.ps1 b/.github/skills/gh-tickets/create-next-ticket.ps1 index df135a1..477e9bf 100644 --- a/.github/skills/gh-tickets/create-next-ticket.ps1 +++ b/.github/skills/gh-tickets/create-next-ticket.ps1 @@ -1,10 +1,11 @@ <# .SYNOPSIS - Erstellt ein neues GitHub-Issue und setzt es als nächstes Ticket im Board. + Erstellt ein neues GitHub-Issue und fügt es zum Project Board hinzu. .DESCRIPTION - Legt ein Issue an, fügt es zum Project Board hinzu und setzt den Order-Wert - auf den niedrigsten aller offenen (nicht-Done) Items minus 1. - Dadurch wird es automatisch das nächste abzuarbeitende Ticket. + Legt ein Issue an, fügt es zum Project Board hinzu, setzt den Board-Status + und den Order-Wert. + - Status "Todo" (Standard): Order = niedrigster Todo-Wert minus 1 → wird als nächstes Ticket eingereiht. + - Status "Backlog": Order = höchster nicht-Done-Wert plus 10 → wird ans Ende gestellt. .PARAMETER Title Titel des neuen Issues. .PARAMETER Body @@ -12,16 +13,25 @@ .PARAMETER Labels Komma-separierte Labels (z.B. "migration,crm,enhancement"). Muss mindestens ein Type-Label enthalten: migration, tech-decision oder infrastructure. +.PARAMETER Status + Board-Status des neuen Tickets: "Todo" (Standard) oder "Backlog". #> param( [Parameter(Mandatory)][string]$Title, [string]$Body = "", - [Parameter(Mandatory)][string]$Labels + [Parameter(Mandatory)][string]$Labels, + [ValidateSet("Todo", "Backlog")] + [string]$Status = "Todo" ) -$repo = "jreinemann-euris/krisenvorrat" -$projectId = "PVT_kwHOCFqiJ84BXk9U" -$orderFieldId = "PVTF_lAHOCFqiJ84BXk9UzhSw4jo" +$repo = "jreinemann-euris/krisenvorrat" +$projectId = "PVT_kwHOCFqiJ84BXk9U" +$orderFieldId = "PVTF_lAHOCFqiJ84BXk9UzhSw4jo" +$statusFieldId = "PVTSSF_lAHOCFqiJ84BXk9UzhSw4es" +$statusOptionMap = @{ + "Todo" = "f75ad846" + "Backlog" = "4ce6ee37" +} # --- 1. Type-Label validieren --- $labelList = $Labels -split ',' | ForEach-Object { $_.Trim() } @@ -54,17 +64,29 @@ if ($LASTEXITCODE -ne 0) { } $itemId = ($addResult | ConvertFrom-Json).id -# --- 4. Niedrigsten Order-Wert ermitteln --- +# --- 4. Order-Wert ermitteln --- $raw = gh project item-list 2 --owner jreinemann-euris --format json --limit 200 | ConvertFrom-Json -$minOrder = $raw.items | - Where-Object { $_.status -ne "Done" -and $_.id -ne $itemId } | - ForEach-Object { [double]$_.order } | - Where-Object { $_ -gt 0 } | - Measure-Object -Minimum | - Select-Object -ExpandProperty Minimum +$otherItems = $raw.items | Where-Object { $_.status -ne "Done" -and $_.id -ne $itemId } -if ($null -eq $minOrder) { $minOrder = 10 } -$newOrder = $minOrder - 1 +if ($Status -eq "Todo") { + # Als nächstes Ticket: niedrigster bestehender Wert minus 1 + $refOrder = $otherItems | + ForEach-Object { [double]$_.order } | + Where-Object { $_ -gt 0 } | + Measure-Object -Minimum | + Select-Object -ExpandProperty Minimum + if ($null -eq $refOrder) { $refOrder = 10 } + $newOrder = $refOrder - 1 +} else { + # Backlog: ans Ende stellen (höchster bestehender Wert plus 10) + $refOrder = $otherItems | + ForEach-Object { [double]$_.order } | + Where-Object { $_ -gt 0 } | + Measure-Object -Maximum | + Select-Object -ExpandProperty Maximum + if ($null -eq $refOrder) { $refOrder = 0 } + $newOrder = $refOrder + 10 +} # --- 5. Order setzen --- gh project item-edit --project-id $projectId --id $itemId --field-id $orderFieldId --number $newOrder 2>&1 | Out-Null @@ -73,4 +95,12 @@ if ($LASTEXITCODE -ne 0) { exit 1 } -Write-Host "#$issueNumber $Title (Order: $newOrder)" +# --- 6. Board-Status setzen --- +$optionId = $statusOptionMap[$Status] +gh project item-edit --project-id $projectId --id $itemId --field-id $statusFieldId --single-select-option-id $optionId 2>&1 | Out-Null +if ($LASTEXITCODE -ne 0) { + Write-Error "Fehler beim Setzen des Board-Status." + exit 1 +} + +Write-Host "#$issueNumber $Title (Status: $Status, Order: $newOrder)" diff --git a/.github/skills/gh-tickets/set-board-status.ps1 b/.github/skills/gh-tickets/set-board-status.ps1 index 996d9b7..a3f8066 100644 --- a/.github/skills/gh-tickets/set-board-status.ps1 +++ b/.github/skills/gh-tickets/set-board-status.ps1 @@ -4,7 +4,7 @@ .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". + Akzeptierte Werte: "Todo", "InProgress" (oder "In Progress"), "Done", "Backlog". .PARAMETER IssueNumber Die Issue-Nummer (z.B. 68). .PARAMETER Status @@ -25,11 +25,12 @@ $statusMap = @{ "Todo" = "f75ad846" "InProgress" = "47fc9ee4" "Done" = "98236657" + "Backlog" = "4ce6ee37" } 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)." + Write-Error "Ungültiger Status '$Status'. Gültige Werte: $valid (auch 'In Progress' für InProgress, 'Backlog' für Backlog)." exit 1 } $optionId = $statusMap[$normalizedStatus]