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
This commit is contained in:
Jens Reinemann 2026-05-17 01:51:18 +02:00
parent d354e3b37c
commit 95e262d009
2 changed files with 51 additions and 20 deletions

View file

@ -1,10 +1,11 @@
<# <#
.SYNOPSIS .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 .DESCRIPTION
Legt ein Issue an, fügt es zum Project Board hinzu und setzt den Order-Wert Legt ein Issue an, fügt es zum Project Board hinzu, setzt den Board-Status
auf den niedrigsten aller offenen (nicht-Done) Items minus 1. und den Order-Wert.
Dadurch wird es automatisch das nächste abzuarbeitende Ticket. - 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 .PARAMETER Title
Titel des neuen Issues. Titel des neuen Issues.
.PARAMETER Body .PARAMETER Body
@ -12,16 +13,25 @@
.PARAMETER Labels .PARAMETER Labels
Komma-separierte Labels (z.B. "migration,crm,enhancement"). Muss mindestens Komma-separierte Labels (z.B. "migration,crm,enhancement"). Muss mindestens
ein Type-Label enthalten: migration, tech-decision oder infrastructure. ein Type-Label enthalten: migration, tech-decision oder infrastructure.
.PARAMETER Status
Board-Status des neuen Tickets: "Todo" (Standard) oder "Backlog".
#> #>
param( param(
[Parameter(Mandatory)][string]$Title, [Parameter(Mandatory)][string]$Title,
[string]$Body = "", [string]$Body = "",
[Parameter(Mandatory)][string]$Labels [Parameter(Mandatory)][string]$Labels,
[ValidateSet("Todo", "Backlog")]
[string]$Status = "Todo"
) )
$repo = "jreinemann-euris/krisenvorrat" $repo = "jreinemann-euris/krisenvorrat"
$projectId = "PVT_kwHOCFqiJ84BXk9U" $projectId = "PVT_kwHOCFqiJ84BXk9U"
$orderFieldId = "PVTF_lAHOCFqiJ84BXk9UzhSw4jo" $orderFieldId = "PVTF_lAHOCFqiJ84BXk9UzhSw4jo"
$statusFieldId = "PVTSSF_lAHOCFqiJ84BXk9UzhSw4es"
$statusOptionMap = @{
"Todo" = "f75ad846"
"Backlog" = "4ce6ee37"
}
# --- 1. Type-Label validieren --- # --- 1. Type-Label validieren ---
$labelList = $Labels -split ',' | ForEach-Object { $_.Trim() } $labelList = $Labels -split ',' | ForEach-Object { $_.Trim() }
@ -54,17 +64,29 @@ if ($LASTEXITCODE -ne 0) {
} }
$itemId = ($addResult | ConvertFrom-Json).id $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 $raw = gh project item-list 2 --owner jreinemann-euris --format json --limit 200 | ConvertFrom-Json
$minOrder = $raw.items | $otherItems = $raw.items | Where-Object { $_.status -ne "Done" -and $_.id -ne $itemId }
Where-Object { $_.status -ne "Done" -and $_.id -ne $itemId } |
ForEach-Object { [double]$_.order } |
Where-Object { $_ -gt 0 } |
Measure-Object -Minimum |
Select-Object -ExpandProperty Minimum
if ($null -eq $minOrder) { $minOrder = 10 } if ($Status -eq "Todo") {
$newOrder = $minOrder - 1 # 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 --- # --- 5. Order setzen ---
gh project item-edit --project-id $projectId --id $itemId --field-id $orderFieldId --number $newOrder 2>&1 | Out-Null 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 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)"

View file

@ -4,7 +4,7 @@
.DESCRIPTION .DESCRIPTION
Ermittelt die Item-ID des Issues im Board und setzt den Status Ermittelt die Item-ID des Issues im Board und setzt den Status
auf den angegebenen Wert. auf den angegebenen Wert.
Akzeptierte Werte: "Todo", "InProgress" (oder "In Progress"), "Done". Akzeptierte Werte: "Todo", "InProgress" (oder "In Progress"), "Done", "Backlog".
.PARAMETER IssueNumber .PARAMETER IssueNumber
Die Issue-Nummer (z.B. 68). Die Issue-Nummer (z.B. 68).
.PARAMETER Status .PARAMETER Status
@ -25,11 +25,12 @@ $statusMap = @{
"Todo" = "f75ad846" "Todo" = "f75ad846"
"InProgress" = "47fc9ee4" "InProgress" = "47fc9ee4"
"Done" = "98236657" "Done" = "98236657"
"Backlog" = "4ce6ee37"
} }
if (-not $statusMap.ContainsKey($normalizedStatus)) { if (-not $statusMap.ContainsKey($normalizedStatus)) {
$valid = $statusMap.Keys -join ", " $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 exit 1
} }
$optionId = $statusMap[$normalizedStatus] $optionId = $statusMap[$normalizedStatus]