Skip to content

Commit 61a3a2e

Browse files
Update release pending status and pipeline URL in release plan (#48052)
Update release pending status and pipeline URL in release plan
1 parent 46f441a commit 61a3a2e

3 files changed

Lines changed: 65 additions & 2 deletions

File tree

eng/common/pipelines/templates/stages/archetype-auto-release-prepare.yml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ stages:
5454
# the in-script azure-sdk-tools install resolves from an authenticated, reachable feed).
5555
- ${{ parameters.PreSteps }}
5656

57+
- template: /eng/common/pipelines/templates/steps/install-azsdk-cli.yml
58+
5759
- task: PowerShell@2
5860
name: resolve
5961
displayName: Determine releasable packages
@@ -68,3 +70,5 @@ stages:
6870
arguments: >
6971
-CommitSha "$(Build.SourceVersion)"
7072
-RepoId "$(Build.Repository.Name)"
73+
-PipelineUrl "$(System.CollectionUri)$(System.TeamProject)/_build/results?buildId=$(Build.BuildId)"
74+
-AzsdkExePath "$(AZSDK)"

eng/common/scripts/Mark-ReleasePlanCompletion.ps1

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,24 @@ function Process-Package([string]$packageInfoPath)
4949

5050
Write-Host "Marking release completion for package, name: $PackageName"
5151
$PackageVersion = $pkgInfo.Version
52-
$releaseArgs = @("release-plan", "update-release-status", "--package-name", $PackageName, "--language", $LanguageDisplayName, "--status", "Released")
52+
$version = [AzureEngSemanticVersion]::ParseVersionString($PackageVersion)
53+
if (!$version)
54+
{
55+
Write-Host "Failed to parse version string '$($PackageVersion)' for package '$PackageName'. Skipping the release plan status update."
56+
return
57+
}
58+
59+
$sdkReleaseType = ""
60+
if ($version.IsPrerelease)
61+
{
62+
$sdkReleaseType = "beta"
63+
}
64+
else
65+
{
66+
$sdkReleaseType = "stable"
67+
}
68+
69+
$releaseArgs = @("release-plan", "update-release-status", "--package-name", $PackageName, "--language", $LanguageDisplayName, "--status", "Released", "--sdk-release-type", $sdkReleaseType)
5370
if ($PackageVersion)
5471
{
5572
$releaseArgs += @("--package-version", $PackageVersion)

eng/common/scripts/Resolve-AutoReleasePackages.ps1

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,12 @@ The GitHub PR label that opts a merged PR into auto-release. Defaults to 'auto-r
4747
.PARAMETER BaseBranch
4848
The base branch a PR must have been merged into to qualify. Defaults to 'main'.
4949
50+
.PARAMETER PipelineUrl
51+
The URL of the pipeline run, used for logging or linking back to the pipeline. Defaults to empty.
52+
53+
.PARAMETER AzsdkExePath
54+
The path to the azsdk executable used for release operations. Defaults to the AZSDK environment variable.
55+
5056
.OUTPUTS
5157
Azure DevOps output variables (reference cross-stage via dependencies.<stage>.outputs['<job>.<step>.<name>']):
5258
- HasAutoReleaseArtifacts : 'true' if at least one declared package is releasable
@@ -63,7 +69,9 @@ param(
6369
[string] $Artifacts = $env:AUTORELEASE_ARTIFACTS,
6470
[string] $AuthToken = $env:GH_TOKEN,
6571
[string] $AutoReleaseLabel = 'auto-release',
66-
[string] $BaseBranch = 'main'
72+
[string] $BaseBranch = 'main',
73+
[string] $PipelineUrl = '',
74+
[string] $AzsdkExePath = $env:AZSDK
6775
)
6876

6977
$ErrorActionPreference = 'Stop'
@@ -186,6 +194,40 @@ function Invoke-AutoReleaseResolution {
186194
Write-Host " [$name] changed by PR $prLink -> releasable."
187195
Set-PipelineVariable -Name "ReleaseArtifact_$safeName" -Value 'true' -IsOutput
188196
$matchedArtifacts += $artifact
197+
198+
# Update release pending status and release pipeline URL in the release plan for this package.
199+
# release status is updated as "Released" when the package has been successfully released; here we are marking it as "Approval Pending" to indicate that the release is awaiting approval.
200+
try
201+
{
202+
if($AzsdkExePath)
203+
{
204+
$sdkPullRequestUrl = $pr.html_url
205+
$cliArgs = @("release-plan", "update-release-status", "--package-name", $name, "--language", $LanguageDisplayName, "--status", "Approval Pending", "--sdk-pull-request", $sdkPullRequestUrl)
206+
if ($PipelineUrl)
207+
{
208+
$cliArgs += @("--release-pipeline", $PipelineUrl)
209+
}
210+
else
211+
{
212+
LogWarning "Pipeline URL is not set; Not setting release pipeline link for package '$name' in release plan."
213+
}
214+
215+
& $AzsdkExePath @cliArgs
216+
if ($LASTEXITCODE -ne 0)
217+
{
218+
## Not all releases have a release plan. So we should not fail the script even if a release plan is missing.
219+
Write-Host "Failed to update release pending status for package '$name' using azsdk. Exit code: $LASTEXITCODE"
220+
}
221+
}
222+
else
223+
{
224+
Write-Host "AzsdkExePath is not set; skipping release plan update for package '$name'."
225+
}
226+
}
227+
catch
228+
{
229+
Write-Host "Failed to update release pending status in release plan for package '$name'. $($_.Exception.Message)"
230+
}
189231
}
190232
else {
191233
Write-Host " [$name] not changed by PR $prLink."

0 commit comments

Comments
 (0)