Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
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
Prev Previous commit
Next Next commit
Update script to check active release plans using package name and pr…
… merge status
  • Loading branch information
praveenkuttappan authored and azure-sdk committed Aug 18, 2025
commit ec6e06a33e0dbfb68d882d9a0a346ecf2f8e502c
15 changes: 6 additions & 9 deletions eng/common/scripts/Helpers/DevOps-WorkItem-Helpers.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -1026,14 +1026,11 @@ function Get-LanguageDevOpsName($LanguageShort)
"java" { return "Java" }
"go" { return "Go" }
"python" { return "Python" }
"rust" { return "Rust" }
"cpp" { return "Cpp" }
"c" { return "C" }
default { return $null }
}
}

function Get-ReleasePlanForPullRequest($prLink)
function Get-ReleasePlanForPackage($packageName)
{
$devopsFieldLanguage = Get-LanguageDevOpsName -LanguageShort $LanguageShort
if (!$devopsFieldLanguage)
Expand All @@ -1042,8 +1039,8 @@ function Get-ReleasePlanForPullRequest($prLink)
return $null
}

$prFieldName = "SDKPullRequestFor$($devopsFieldLanguage)"
$releaseStatusField = "ReleaseStatusFor$($devopsFieldLanguage)"
$prStatusFieldName = "SDKPullRequestStatusFor$($devopsFieldLanguage)"
$packageNameFieldName = "$($devopsFieldLanguage) Package Name"
$fields = @()
$fields += "System.ID"
$fields += "System.State"
Expand All @@ -1052,9 +1049,9 @@ function Get-ReleasePlanForPullRequest($prLink)
$fields += "System.Tags"

$fieldList = ($fields | ForEach-Object { "[$_]"}) -join ", "
$query = "SELECT ${fieldList} FROM WorkItems WHERE [Work Item Type] = 'Release Plan' AND [$prFieldName] = '${prLink}'"
$query += " AND [$releaseStatusField] <> 'Released'"
$query += " AND [System.State] NOT IN ('Finished', 'Abandoned')"
$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
}
Expand Down
109 changes: 13 additions & 96 deletions eng/common/scripts/Mark-ReleasePlanCompletion.ps1
Original file line number Diff line number Diff line change
@@ -1,16 +1,10 @@
param(
[Parameter(Mandatory = $true)]
[string]$Path,

param(
[Parameter(Mandatory = $true)]
[string]$PackageName,

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

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

[Parameter(Mandatory = $false)]
[int]$MaxCount = 5
)
Expand All @@ -20,22 +14,14 @@ param(
Marks release plan completion by identifying pull requests that changed files in a given path.

.DESCRIPTION
This script helps mark release plan completion by searching through git commit history to find
"Merge pull request" commits that affected files in the specified path. It extracts pull request
numbers and generates GitHub links to track what changes were included in the release.

.PARAMETER Path
The file or directory path to check for changes (required)
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 GitHubRepoUrl
The GitHub repository URL.

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

Expand All @@ -47,92 +33,23 @@ Set-StrictMode -Version 3

$AzureDevOpsOrganization = "azure-sdk"
$AzureDevOpsProject = "Release"


function Get-MergedPullRequests()
{
Write-Host "Searching for merged pull requests..."
$gitArgs = @(
"log"
"--grep=Merge pull request"
"--oneline"
"--max-count=$MaxCount"
"--"
$Path
)

Write-Host "Executing: git $($gitArgs -join ' ')"
$commits = & git @gitArgs 2>$null
if ($LASTEXITCODE -ne 0) {
Write-Error "Git command failed with exit code $LASTEXITCODE"
exit 1
}

if (-not $commits) {
Write-Host "No merge pull request commits found for the specified path."
exit 0
}

$pullRequests = @()
foreach ($commit in $commits) {
# Parse commit hash and message
if ($commit -match "Merge pull request #(\d+)") {
$prNumber = $matches[1]
if ($prNumber)
{
$prLink = "$GitHubRepoUrl/pull/$prNumber"
$pullRequests += $prLink
Write-Host "Merged pull request: $prLink"
}
}
}
return $pullRequests
}


# Verify the path exists
if (-not (Test-Path $Path)) {
Write-Warning "Path '$Path' does not exist in the current repository"
}

# Main execution
Write-Host "Finding most recent merged pull requests for path: $Path"

$pullRequests = Get-MergedPullRequests
if (!$pullRequests)
{
Write-Host "No valid pull request commits found."
exit 0
}
# Check Azure DevOps Release Plan work items if LanguageShort is available
Write-Host "Checking Azure DevOps Release Plan work items for language: $LanguageShort"
$workItems = @()
foreach ($prLink in $pullRequests)
{
Write-Host "Searching for work items related to pull request: $prLink"
$workItems += Get-ReleasePlanForPullRequest $prLink
if ($LASTEXITCODE -ne 0)
{
Write-Error "Failed to search Azure DevOps work items." -ForegroundColor Red
exit 1
}
}

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 the merged pull requests." -ForegroundColor Yellow
Write-Host "No active release plans found for package name: $PackageName."
exit 0
}

# Update release status
Write-Host "Marking release completion for package, name: $PackageName version: $PackageVersion"
foreach ($workItem in $workItems)
$activeReleasePlan = $workItems
if($workItems.Count -gt 1 -and ($workItems -is [System.Array]))
{
Update-ReleaseStatusInReleasePlan $workItem.id "Released" $PackageVersion
if ($LASTEXITCODE -ne 0)
{
Write-Error "Failed to update release status for work item ID $($workItem.id)." -ForegroundColor Red
exit 1
}
$activeReleasePlan = $workItems[0]
Write-Warning "Multiple active release plans found for package name: $PackageName. Using the first release plan to update release status."
}
# 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."