From b682df4b9b7eaf9e29f3ea04aafc8d83e2a458ee Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 2 Mar 2026 20:13:00 +0000 Subject: [PATCH 1/3] Copy System.LinkTypes.Related links when cloning package work items for new Major.Minor versions Co-authored-by: danieljurek <2158838+danieljurek@users.noreply.github.com> --- .../Helpers/DevOps-WorkItem-Helpers.ps1 | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/eng/common/scripts/Helpers/DevOps-WorkItem-Helpers.ps1 b/eng/common/scripts/Helpers/DevOps-WorkItem-Helpers.ps1 index f91693dcafd3..2671a962a979 100644 --- a/eng/common/scripts/Helpers/DevOps-WorkItem-Helpers.ps1 +++ b/eng/common/scripts/Helpers/DevOps-WorkItem-Helpers.ps1 @@ -445,6 +445,27 @@ function CreateWorkItemRelation($id, $relatedId, $relationType, $outputCommand = Invoke-AzBoardsCmd "work-item relation add" $parameters $outputCommand | Out-Null } +function GetWorkItemRelatedLinkIds($workItemId) +{ + $uri = "https://dev.azure.com/azure-sdk/Release/_apis/wit/workitems/${workItemId}?`$expand=relations&api-version=6.0" + $response = Invoke-RestMethod -Method GET -Uri $uri ` + -Headers (Get-DevOpsRestHeaders) -ContentType "application/json" | ConvertTo-Json -Depth 10 | ConvertFrom-Json -AsHashTable + + $relatedIds = @() + if ($response.relations) { + foreach ($relation in $response.relations) { + if ($relation.rel -eq "System.LinkTypes.Related") { + $urlParts = $relation.url -split "/" + $relatedId = $urlParts[-1] + if ($relatedId -match "^\d+$") { + $relatedIds += [int]$relatedId + } + } + } + } + return $relatedIds +} + function UpdateWorkItem($id, $fields, $title, $state, $assignedTo, $outputCommand = $true) { $parameters = $ReleaseDevOpsCommonParameters @@ -481,6 +502,7 @@ function FindOrCreateClonePackageWorkItem($lang, $pkg, $verMajorMinor, $allowPro $latestVersionItem = FindLatestPackageWorkItem -lang $lang -packageName $pkg.Package -outputCommand $outputCommand -tag $tag -ignoreReleasePlannerTests $ignoreReleasePlannerTests -groupId $groupId $assignedTo = "me" $extraFields = @() + $existingRelatedIds = @() if ($latestVersionItem) { Write-Verbose "Copying data from latest matching [$($latestVersionItem.id)] with version $($latestVersionItem.fields["Custom.PackageVersionMajorMinor"])" if ($latestVersionItem.fields["System.AssignedTo"]) { @@ -499,6 +521,8 @@ function FindOrCreateClonePackageWorkItem($lang, $pkg, $verMajorMinor, $allowPro if ($latestVersionItem.fields["Custom.RoadmapState"]) { $extraFields += "`"RoadmapState=" + $latestVersionItem.fields["Custom.RoadmapState"] + "`"" } + + $existingRelatedIds = GetWorkItemRelatedLinkIds $latestVersionItem.id } if ($allowPrompt) { @@ -515,6 +539,10 @@ function FindOrCreateClonePackageWorkItem($lang, $pkg, $verMajorMinor, $allowPro } } $workItem = CreateOrUpdatePackageWorkItem $lang $pkg $verMajorMinor -existingItem $null -assignedTo $assignedTo -extraFields $extraFields -outputCommand $outputCommand -relatedId $relatedId -tag $tag -ignoreReleasePlannerTests $ignoreReleasePlannerTests + + foreach ($existingRelatedId in $existingRelatedIds) { + CreateWorkItemRelation $workItem.id $existingRelatedId "Related" $outputCommand + } } return $workItem From 6780ed80dd923b12f1a87935da3fb0c50b7fd8a7 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 2 Mar 2026 20:30:34 +0000 Subject: [PATCH 2/3] Replace REST API URI with az boards work-item relation show in GetWorkItemRelatedLinkIds Co-authored-by: danieljurek <2158838+danieljurek@users.noreply.github.com> --- eng/common/scripts/Helpers/DevOps-WorkItem-Helpers.ps1 | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/eng/common/scripts/Helpers/DevOps-WorkItem-Helpers.ps1 b/eng/common/scripts/Helpers/DevOps-WorkItem-Helpers.ps1 index 2671a962a979..98cf3fb38d8d 100644 --- a/eng/common/scripts/Helpers/DevOps-WorkItem-Helpers.ps1 +++ b/eng/common/scripts/Helpers/DevOps-WorkItem-Helpers.ps1 @@ -445,11 +445,11 @@ function CreateWorkItemRelation($id, $relatedId, $relationType, $outputCommand = Invoke-AzBoardsCmd "work-item relation add" $parameters $outputCommand | Out-Null } -function GetWorkItemRelatedLinkIds($workItemId) +function GetWorkItemRelatedLinkIds($workItemId, $outputCommand = $false) { - $uri = "https://dev.azure.com/azure-sdk/Release/_apis/wit/workitems/${workItemId}?`$expand=relations&api-version=6.0" - $response = Invoke-RestMethod -Method GET -Uri $uri ` - -Headers (Get-DevOpsRestHeaders) -ContentType "application/json" | ConvertTo-Json -Depth 10 | ConvertFrom-Json -AsHashTable + $parameters = $ReleaseDevOpsCommonParameters + $parameters += "--id", $workItemId + $response = Invoke-AzBoardsCmd "work-item relation show" $parameters $outputCommand $relatedIds = @() if ($response.relations) { @@ -522,7 +522,7 @@ function FindOrCreateClonePackageWorkItem($lang, $pkg, $verMajorMinor, $allowPro $extraFields += "`"RoadmapState=" + $latestVersionItem.fields["Custom.RoadmapState"] + "`"" } - $existingRelatedIds = GetWorkItemRelatedLinkIds $latestVersionItem.id + $existingRelatedIds = GetWorkItemRelatedLinkIds $latestVersionItem.id $outputCommand } if ($allowPrompt) { From 729a3e661c9d93237ec0e6d5c69c4d0f324ec37e Mon Sep 17 00:00:00 2001 From: Daniel Jurek Date: Thu, 5 Mar 2026 09:50:51 -0800 Subject: [PATCH 3/3] Fix --- eng/common/scripts/Helpers/DevOps-WorkItem-Helpers.ps1 | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/eng/common/scripts/Helpers/DevOps-WorkItem-Helpers.ps1 b/eng/common/scripts/Helpers/DevOps-WorkItem-Helpers.ps1 index 98cf3fb38d8d..b0cecfd50c2a 100644 --- a/eng/common/scripts/Helpers/DevOps-WorkItem-Helpers.ps1 +++ b/eng/common/scripts/Helpers/DevOps-WorkItem-Helpers.ps1 @@ -430,7 +430,9 @@ function CreateWorkItem($title, $type, $iteration, $area, $fields, $assignedTo, # Add a work item as related if given. if ($relatedId) { - CreateWorkItemRelation $workItemId $relatedId "Related" $outputCommand + foreach ($id in $relatedId) { + CreateWorkItemRelation $workItemId $relatedId "Related" $outputCommand + } } return $workItem } @@ -454,7 +456,7 @@ function GetWorkItemRelatedLinkIds($workItemId, $outputCommand = $false) $relatedIds = @() if ($response.relations) { foreach ($relation in $response.relations) { - if ($relation.rel -eq "System.LinkTypes.Related") { + if ($relation.rel -eq "Related") { $urlParts = $relation.url -split "/" $relatedId = $urlParts[-1] if ($relatedId -match "^\d+$") {