Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 58 additions & 0 deletions eng/common/scripts/Helpers/DevOps-WorkItem-Helpers.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -1015,3 +1015,61 @@ function UpdateValidationStatus($pkgvalidationDetails, $BuildDefinition, $Pipeli
Write-Host "[$($workItem.id)]$LanguageDisplayName - $pkgName($versionMajorMinor) - Updated"
return $true
}


function Get-LanguageDevOpsName($LanguageShort)
{
switch ($LanguageShort.ToLower())
{
"net" { return "Dotnet" }
"js" { return "JavaScript" }
"java" { return "Java" }
"go" { return "Go" }
"python" { return "Python" }
default { return $null }
}
}

function Get-ReleasePlanForPackage($packageName)
{
$devopsFieldLanguage = Get-LanguageDevOpsName -LanguageShort $LanguageShort
if (!$devopsFieldLanguage)
{
Write-Host "Unsupported language to check release plans, language [$LanguageShort]"
return $null
}

$prStatusFieldName = "SDKPullRequestStatusFor$($devopsFieldLanguage)"
$packageNameFieldName = "$($devopsFieldLanguage) Package Name"
$fields = @()
$fields += "System.ID"
$fields += "System.State"
$fields += "System.AssignedTo"
$fields += "System.Parent"
$fields += "System.Tags"

$fieldList = ($fields | ForEach-Object { "[$_]"}) -join ", "
$query = "SELECT ${fieldList} FROM WorkItems WHERE [Work Item Type] = 'Release Plan' AND [${packageNameFieldName}] = '${packageName}'"
$query += " AND [${prStatusFieldName}] = 'merged'"
$query += " AND [System.State] IN ('In Progress') ORDER BY [System.CreatedDate]"
$workItems = Invoke-Query $fields $query
return $workItems
}

function Update-ReleaseStatusInReleasePlan($releasePlanWorkItemId, $status, $version)
{
$devopsFieldLanguage = Get-LanguageDevOpsName -LanguageShort $LanguageShort
if (!$devopsFieldLanguage)
{
Write-Host "Unsupported language to check release plans, language [$LanguageShort]"
return $null
}

$fields = @()
$fields += "`"ReleaseStatusFor$($devopsFieldLanguage)=$status`""
$fields += "`"ReleasedVersionFor$($devopsFieldLanguage)=$version`""

Write-Host "Updating Release Plan [$releasePlanWorkItemId] with status [$status] for language [$LanguageShort]."
$workItem = UpdateWorkItem -id $releasePlanWorkItemId -fields $fields
Write-Host "Updated release status for [$LanguageShort] in Release Plan [$releasePlanWorkItemId]"
}
56 changes: 56 additions & 0 deletions eng/common/scripts/Mark-ReleasePlanCompletion.ps1
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
param(
[Parameter(Mandatory = $true)]
[string]$PackageName,

[Parameter(Mandatory = $true)]
[string]$PackageVersion,

[Parameter(Mandatory = $false)]
[int]$MaxCount = 5
)

<#
.SYNOPSIS
Marks release plan completion by identifying pull requests that changed files in a given path.

.DESCRIPTION
This script helps to mark release plan completion by finding the active release plans for a package name

.PARAMETER PackageName
The package name being released (required)

.PARAMETER PackageVersion
The package version being released (required)

.PARAMETER MaxCount
Maximum number of recent pull request merges to check (default: 5)

#>

Set-StrictMode -Version 3
. (Join-Path $PSScriptRoot common.ps1)
. (Join-Path $PSScriptRoot Helpers DevOps-WorkItem-Helpers.ps1)

$AzureDevOpsOrganization = "azure-sdk"
$AzureDevOpsProject = "Release"
# Check Azure DevOps Release Plan work items if LanguageShort is available
Write-Host "Checking active release plan work items for package: $PackageName"
$workItems = Get-ReleasePlanForPackage $PackageName
if(!$workItems)
{
Write-Host "No active release plans found for package name: $PackageName."
exit 0
}

$activeReleasePlan = $workItems
if($workItems.Count -gt 1 -and ($workItems -is [System.Array]))
{
$concatenatedIds = ($workItems | Select-Object -ExpandProperty id) -join ','
Write-Host "Multiple release plans found for package name: $PackageName with work item IDs: $concatenatedIds. Using the first release plan to update release status."
$activeReleasePlan = $workItems[0]
}
# Update release status
Write-Host "Release plan work item ID: $($activeReleasePlan["id"])"
Write-Host "Marking release completion for package, name: $PackageName version: $PackageVersion"
Update-ReleaseStatusInReleasePlan $activeReleasePlan.id "Released" $PackageVersion
Write-Host "Successfully marked release completion for package, name: $PackageName version: $PackageVersion."