From 239deec4037b0d7dbc060a37e959119a831aaf4b Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Thu, 15 Oct 2026 15:38:45 -0700 Subject: [PATCH 01/48] Add support for releasing into Partner Feed vcpkg --- .../stages/archetype-cpp-release.yml | 66 +++++++++++++++++-- .../templates/steps/vcpkg-publish.yml | 5 ++ eng/scripts/Initialize-VcpkgRelease.ps1 | 18 ++++- eng/scripts/Test-ShouldReleaseToVcpkg.ps1 | 9 ++- eng/scripts/Update-VcpkgPort.ps1 | 10 ++- 5 files changed, 100 insertions(+), 8 deletions(-) diff --git a/eng/pipelines/templates/stages/archetype-cpp-release.yml b/eng/pipelines/templates/stages/archetype-cpp-release.yml index f17c610e28..3d09b11a8e 100644 --- a/eng/pipelines/templates/stages/archetype-cpp-release.yml +++ b/eng/pipelines/templates/stages/archetype-cpp-release.yml @@ -44,7 +44,7 @@ stages: - job: TagRepository displayName: "Create release tag" - condition: ne(variables['Skip.TagRepository'], 'true') + condition: and(ne(variables['Skip.TagRepository'], 'true'), ne(variables['PartnerFeed'], 'true')) dependsOn: - ReleaseGate @@ -94,7 +94,7 @@ stages: PackageName: ${{artifact.name}} SourceRootPath: $(Build.SourcesDirectory) - - ${{if ne(artifact.skipPublishDocGithubIo, 'true')}}: + - ${{if and(ne(artifact.skipPublishDocGithubIo, 'true'), ne(variables['PartnerFeed'], 'true'))}}: - job: PublishDocs displayName: Publish Docs to GitHub pages condition: and(succeeded(), ne(variables['Skip.PublishDocs'], 'true'), ne(variables['Build.Repository.Name'], 'Azure/azure-sdk-for-cpp-pr')) @@ -162,10 +162,10 @@ stages: - ci-configs/packages-latest.json - ci-configs/packages-preview.json - - ${{ if ne(artifact.skipPublishVcpkg, 'true') }}: + - ${{ if and(ne(artifact.skipPublishVcpkg, 'true'), ne(variables['PartnerFeed'], 'true')) }}: - job: PublishVcpkg displayName: Publish to vcpkg - condition: and(succeeded(), ne(variables['Skip.PublishVcpkg'], 'true')) + condition: and(succeeded(), ne(variables['Skip.PublishVcpkg'], 'true'), ne(variables['PartnerFeed'], 'true')) # This step requires the tag step dependsOn: - TagRepository @@ -312,6 +312,64 @@ stages: condition: and(succeeded(), eq(variables['PublishToVcpkg'], 'true')) displayName: Comment notification to PR + - ${{ if eq(variables['PartnerFeed'], 'true') }}: + - job: PublishVcpkg + displayName: Publish to vcpkg-partner-feed + condition: and(succeeded(), eq(variables['PartnerFeed'], 'true')) + dependsOn: + - ReleaseGate + pool: + name: $(WINDOWSPOOL) + image: $(WINDOWSVMIMAGE) + os: windows + + templateContext: + inputs: + - input: pipelineArtifact + artifactName: packages + targetPath: $(Pipeline.Workspace)/packages + + steps: + - checkout: self + + - pwsh: | + $packageSpec = Get-Content -Raw -Path "$(Pipeline.Workspace)/packages/${{artifact.Name}}/package-info.json" | ConvertFrom-Json + $version = $packageSpec.version + Write-Host "##vso[task.setvariable variable=PackageVersion]$version" + displayName: Set PackageVersion variable + + # There are potential race conditions if this script runs + # in parallel against the same branch name. Release only + # one package at a time. + + # Clone Vcpkg partner feed + - template: /eng/pipelines/templates/steps/vcpkg-clone.yml + parameters: + RepoOwner: Azure + RepoName: azure-sdk-vcpkg-partner-feed + SetVcpkgRoot: false + + - template: /eng/pipelines/templates/steps/vcpkg-publish.yml + parameters: + ArtifactName: ${{ artifact.Name }} + VcpkgPortName: ${{ artifact.VcpkgPortName }} + UpdateVcpkgBeta: false + PartnerRelease: true + PartnerReleaseRef: $(Build.SourceVersion) + + - template: /eng/common/pipelines/templates/steps/set-default-branch.yml + parameters: + WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-vcpkg-partner-feed + + # Push changes to vcpkg partner feed + - template: /eng/common/pipelines/templates/steps/git-push-changes.yml + parameters: + WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-vcpkg-partner-feed + TargetRepoName: azure-sdk-vcpkg-partner-feed + BaseRepoOwner: Azure + CommitMsg: Update vcpkg-configuration.json + BaseRepoBranch: $(DefaultBranch) + - ${{if ne(artifact.skipUpdatePackageVersion, 'true')}}: - job: UpdatePackageVersion displayName: "Update Package Version" diff --git a/eng/pipelines/templates/steps/vcpkg-publish.yml b/eng/pipelines/templates/steps/vcpkg-publish.yml index 4159a8637c..818df4bb69 100644 --- a/eng/pipelines/templates/steps/vcpkg-publish.yml +++ b/eng/pipelines/templates/steps/vcpkg-publish.yml @@ -5,8 +5,10 @@ parameters: VcpkgPortName: not-set DisplayNameExtension: DailyReleaseRef: + PartnerReleaseRef: DailyRelease: false UpdateVcpkgBeta: true + PartnerRelease: false steps: - task: Powershell@2 @@ -17,6 +19,7 @@ steps: -PackageSpecPath ${{ parameters.Workspace }}/packages/${{ parameters.ArtifactName }}/package-info.json -SourceDirectory ${{ parameters.Workspace }}/packages/${{ parameters.ArtifactName }}/vcpkg -DailyReleaseRef '${{ parameters.DailyReleaseRef }}' + -PartnerReleaseRef '${{ parameters.PartnerReleaseRef }}' -Verbose pwsh: true displayName: Initialize vcpkg release ${{ parameters.DisplayNameExtension }} @@ -33,6 +36,7 @@ steps: -VcpkgFolder ${{ parameters.Workspace }}/vcpkg -VcpkgPortName '${{ parameters.VcpkgPortName }}' -DailyRelease:$${{ parameters.DailyRelease }} + -PartnerRelease:$${{ parameters.PartnerRelease }} displayName: Check whether to release to vcpkg - task: Powershell@2 @@ -46,6 +50,7 @@ steps: -VcpkgPortName '${{ parameters.VcpkgPortName }}' -GitCommitParameters '-c user.name="azure-sdk" -c user.email="azuresdk@microsoft.com"' -DailyRelease:$${{ parameters.DailyRelease }} + -PartnerRelease:$${{ parameters.PartnerRelease }} workingDirectory: ${{ parameters.Workspace }}/vcpkg condition: and(succeeded(), eq(variables['PublishToVcpkg'], 'true')) displayName: Update vcpkg port ${{ parameters.DisplayNameExtension }} diff --git a/eng/scripts/Initialize-VcpkgRelease.ps1 b/eng/scripts/Initialize-VcpkgRelease.ps1 index eda05c796e..abd3698345 100644 --- a/eng/scripts/Initialize-VcpkgRelease.ps1 +++ b/eng/scripts/Initialize-VcpkgRelease.ps1 @@ -16,6 +16,10 @@ Name of the GitHub repo (of the form Azure/azure-sdk-for-cpp) If supplied update the portfile.cmake file's REF and SHA512 with values associated with the given ref. +.PARAMETER PartnerReleaseRef +If supplied update the portfile.cmake file's REF and SHA512 with values +associated with the given ref. + #> [CmdletBinding()] param ( @@ -31,7 +35,9 @@ param ( [ValidateNotNullOrEmpty()] [string] $GitHubRepo, - [string] $DailyReleaseRef + [string] $DailyReleaseRef, + + [string] $PartnerReleaseRef ) # If there's nothing in the "port" folder to upload set SkipVcpkgUpdate to true @@ -50,6 +56,11 @@ if ($DailyReleaseRef) { $tarGzUri = "https://github.com/$GitHubRepo/archive/$DailyReleaseRef.tar.gz" } +if ($PartnerReleaseRef) { + Write-Verbose "Initializing Partner Release" + $tarGzUri = "https://github.com/$GitHubRepo/archive/$PartnerReleaseRef.tar.gz" +} + Write-Host "Downloading tarball to compute hash from $tarGzUri" $localTarGzPath = New-TemporaryFile Invoke-WebRequest -Uri $tarGzUri -OutFile $localTarGzPath @@ -72,5 +83,10 @@ if ($DailyReleaseRef) { $newContent = $newContent -replace '(?m)^(\s+)REF .+$', "`${1}REF $DailyReleaseRef" } +if ($PartnerReleaseRef) { + Write-Verbose "Overriding REF with partner release ref: $PartnerReleaseRef" + $newContent = $newContent -replace '(?m)^(\s+)REF .+$', "`${1}REF $PartnerReleaseRef" +} + $newContent = $newContent.Replace("`r`n", "`n") $newContent | Set-Content $portfileLocation -NoNewLine diff --git a/eng/scripts/Test-ShouldReleaseToVcpkg.ps1 b/eng/scripts/Test-ShouldReleaseToVcpkg.ps1 index a1831e5890..c22e384c6c 100644 --- a/eng/scripts/Test-ShouldReleaseToVcpkg.ps1 +++ b/eng/scripts/Test-ShouldReleaseToVcpkg.ps1 @@ -2,7 +2,8 @@ param( [string] $ReleaseArtifactSourceDirectory, [string] $VcpkgFolder, [string] $VcpkgPortName, - [switch] $DailyRelease + [switch] $DailyRelease, + [switch] $PartnerRelease ) ."$PSScriptRoot/../common/scripts/common.ps1" @@ -15,6 +16,12 @@ if ($DailyRelease) { exit 0 } +if ($PartnerRelease) { + Write-Host "Partner release, publish to vcpkg" + Write-Host "##vso[task.setvariable variable=PublishToVcpkg]true" + exit 0 +} + $packageJsonContents = Get-Content ` -Path "$ReleaseArtifactSourceDirectory/package-info.json" ` -Raw diff --git a/eng/scripts/Update-VcpkgPort.ps1 b/eng/scripts/Update-VcpkgPort.ps1 index 453a97fa4c..4c2c288bfc 100644 --- a/eng/scripts/Update-VcpkgPort.ps1 +++ b/eng/scripts/Update-VcpkgPort.ps1 @@ -13,7 +13,9 @@ param ( [string] $GitCommitParameters, - [switch] $DailyRelease + [switch] $DailyRelease, + + [switch] $PartnerRelease ) ."$PSScriptRoot/../common/scripts/common.ps1" @@ -105,7 +107,7 @@ Write-Host "git reset HEAD^" git reset HEAD^ # Only perform the final commit if this is not a test release -if (!$DailyRelease) { +if (!$DailyRelease -and !$PartnerRelease) { # Grab content needed for commit message and place in a temporary file $packageVersion = (Get-Content $ReleaseArtifactSourceDirectory/package-info.json -Raw | ConvertFrom-Json).version $commitMessageFile = New-TemporaryFile @@ -174,4 +176,8 @@ In the case of a test release set this to ensure that the x-add-version step includes `--overwrite-version` to ensure daily packages are properly updated in the vcpkg repo. +.PARAMETER PartnerRelease +In the case of a partner release set this so that the release gets created +according to the partner release process. + #> From 894038ae5d4aaf44a3b8b0152af86faabf2ede31 Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Thu, 15 Oct 2026 22:15:23 -0700 Subject: [PATCH 02/48] Rename job --- eng/pipelines/templates/stages/archetype-cpp-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/pipelines/templates/stages/archetype-cpp-release.yml b/eng/pipelines/templates/stages/archetype-cpp-release.yml index 3d09b11a8e..961f9fab1c 100644 --- a/eng/pipelines/templates/stages/archetype-cpp-release.yml +++ b/eng/pipelines/templates/stages/archetype-cpp-release.yml @@ -313,7 +313,7 @@ stages: displayName: Comment notification to PR - ${{ if eq(variables['PartnerFeed'], 'true') }}: - - job: PublishVcpkg + - job: PublishVcpkgPartnerFeed displayName: Publish to vcpkg-partner-feed condition: and(succeeded(), eq(variables['PartnerFeed'], 'true')) dependsOn: From 56b19b29e3805f24902519d2bb7d98fced07aac4 Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Fri, 16 Oct 2026 00:27:46 -0700 Subject: [PATCH 03/48] Drop succeeded() --- eng/pipelines/templates/stages/archetype-cpp-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/pipelines/templates/stages/archetype-cpp-release.yml b/eng/pipelines/templates/stages/archetype-cpp-release.yml index 961f9fab1c..555aeffb14 100644 --- a/eng/pipelines/templates/stages/archetype-cpp-release.yml +++ b/eng/pipelines/templates/stages/archetype-cpp-release.yml @@ -315,7 +315,7 @@ stages: - ${{ if eq(variables['PartnerFeed'], 'true') }}: - job: PublishVcpkgPartnerFeed displayName: Publish to vcpkg-partner-feed - condition: and(succeeded(), eq(variables['PartnerFeed'], 'true')) + condition: eq(variables['PartnerFeed'], 'true') dependsOn: - ReleaseGate pool: From 1a7a8a30ebab849b6e039e1ba1db617d65b7ac00 Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Fri, 16 Oct 2026 00:28:36 -0700 Subject: [PATCH 04/48] succeededOrFailed() --- eng/pipelines/templates/stages/archetype-cpp-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/pipelines/templates/stages/archetype-cpp-release.yml b/eng/pipelines/templates/stages/archetype-cpp-release.yml index 555aeffb14..d29dacf0cc 100644 --- a/eng/pipelines/templates/stages/archetype-cpp-release.yml +++ b/eng/pipelines/templates/stages/archetype-cpp-release.yml @@ -315,7 +315,7 @@ stages: - ${{ if eq(variables['PartnerFeed'], 'true') }}: - job: PublishVcpkgPartnerFeed displayName: Publish to vcpkg-partner-feed - condition: eq(variables['PartnerFeed'], 'true') + condition: and(succeededOrFailed(), eq(variables['PartnerFeed'], 'true')) dependsOn: - ReleaseGate pool: From aa9af642a96491e5560fa864e4c41da581329447 Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Fri, 16 Oct 2026 02:35:47 -0700 Subject: [PATCH 05/48] use artifact. --- .../templates/stages/archetype-cpp-release.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/eng/pipelines/templates/stages/archetype-cpp-release.yml b/eng/pipelines/templates/stages/archetype-cpp-release.yml index d29dacf0cc..166656422f 100644 --- a/eng/pipelines/templates/stages/archetype-cpp-release.yml +++ b/eng/pipelines/templates/stages/archetype-cpp-release.yml @@ -44,7 +44,7 @@ stages: - job: TagRepository displayName: "Create release tag" - condition: and(ne(variables['Skip.TagRepository'], 'true'), ne(variables['PartnerFeed'], 'true')) + condition: and(ne(variables['Skip.TagRepository'], 'true'), ne(variables['PublishToVcpkgPartnerFeed'], 'true')) dependsOn: - ReleaseGate @@ -94,7 +94,7 @@ stages: PackageName: ${{artifact.name}} SourceRootPath: $(Build.SourcesDirectory) - - ${{if and(ne(artifact.skipPublishDocGithubIo, 'true'), ne(variables['PartnerFeed'], 'true'))}}: + - ${{if and(ne(artifact.skipPublishDocGithubIo, 'true'), ne(artifact.publishToVcpkgPartnerFeed, 'true'))}}: - job: PublishDocs displayName: Publish Docs to GitHub pages condition: and(succeeded(), ne(variables['Skip.PublishDocs'], 'true'), ne(variables['Build.Repository.Name'], 'Azure/azure-sdk-for-cpp-pr')) @@ -162,10 +162,10 @@ stages: - ci-configs/packages-latest.json - ci-configs/packages-preview.json - - ${{ if and(ne(artifact.skipPublishVcpkg, 'true'), ne(variables['PartnerFeed'], 'true')) }}: + - ${{ if and(ne(artifact.skipPublishVcpkg, 'true'), ne(artifact.publishToVcpkgPartnerFeed, 'true')) }}: - job: PublishVcpkg displayName: Publish to vcpkg - condition: and(succeeded(), ne(variables['Skip.PublishVcpkg'], 'true'), ne(variables['PartnerFeed'], 'true')) + condition: and(succeeded(), ne(variables['Skip.PublishVcpkg'], 'true'), ne(variables['PublishToVcpkgPartnerFeed'], 'true')) # This step requires the tag step dependsOn: - TagRepository @@ -312,10 +312,10 @@ stages: condition: and(succeeded(), eq(variables['PublishToVcpkg'], 'true')) displayName: Comment notification to PR - - ${{ if eq(variables['PartnerFeed'], 'true') }}: + - ${{ if eq(artifact.publishToVcpkgPartnerFeed, 'true') }}: - job: PublishVcpkgPartnerFeed displayName: Publish to vcpkg-partner-feed - condition: and(succeededOrFailed(), eq(variables['PartnerFeed'], 'true')) + condition: and(succeeded(), eq(variables['PublishToVcpkgPartnerFeed'], 'true')) dependsOn: - ReleaseGate pool: From 993350f784d08c125e34199aa4ff2b2cc4fd17c4 Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Fri, 16 Oct 2026 02:41:51 -0700 Subject: [PATCH 06/48] Tempoprarily remove real release steps --- .../stages/archetype-cpp-release.yml | 151 ------------------ 1 file changed, 151 deletions(-) diff --git a/eng/pipelines/templates/stages/archetype-cpp-release.yml b/eng/pipelines/templates/stages/archetype-cpp-release.yml index 166656422f..c39ee5e258 100644 --- a/eng/pipelines/templates/stages/archetype-cpp-release.yml +++ b/eng/pipelines/templates/stages/archetype-cpp-release.yml @@ -161,157 +161,6 @@ stages: - metadata/ - ci-configs/packages-latest.json - ci-configs/packages-preview.json - - - ${{ if and(ne(artifact.skipPublishVcpkg, 'true'), ne(artifact.publishToVcpkgPartnerFeed, 'true')) }}: - - job: PublishVcpkg - displayName: Publish to vcpkg - condition: and(succeeded(), ne(variables['Skip.PublishVcpkg'], 'true'), ne(variables['PublishToVcpkgPartnerFeed'], 'true')) - # This step requires the tag step - dependsOn: - - TagRepository - - ReleaseGate - pool: - name: $(WINDOWSPOOL) - image: $(WINDOWSVMIMAGE) - os: windows - - variables: - VcpkgPrRepoOwner: Microsoft - VcpkgPrRepoName: vcpkg - - templateContext: - inputs: - - input: pipelineArtifact - artifactName: packages - targetPath: $(Pipeline.Workspace)/packages - - steps: - - checkout: self - - pwsh: | - $branchName = "azure-sdk-for-cpp-${{ artifact.Name }}-$(Build.BuildId)" - if ('$(VcpkgForkBranchName)') { - Write-Host "Using queue time branch name" - $branchName = '$(VcpkgForkBranchName)' - } - Write-Host "##vso[task.setvariable variable=PrBranchName]$branchName" - displayName: Set fork branch name - - - pwsh: | - $packageSpec = Get-Content -Raw -Path "$(Pipeline.Workspace)/packages/${{artifact.Name}}/package-info.json" | ConvertFrom-Json - $version = $packageSpec.version - Write-Host "##vso[task.setvariable variable=PackageVersion]$version" - displayName: Set PackageVersion variable - - - pwsh: | - $title = "[${{ artifact.VcpkgPortName }}] publish version $(PackageVersion)" - - if ('$(VcpkgPRTitle)') { - Write-Host "Using queue time PR title" - $title = '$(VcpkgPRTitle)' - } - Write-Host "##vso[task.setvariable variable=PrTitle]$title" - displayName: Set PR title - - # There are potential race conditions if this script runs - # in parallel against the same branch name. Release only - # one package at a time. - # Clone main vcpkg repo - - template: /eng/pipelines/templates/steps/vcpkg-clone.yml - parameters: - RepoOwner: azure-sdk - PRBranchName: $(PrBranchName) - - # Clone Vcpkg Betas - - template: /eng/pipelines/templates/steps/vcpkg-clone.yml - parameters: - RepoOwner: Azure - RepoName: azure-sdk-vcpkg-betas - SetVcpkgRoot: false - - - template: /eng/pipelines/templates/steps/vcpkg-publish.yml - parameters: - ArtifactName: ${{ artifact.Name }} - VcpkgPortName: ${{ artifact.VcpkgPortName }} - - - - template: /eng/common/pipelines/templates/steps/set-default-branch.yml - parameters: - WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-vcpkg-betas - - # Push changes to vcpkg betas - - template: /eng/common/pipelines/templates/steps/git-push-changes.yml - parameters: - WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-vcpkg-betas - TargetRepoName: azure-sdk-vcpkg-betas - BaseRepoOwner: Azure - CommitMsg: Update vcpkg-configuration.json - BaseRepoBranch: $(DefaultBranch) - - # Set $(HasChanges) to $(PublishToVcpkg) so that - # create-pull-request.yml creates or does not create a PR - # based on the deicision of the step that determines - # whether to publish to vcpkg. - - pwsh: Write-Host "##vso[task.setvariable variable=HasChanges]$(PublishToVcpkg)" - displayName: Set $(HasChanges) to $(PublishToVcpkg) for create-pull-request.yml - - - template: /eng/common/pipelines/templates/steps/set-default-branch.yml - parameters: - WorkingDirectory: $(Pipeline.Workspace)/vcpkg - - # SkipCheckingForChanges is true to skip the commit step - # (which is already done by Update-VcpkgPort.ps1) - - template: /eng/common/pipelines/templates/steps/create-pull-request.yml - parameters: - RepoOwner: ${{ variables.VcpkgPrRepoOwner }} - RepoName: ${{ variables.VcpkgPrRepoName }} - WorkingDirectory: $(Pipeline.Workspace)/vcpkg - PrBranchName: $(PrBranchName) - PRTitle: $(PrTitle) - PRBody: Update vcpkg ports for Azure SDK release. This release may contain multiple ports. - SkipCheckingForChanges: true - BaseBranchName: $(DefaultBranch) - OpenAsDraft: ${{ parameters.TestPipeline }} - CloseAfterOpenForTesting: '${{ parameters.TestPipeline }}' - - - task: AzureCLI@2 - displayName: Authenticate to OpenSource API - condition: and(succeeded(), eq(variables['PublishToVcpkg'], 'true')) - inputs: - azureSubscription: opensource-api-connection - scriptType: pscore - scriptLocation: inlineScript - inlineScript: | - $jwt_accessToken = az account get-access-token --resource "api://2789159d-8d8b-4d13-b90b-ca29c1707afd" --query "accessToken" --output tsv - Write-Host "##vso[task.setvariable variable=opensource-api-token;isSecret=true]$jwt_accessToken" - - - template: /eng/common/pipelines/templates/steps/login-to-github.yml - parameters: - TokenOwners: - - $(VcpkgPrRepoOwner) - - # Workaround: -Fallback uses names from CODEOWNERS who - # should be notified about the release in the event of a - # failure to resolve the appropriate aliases. - - pwsh: | - $notifyUsers = ./eng/scripts/Get-TriggeringUserGitHubAlias.ps1 ` - -EmailAddress "$($env:BUILD_REQUESTEDFOREMAIL)" ` - -OpenApiToken "$(opensource-api-token)" ` - -Fallback '@rickwinter @antkmsft @LarryOsterman' - - $prComment = "Adding ${{ artifact.Name }} to release" - if ($notifyUsers) { - $prComment += "`n`ncc: $notifyUsers" - } - - ./eng/common/scripts/Add-IssueComment.ps1 ` - -AuthToken "$(GH_TOKEN)" ` - -RepoOwner $(VcpkgPrRepoOwner) ` - -RepoName $(VcpkgPrRepoName) ` - -IssueNumber "$(Submitted.PullRequest.Number)" ` - -Comment $prComment - condition: and(succeeded(), eq(variables['PublishToVcpkg'], 'true')) - displayName: Comment notification to PR - - ${{ if eq(artifact.publishToVcpkgPartnerFeed, 'true') }}: - job: PublishVcpkgPartnerFeed displayName: Publish to vcpkg-partner-feed From 13fd63065a8fd21d6414795b9a5a0476915690d3 Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Fri, 16 Oct 2026 02:58:29 -0700 Subject: [PATCH 07/48] Combine everything under one roof --- .../stages/archetype-cpp-release.yml | 192 +++++++++++++++--- 1 file changed, 160 insertions(+), 32 deletions(-) diff --git a/eng/pipelines/templates/stages/archetype-cpp-release.yml b/eng/pipelines/templates/stages/archetype-cpp-release.yml index c39ee5e258..354796f9f8 100644 --- a/eng/pipelines/templates/stages/archetype-cpp-release.yml +++ b/eng/pipelines/templates/stages/archetype-cpp-release.yml @@ -161,17 +161,26 @@ stages: - metadata/ - ci-configs/packages-latest.json - ci-configs/packages-preview.json - - ${{ if eq(artifact.publishToVcpkgPartnerFeed, 'true') }}: - - job: PublishVcpkgPartnerFeed - displayName: Publish to vcpkg-partner-feed - condition: and(succeeded(), eq(variables['PublishToVcpkgPartnerFeed'], 'true')) + + - ${{ if ne(artifact.skipPublishVcpkg, 'true') }}: + - job: PublishVcpkg + displayName: Publish to vcpkg + condition: and(succeeded(), ne(variables['Skip.PublishVcpkg'], 'true')) + # This step requires the tag step dependsOn: + - ${{ if ne(variables['PublishToVcpkgPartnerFeed'], 'true') }}: + - TagRepository - ReleaseGate pool: name: $(WINDOWSPOOL) image: $(WINDOWSVMIMAGE) os: windows + - ${{ if ne(variables['PublishToVcpkgPartnerFeed'], 'true') }}: + - variables: + VcpkgPrRepoOwner: Microsoft + VcpkgPrRepoName: vcpkg + templateContext: inputs: - input: pipelineArtifact @@ -181,43 +190,162 @@ stages: steps: - checkout: self + - ${{ if ne(variables['PublishToVcpkgPartnerFeed'], 'true') }}: + - pwsh: | + $branchName = "azure-sdk-for-cpp-${{ artifact.Name }}-$(Build.BuildId)" + if ('$(VcpkgForkBranchName)') { + Write-Host "Using queue time branch name" + $branchName = '$(VcpkgForkBranchName)' + } + Write-Host "##vso[task.setvariable variable=PrBranchName]$branchName" + displayName: Set fork branch name + - pwsh: | $packageSpec = Get-Content -Raw -Path "$(Pipeline.Workspace)/packages/${{artifact.Name}}/package-info.json" | ConvertFrom-Json $version = $packageSpec.version Write-Host "##vso[task.setvariable variable=PackageVersion]$version" displayName: Set PackageVersion variable + - ${{ if ne(variables['PublishToVcpkgPartnerFeed'], 'true') }}: + - pwsh: | + $title = "[${{ artifact.VcpkgPortName }}] publish version $(PackageVersion)" + + if ('$(VcpkgPRTitle)') { + Write-Host "Using queue time PR title" + $title = '$(VcpkgPRTitle)' + } + Write-Host "##vso[task.setvariable variable=PrTitle]$title" + displayName: Set PR title + # There are potential race conditions if this script runs # in parallel against the same branch name. Release only # one package at a time. - - # Clone Vcpkg partner feed - - template: /eng/pipelines/templates/steps/vcpkg-clone.yml - parameters: - RepoOwner: Azure - RepoName: azure-sdk-vcpkg-partner-feed - SetVcpkgRoot: false - - - template: /eng/pipelines/templates/steps/vcpkg-publish.yml - parameters: - ArtifactName: ${{ artifact.Name }} - VcpkgPortName: ${{ artifact.VcpkgPortName }} - UpdateVcpkgBeta: false - PartnerRelease: true - PartnerReleaseRef: $(Build.SourceVersion) - - - template: /eng/common/pipelines/templates/steps/set-default-branch.yml - parameters: - WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-vcpkg-partner-feed - - # Push changes to vcpkg partner feed - - template: /eng/common/pipelines/templates/steps/git-push-changes.yml - parameters: - WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-vcpkg-partner-feed - TargetRepoName: azure-sdk-vcpkg-partner-feed - BaseRepoOwner: Azure - CommitMsg: Update vcpkg-configuration.json - BaseRepoBranch: $(DefaultBranch) + # Clone main vcpkg repo + - ${{ if ne(variables['PublishToVcpkgPartnerFeed'], 'true') }}: + - template: /eng/pipelines/templates/steps/vcpkg-clone.yml + parameters: + RepoOwner: azure-sdk + PRBranchName: $(PrBranchName) + + # Clone Vcpkg Betas + - template: /eng/pipelines/templates/steps/vcpkg-clone.yml + parameters: + RepoOwner: Azure + RepoName: azure-sdk-vcpkg-betas + SetVcpkgRoot: false + + - template: /eng/pipelines/templates/steps/vcpkg-publish.yml + parameters: + ArtifactName: ${{ artifact.Name }} + VcpkgPortName: ${{ artifact.VcpkgPortName }} + + + - template: /eng/common/pipelines/templates/steps/set-default-branch.yml + parameters: + WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-vcpkg-betas + + # Push changes to vcpkg betas + - template: /eng/common/pipelines/templates/steps/git-push-changes.yml + parameters: + WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-vcpkg-betas + TargetRepoName: azure-sdk-vcpkg-betas + BaseRepoOwner: Azure + CommitMsg: Update vcpkg-configuration.json + BaseRepoBranch: $(DefaultBranch) + + # Set $(HasChanges) to $(PublishToVcpkg) so that + # create-pull-request.yml creates or does not create a PR + # based on the deicision of the step that determines + # whether to publish to vcpkg. + - pwsh: Write-Host "##vso[task.setvariable variable=HasChanges]$(PublishToVcpkg)" + displayName: Set $(HasChanges) to $(PublishToVcpkg) for create-pull-request.yml + + - template: /eng/common/pipelines/templates/steps/set-default-branch.yml + parameters: + WorkingDirectory: $(Pipeline.Workspace)/vcpkg + + # SkipCheckingForChanges is true to skip the commit step + # (which is already done by Update-VcpkgPort.ps1) + - template: /eng/common/pipelines/templates/steps/create-pull-request.yml + parameters: + RepoOwner: ${{ variables.VcpkgPrRepoOwner }} + RepoName: ${{ variables.VcpkgPrRepoName }} + WorkingDirectory: $(Pipeline.Workspace)/vcpkg + PrBranchName: $(PrBranchName) + PRTitle: $(PrTitle) + PRBody: Update vcpkg ports for Azure SDK release. This release may contain multiple ports. + SkipCheckingForChanges: true + BaseBranchName: $(DefaultBranch) + OpenAsDraft: ${{ parameters.TestPipeline }} + CloseAfterOpenForTesting: '${{ parameters.TestPipeline }}' + + - task: AzureCLI@2 + displayName: Authenticate to OpenSource API + condition: and(succeeded(), eq(variables['PublishToVcpkg'], 'true')) + inputs: + azureSubscription: opensource-api-connection + scriptType: pscore + scriptLocation: inlineScript + inlineScript: | + $jwt_accessToken = az account get-access-token --resource "api://2789159d-8d8b-4d13-b90b-ca29c1707afd" --query "accessToken" --output tsv + Write-Host "##vso[task.setvariable variable=opensource-api-token;isSecret=true]$jwt_accessToken" + + - template: /eng/common/pipelines/templates/steps/login-to-github.yml + parameters: + TokenOwners: + - $(VcpkgPrRepoOwner) + + # Workaround: -Fallback uses names from CODEOWNERS who + # should be notified about the release in the event of a + # failure to resolve the appropriate aliases. + - pwsh: | + $notifyUsers = ./eng/scripts/Get-TriggeringUserGitHubAlias.ps1 ` + -EmailAddress "$($env:BUILD_REQUESTEDFOREMAIL)" ` + -OpenApiToken "$(opensource-api-token)" ` + -Fallback '@rickwinter @antkmsft @LarryOsterman' + + $prComment = "Adding ${{ artifact.Name }} to release" + if ($notifyUsers) { + $prComment += "`n`ncc: $notifyUsers" + } + + ./eng/common/scripts/Add-IssueComment.ps1 ` + -AuthToken "$(GH_TOKEN)" ` + -RepoOwner $(VcpkgPrRepoOwner) ` + -RepoName $(VcpkgPrRepoName) ` + -IssueNumber "$(Submitted.PullRequest.Number)" ` + -Comment $prComment + condition: and(succeeded(), eq(variables['PublishToVcpkg'], 'true')) + displayName: Comment notification to PR + + - ${{ if eq(variables['PublishToVcpkgPartnerFeed'], 'true') }}: + # Clone Vcpkg partner feed + - template: /eng/pipelines/templates/steps/vcpkg-clone.yml + parameters: + RepoOwner: Azure + RepoName: azure-sdk-vcpkg-partner-feed + SetVcpkgRoot: false + + - template: /eng/pipelines/templates/steps/vcpkg-publish.yml + parameters: + ArtifactName: ${{ artifact.Name }} + VcpkgPortName: ${{ artifact.VcpkgPortName }} + UpdateVcpkgBeta: false + PartnerRelease: true + PartnerReleaseRef: $(Build.SourceVersion) + + - template: /eng/common/pipelines/templates/steps/set-default-branch.yml + parameters: + WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-vcpkg-partner-feed + + # Push changes to vcpkg partner feed + - template: /eng/common/pipelines/templates/steps/git-push-changes.yml + parameters: + WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-vcpkg-partner-feed + TargetRepoName: azure-sdk-vcpkg-partner-feed + BaseRepoOwner: Azure + CommitMsg: Update vcpkg-configuration.json + BaseRepoBranch: $(DefaultBranch) - ${{if ne(artifact.skipUpdatePackageVersion, 'true')}}: - job: UpdatePackageVersion From ccd088f7f87dbde0cefc007f96f0ccbf3b252b36 Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Fri, 16 Oct 2026 03:04:14 -0700 Subject: [PATCH 08/48] Always set variables --- eng/pipelines/templates/stages/archetype-cpp-release.yml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/eng/pipelines/templates/stages/archetype-cpp-release.yml b/eng/pipelines/templates/stages/archetype-cpp-release.yml index 354796f9f8..2299775be1 100644 --- a/eng/pipelines/templates/stages/archetype-cpp-release.yml +++ b/eng/pipelines/templates/stages/archetype-cpp-release.yml @@ -176,10 +176,9 @@ stages: image: $(WINDOWSVMIMAGE) os: windows - - ${{ if ne(variables['PublishToVcpkgPartnerFeed'], 'true') }}: - - variables: - VcpkgPrRepoOwner: Microsoft - VcpkgPrRepoName: vcpkg + variables: + VcpkgPrRepoOwner: Microsoft + VcpkgPrRepoName: vcpkg templateContext: inputs: From 94ab2db88b863b2a9da292b71d5d19b4b9667535 Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Fri, 16 Oct 2026 03:13:17 -0700 Subject: [PATCH 09/48] Add variable --- eng/pipelines/templates/stages/archetype-cpp-release.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/eng/pipelines/templates/stages/archetype-cpp-release.yml b/eng/pipelines/templates/stages/archetype-cpp-release.yml index 2299775be1..1e045f4708 100644 --- a/eng/pipelines/templates/stages/archetype-cpp-release.yml +++ b/eng/pipelines/templates/stages/archetype-cpp-release.yml @@ -11,6 +11,8 @@ parameters: TargetDocRepoOwner: MicrosoftDocs TargetDocRepoName: azure-docs-sdk-cpp + PublishToVcpkgPartnerFeed: false + stages: - ${{if and(eq(variables['Build.Reason'], 'Manual'), eq(variables['System.TeamProject'], 'internal'))}}: - ${{ each artifact in parameters.Artifacts }}: From 2dce134862a457386eee98b5b7fbdcb359025b1b Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Fri, 16 Oct 2026 03:21:13 -0700 Subject: [PATCH 10/48] Rewrite as before --- .../stages/archetype-cpp-release.yml | 320 ++++++++++-------- 1 file changed, 172 insertions(+), 148 deletions(-) diff --git a/eng/pipelines/templates/stages/archetype-cpp-release.yml b/eng/pipelines/templates/stages/archetype-cpp-release.yml index 1e045f4708..a8bd796a6f 100644 --- a/eng/pipelines/templates/stages/archetype-cpp-release.yml +++ b/eng/pipelines/templates/stages/archetype-cpp-release.yml @@ -164,14 +164,13 @@ stages: - ci-configs/packages-latest.json - ci-configs/packages-preview.json - - ${{ if ne(artifact.skipPublishVcpkg, 'true') }}: + - ${{ if and(ne(artifact.skipPublishVcpkg, 'true'), ne(variables['PartnerFeed'], 'true')) }}: - job: PublishVcpkg displayName: Publish to vcpkg - condition: and(succeeded(), ne(variables['Skip.PublishVcpkg'], 'true')) + condition: and(succeeded(), ne(variables['Skip.PublishVcpkg'], 'true'), ne(variables['PartnerFeed'], 'true')) # This step requires the tag step dependsOn: - - ${{ if ne(variables['PublishToVcpkgPartnerFeed'], 'true') }}: - - TagRepository + - TagRepository - ReleaseGate pool: name: $(WINDOWSPOOL) @@ -190,16 +189,14 @@ stages: steps: - checkout: self - - - ${{ if ne(variables['PublishToVcpkgPartnerFeed'], 'true') }}: - - pwsh: | - $branchName = "azure-sdk-for-cpp-${{ artifact.Name }}-$(Build.BuildId)" - if ('$(VcpkgForkBranchName)') { - Write-Host "Using queue time branch name" - $branchName = '$(VcpkgForkBranchName)' - } - Write-Host "##vso[task.setvariable variable=PrBranchName]$branchName" - displayName: Set fork branch name + - pwsh: | + $branchName = "azure-sdk-for-cpp-${{ artifact.Name }}-$(Build.BuildId)" + if ('$(VcpkgForkBranchName)') { + Write-Host "Using queue time branch name" + $branchName = '$(VcpkgForkBranchName)' + } + Write-Host "##vso[task.setvariable variable=PrBranchName]$branchName" + displayName: Set fork branch name - pwsh: | $packageSpec = Get-Content -Raw -Path "$(Pipeline.Workspace)/packages/${{artifact.Name}}/package-info.json" | ConvertFrom-Json @@ -207,146 +204,173 @@ stages: Write-Host "##vso[task.setvariable variable=PackageVersion]$version" displayName: Set PackageVersion variable - - ${{ if ne(variables['PublishToVcpkgPartnerFeed'], 'true') }}: - - pwsh: | - $title = "[${{ artifact.VcpkgPortName }}] publish version $(PackageVersion)" + - pwsh: | + $title = "[${{ artifact.VcpkgPortName }}] publish version $(PackageVersion)" - if ('$(VcpkgPRTitle)') { - Write-Host "Using queue time PR title" - $title = '$(VcpkgPRTitle)' - } - Write-Host "##vso[task.setvariable variable=PrTitle]$title" - displayName: Set PR title + if ('$(VcpkgPRTitle)') { + Write-Host "Using queue time PR title" + $title = '$(VcpkgPRTitle)' + } + Write-Host "##vso[task.setvariable variable=PrTitle]$title" + displayName: Set PR title # There are potential race conditions if this script runs # in parallel against the same branch name. Release only # one package at a time. # Clone main vcpkg repo - - ${{ if ne(variables['PublishToVcpkgPartnerFeed'], 'true') }}: - - template: /eng/pipelines/templates/steps/vcpkg-clone.yml - parameters: - RepoOwner: azure-sdk - PRBranchName: $(PrBranchName) - - # Clone Vcpkg Betas - - template: /eng/pipelines/templates/steps/vcpkg-clone.yml - parameters: - RepoOwner: Azure - RepoName: azure-sdk-vcpkg-betas - SetVcpkgRoot: false - - - template: /eng/pipelines/templates/steps/vcpkg-publish.yml - parameters: - ArtifactName: ${{ artifact.Name }} - VcpkgPortName: ${{ artifact.VcpkgPortName }} - - - - template: /eng/common/pipelines/templates/steps/set-default-branch.yml - parameters: - WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-vcpkg-betas - - # Push changes to vcpkg betas - - template: /eng/common/pipelines/templates/steps/git-push-changes.yml - parameters: - WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-vcpkg-betas - TargetRepoName: azure-sdk-vcpkg-betas - BaseRepoOwner: Azure - CommitMsg: Update vcpkg-configuration.json - BaseRepoBranch: $(DefaultBranch) - - # Set $(HasChanges) to $(PublishToVcpkg) so that - # create-pull-request.yml creates or does not create a PR - # based on the deicision of the step that determines - # whether to publish to vcpkg. - - pwsh: Write-Host "##vso[task.setvariable variable=HasChanges]$(PublishToVcpkg)" - displayName: Set $(HasChanges) to $(PublishToVcpkg) for create-pull-request.yml - - - template: /eng/common/pipelines/templates/steps/set-default-branch.yml - parameters: - WorkingDirectory: $(Pipeline.Workspace)/vcpkg - - # SkipCheckingForChanges is true to skip the commit step - # (which is already done by Update-VcpkgPort.ps1) - - template: /eng/common/pipelines/templates/steps/create-pull-request.yml - parameters: - RepoOwner: ${{ variables.VcpkgPrRepoOwner }} - RepoName: ${{ variables.VcpkgPrRepoName }} - WorkingDirectory: $(Pipeline.Workspace)/vcpkg - PrBranchName: $(PrBranchName) - PRTitle: $(PrTitle) - PRBody: Update vcpkg ports for Azure SDK release. This release may contain multiple ports. - SkipCheckingForChanges: true - BaseBranchName: $(DefaultBranch) - OpenAsDraft: ${{ parameters.TestPipeline }} - CloseAfterOpenForTesting: '${{ parameters.TestPipeline }}' - - - task: AzureCLI@2 - displayName: Authenticate to OpenSource API - condition: and(succeeded(), eq(variables['PublishToVcpkg'], 'true')) - inputs: - azureSubscription: opensource-api-connection - scriptType: pscore - scriptLocation: inlineScript - inlineScript: | - $jwt_accessToken = az account get-access-token --resource "api://2789159d-8d8b-4d13-b90b-ca29c1707afd" --query "accessToken" --output tsv - Write-Host "##vso[task.setvariable variable=opensource-api-token;isSecret=true]$jwt_accessToken" - - - template: /eng/common/pipelines/templates/steps/login-to-github.yml - parameters: - TokenOwners: - - $(VcpkgPrRepoOwner) - - # Workaround: -Fallback uses names from CODEOWNERS who - # should be notified about the release in the event of a - # failure to resolve the appropriate aliases. - - pwsh: | - $notifyUsers = ./eng/scripts/Get-TriggeringUserGitHubAlias.ps1 ` - -EmailAddress "$($env:BUILD_REQUESTEDFOREMAIL)" ` - -OpenApiToken "$(opensource-api-token)" ` - -Fallback '@rickwinter @antkmsft @LarryOsterman' - - $prComment = "Adding ${{ artifact.Name }} to release" - if ($notifyUsers) { - $prComment += "`n`ncc: $notifyUsers" - } - - ./eng/common/scripts/Add-IssueComment.ps1 ` - -AuthToken "$(GH_TOKEN)" ` - -RepoOwner $(VcpkgPrRepoOwner) ` - -RepoName $(VcpkgPrRepoName) ` - -IssueNumber "$(Submitted.PullRequest.Number)" ` - -Comment $prComment - condition: and(succeeded(), eq(variables['PublishToVcpkg'], 'true')) - displayName: Comment notification to PR - - - ${{ if eq(variables['PublishToVcpkgPartnerFeed'], 'true') }}: - # Clone Vcpkg partner feed - - template: /eng/pipelines/templates/steps/vcpkg-clone.yml - parameters: - RepoOwner: Azure - RepoName: azure-sdk-vcpkg-partner-feed - SetVcpkgRoot: false - - - template: /eng/pipelines/templates/steps/vcpkg-publish.yml - parameters: - ArtifactName: ${{ artifact.Name }} - VcpkgPortName: ${{ artifact.VcpkgPortName }} - UpdateVcpkgBeta: false - PartnerRelease: true - PartnerReleaseRef: $(Build.SourceVersion) - - - template: /eng/common/pipelines/templates/steps/set-default-branch.yml - parameters: - WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-vcpkg-partner-feed - - # Push changes to vcpkg partner feed - - template: /eng/common/pipelines/templates/steps/git-push-changes.yml - parameters: - WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-vcpkg-partner-feed - TargetRepoName: azure-sdk-vcpkg-partner-feed - BaseRepoOwner: Azure - CommitMsg: Update vcpkg-configuration.json - BaseRepoBranch: $(DefaultBranch) + - template: /eng/pipelines/templates/steps/vcpkg-clone.yml + parameters: + RepoOwner: azure-sdk + PRBranchName: $(PrBranchName) + + # Clone Vcpkg Betas + - template: /eng/pipelines/templates/steps/vcpkg-clone.yml + parameters: + RepoOwner: Azure + RepoName: azure-sdk-vcpkg-betas + SetVcpkgRoot: false + + - template: /eng/pipelines/templates/steps/vcpkg-publish.yml + parameters: + ArtifactName: ${{ artifact.Name }} + VcpkgPortName: ${{ artifact.VcpkgPortName }} + + + - template: /eng/common/pipelines/templates/steps/set-default-branch.yml + parameters: + WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-vcpkg-betas + + # Push changes to vcpkg betas + - template: /eng/common/pipelines/templates/steps/git-push-changes.yml + parameters: + WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-vcpkg-betas + TargetRepoName: azure-sdk-vcpkg-betas + BaseRepoOwner: Azure + CommitMsg: Update vcpkg-configuration.json + BaseRepoBranch: $(DefaultBranch) + + # Set $(HasChanges) to $(PublishToVcpkg) so that + # create-pull-request.yml creates or does not create a PR + # based on the deicision of the step that determines + # whether to publish to vcpkg. + - pwsh: Write-Host "##vso[task.setvariable variable=HasChanges]$(PublishToVcpkg)" + displayName: Set $(HasChanges) to $(PublishToVcpkg) for create-pull-request.yml + + - template: /eng/common/pipelines/templates/steps/set-default-branch.yml + parameters: + WorkingDirectory: $(Pipeline.Workspace)/vcpkg + + # SkipCheckingForChanges is true to skip the commit step + # (which is already done by Update-VcpkgPort.ps1) + - template: /eng/common/pipelines/templates/steps/create-pull-request.yml + parameters: + RepoOwner: ${{ variables.VcpkgPrRepoOwner }} + RepoName: ${{ variables.VcpkgPrRepoName }} + WorkingDirectory: $(Pipeline.Workspace)/vcpkg + PrBranchName: $(PrBranchName) + PRTitle: $(PrTitle) + PRBody: Update vcpkg ports for Azure SDK release. This release may contain multiple ports. + SkipCheckingForChanges: true + BaseBranchName: $(DefaultBranch) + OpenAsDraft: ${{ parameters.TestPipeline }} + CloseAfterOpenForTesting: '${{ parameters.TestPipeline }}' + + - task: AzureCLI@2 + displayName: Authenticate to OpenSource API + condition: and(succeeded(), eq(variables['PublishToVcpkg'], 'true')) + inputs: + azureSubscription: opensource-api-connection + scriptType: pscore + scriptLocation: inlineScript + inlineScript: | + $jwt_accessToken = az account get-access-token --resource "api://2789159d-8d8b-4d13-b90b-ca29c1707afd" --query "accessToken" --output tsv + Write-Host "##vso[task.setvariable variable=opensource-api-token;isSecret=true]$jwt_accessToken" + + - template: /eng/common/pipelines/templates/steps/login-to-github.yml + parameters: + TokenOwners: + - $(VcpkgPrRepoOwner) + + # Workaround: -Fallback uses names from CODEOWNERS who + # should be notified about the release in the event of a + # failure to resolve the appropriate aliases. + - pwsh: | + $notifyUsers = ./eng/scripts/Get-TriggeringUserGitHubAlias.ps1 ` + -EmailAddress "$($env:BUILD_REQUESTEDFOREMAIL)" ` + -OpenApiToken "$(opensource-api-token)" ` + -Fallback '@rickwinter @antkmsft @LarryOsterman' + + $prComment = "Adding ${{ artifact.Name }} to release" + if ($notifyUsers) { + $prComment += "`n`ncc: $notifyUsers" + } + + ./eng/common/scripts/Add-IssueComment.ps1 ` + -AuthToken "$(GH_TOKEN)" ` + -RepoOwner $(VcpkgPrRepoOwner) ` + -RepoName $(VcpkgPrRepoName) ` + -IssueNumber "$(Submitted.PullRequest.Number)" ` + -Comment $prComment + condition: and(succeeded(), eq(variables['PublishToVcpkg'], 'true')) + displayName: Comment notification to PR + + - ${{ if eq(variables['PartnerFeed'], 'true') }}: + - job: PublishVcpkgPartnerFeed + displayName: Publish to vcpkg-partner-feed + condition: and(succeeded(), eq(variables['PartnerFeed'], 'true')) + dependsOn: + - ReleaseGate + pool: + name: $(WINDOWSPOOL) + image: $(WINDOWSVMIMAGE) + os: windows + + templateContext: + inputs: + - input: pipelineArtifact + artifactName: packages + targetPath: $(Pipeline.Workspace)/packages + + steps: + - checkout: self + + - pwsh: | + $packageSpec = Get-Content -Raw -Path "$(Pipeline.Workspace)/packages/${{artifact.Name}}/package-info.json" | ConvertFrom-Json + $version = $packageSpec.version + Write-Host "##vso[task.setvariable variable=PackageVersion]$version" + displayName: Set PackageVersion variable + + # There are potential race conditions if this script runs + # in parallel against the same branch name. Release only + # one package at a time. + + # Clone Vcpkg partner feed + - template: /eng/pipelines/templates/steps/vcpkg-clone.yml + parameters: + RepoOwner: Azure + RepoName: azure-sdk-vcpkg-partner-feed + SetVcpkgRoot: false + + - template: /eng/pipelines/templates/steps/vcpkg-publish.yml + parameters: + ArtifactName: ${{ artifact.Name }} + VcpkgPortName: ${{ artifact.VcpkgPortName }} + UpdateVcpkgBeta: false + PartnerRelease: true + PartnerReleaseRef: $(Build.SourceVersion) + + - template: /eng/common/pipelines/templates/steps/set-default-branch.yml + parameters: + WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-vcpkg-partner-feed + + # Push changes to vcpkg partner feed + - template: /eng/common/pipelines/templates/steps/git-push-changes.yml + parameters: + WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-vcpkg-partner-feed + TargetRepoName: azure-sdk-vcpkg-partner-feed + BaseRepoOwner: Azure + CommitMsg: Update vcpkg-configuration.json + BaseRepoBranch: $(DefaultBranch) - ${{if ne(artifact.skipUpdatePackageVersion, 'true')}}: - job: UpdatePackageVersion From 237a880610249c615b18e99950f48a86138b6d4c Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Fri, 16 Oct 2026 03:29:05 -0700 Subject: [PATCH 11/48] Use parameter --- .../templates/stages/archetype-cpp-release.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/eng/pipelines/templates/stages/archetype-cpp-release.yml b/eng/pipelines/templates/stages/archetype-cpp-release.yml index a8bd796a6f..d58fa6dc60 100644 --- a/eng/pipelines/templates/stages/archetype-cpp-release.yml +++ b/eng/pipelines/templates/stages/archetype-cpp-release.yml @@ -46,7 +46,7 @@ stages: - job: TagRepository displayName: "Create release tag" - condition: and(ne(variables['Skip.TagRepository'], 'true'), ne(variables['PublishToVcpkgPartnerFeed'], 'true')) + condition: and(ne(variables['Skip.TagRepository'], 'true'), ne(parameters.PublishToVcpkgPartnerFeed, 'true')) dependsOn: - ReleaseGate @@ -96,7 +96,7 @@ stages: PackageName: ${{artifact.name}} SourceRootPath: $(Build.SourcesDirectory) - - ${{if and(ne(artifact.skipPublishDocGithubIo, 'true'), ne(artifact.publishToVcpkgPartnerFeed, 'true'))}}: + - ${{if and(ne(artifact.skipPublishDocGithubIo, 'true'), ne(parameters.PublishToVcpkgPartnerFeed, 'true'))}}: - job: PublishDocs displayName: Publish Docs to GitHub pages condition: and(succeeded(), ne(variables['Skip.PublishDocs'], 'true'), ne(variables['Build.Repository.Name'], 'Azure/azure-sdk-for-cpp-pr')) @@ -164,10 +164,10 @@ stages: - ci-configs/packages-latest.json - ci-configs/packages-preview.json - - ${{ if and(ne(artifact.skipPublishVcpkg, 'true'), ne(variables['PartnerFeed'], 'true')) }}: + - ${{ if and(ne(artifact.skipPublishVcpkg, 'true'), ne(parameters.PublishToVcpkgPartnerFeed, 'true')) }}: - job: PublishVcpkg displayName: Publish to vcpkg - condition: and(succeeded(), ne(variables['Skip.PublishVcpkg'], 'true'), ne(variables['PartnerFeed'], 'true')) + condition: and(succeeded(), ne(variables['Skip.PublishVcpkg'], 'true'), ne(parameters.PublishToVcpkgPartnerFeed, 'true')) # This step requires the tag step dependsOn: - TagRepository @@ -314,10 +314,10 @@ stages: condition: and(succeeded(), eq(variables['PublishToVcpkg'], 'true')) displayName: Comment notification to PR - - ${{ if eq(variables['PartnerFeed'], 'true') }}: + - ${{ if eq(parameters.PublishToVcpkgPartnerFeed, 'true') }}: - job: PublishVcpkgPartnerFeed displayName: Publish to vcpkg-partner-feed - condition: and(succeeded(), eq(variables['PartnerFeed'], 'true')) + condition: and(succeeded(), eq(parameters.PublishToVcpkgPartnerFeed, 'true')) dependsOn: - ReleaseGate pool: From d3237b5be82bf888cbc19b0f0ce88b21b9668e4b Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Fri, 16 Oct 2026 03:33:34 -0700 Subject: [PATCH 12/48] parameters[] syntax --- .../templates/stages/archetype-cpp-release.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/eng/pipelines/templates/stages/archetype-cpp-release.yml b/eng/pipelines/templates/stages/archetype-cpp-release.yml index d58fa6dc60..c6d4924699 100644 --- a/eng/pipelines/templates/stages/archetype-cpp-release.yml +++ b/eng/pipelines/templates/stages/archetype-cpp-release.yml @@ -46,7 +46,7 @@ stages: - job: TagRepository displayName: "Create release tag" - condition: and(ne(variables['Skip.TagRepository'], 'true'), ne(parameters.PublishToVcpkgPartnerFeed, 'true')) + condition: and(ne(variables['Skip.TagRepository'], 'true'), ne(parameters['PublishToVcpkgPartnerFeed'], 'true')) dependsOn: - ReleaseGate @@ -96,7 +96,7 @@ stages: PackageName: ${{artifact.name}} SourceRootPath: $(Build.SourcesDirectory) - - ${{if and(ne(artifact.skipPublishDocGithubIo, 'true'), ne(parameters.PublishToVcpkgPartnerFeed, 'true'))}}: + - ${{if and(ne(artifact.skipPublishDocGithubIo, 'true'), ne(parameters['PublishToVcpkgPartnerFeed'], 'true'))}}: - job: PublishDocs displayName: Publish Docs to GitHub pages condition: and(succeeded(), ne(variables['Skip.PublishDocs'], 'true'), ne(variables['Build.Repository.Name'], 'Azure/azure-sdk-for-cpp-pr')) @@ -164,10 +164,10 @@ stages: - ci-configs/packages-latest.json - ci-configs/packages-preview.json - - ${{ if and(ne(artifact.skipPublishVcpkg, 'true'), ne(parameters.PublishToVcpkgPartnerFeed, 'true')) }}: + - ${{ if and(ne(artifact.skipPublishVcpkg, 'true'), ne(parameters['PublishToVcpkgPartnerFeed'], 'true')) }}: - job: PublishVcpkg displayName: Publish to vcpkg - condition: and(succeeded(), ne(variables['Skip.PublishVcpkg'], 'true'), ne(parameters.PublishToVcpkgPartnerFeed, 'true')) + condition: and(succeeded(), ne(variables['Skip.PublishVcpkg'], 'true'), ne(parameters['PublishToVcpkgPartnerFeed'], 'true')) # This step requires the tag step dependsOn: - TagRepository @@ -314,10 +314,10 @@ stages: condition: and(succeeded(), eq(variables['PublishToVcpkg'], 'true')) displayName: Comment notification to PR - - ${{ if eq(parameters.PublishToVcpkgPartnerFeed, 'true') }}: + - ${{ if eq(parameters['PublishToVcpkgPartnerFeed'], 'true') }}: - job: PublishVcpkgPartnerFeed displayName: Publish to vcpkg-partner-feed - condition: and(succeeded(), eq(parameters.PublishToVcpkgPartnerFeed, 'true')) + condition: and(succeeded(), eq(parameters['PublishToVcpkgPartnerFeed'], 'true')) dependsOn: - ReleaseGate pool: From b2aad81f6adeb02165405e9f6c9cd7024a800d48 Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Fri, 16 Oct 2026 03:55:08 -0700 Subject: [PATCH 13/48] Syntax --- .../templates/stages/archetype-cpp-release.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/eng/pipelines/templates/stages/archetype-cpp-release.yml b/eng/pipelines/templates/stages/archetype-cpp-release.yml index c6d4924699..9d1832d223 100644 --- a/eng/pipelines/templates/stages/archetype-cpp-release.yml +++ b/eng/pipelines/templates/stages/archetype-cpp-release.yml @@ -46,7 +46,7 @@ stages: - job: TagRepository displayName: "Create release tag" - condition: and(ne(variables['Skip.TagRepository'], 'true'), ne(parameters['PublishToVcpkgPartnerFeed'], 'true')) + condition: and(ne(variables['Skip.TagRepository'], 'true'), not(${{ parameters.PublishToVcpkgPartnerFeed }})) dependsOn: - ReleaseGate @@ -96,7 +96,7 @@ stages: PackageName: ${{artifact.name}} SourceRootPath: $(Build.SourcesDirectory) - - ${{if and(ne(artifact.skipPublishDocGithubIo, 'true'), ne(parameters['PublishToVcpkgPartnerFeed'], 'true'))}}: + - ${{if and(ne(artifact.skipPublishDocGithubIo, 'true'), not(parameters.PublishToVcpkgPartnerFeed))}}: - job: PublishDocs displayName: Publish Docs to GitHub pages condition: and(succeeded(), ne(variables['Skip.PublishDocs'], 'true'), ne(variables['Build.Repository.Name'], 'Azure/azure-sdk-for-cpp-pr')) @@ -164,10 +164,10 @@ stages: - ci-configs/packages-latest.json - ci-configs/packages-preview.json - - ${{ if and(ne(artifact.skipPublishVcpkg, 'true'), ne(parameters['PublishToVcpkgPartnerFeed'], 'true')) }}: + - ${{ if and(ne(artifact.skipPublishVcpkg, 'true'), not(parameters.PublishToVcpkgPartnerFeed)) }}: - job: PublishVcpkg displayName: Publish to vcpkg - condition: and(succeeded(), ne(variables['Skip.PublishVcpkg'], 'true'), ne(parameters['PublishToVcpkgPartnerFeed'], 'true')) + condition: and(succeeded(), ne(variables['Skip.PublishVcpkg'], 'true'), not(${{ parameters.PublishToVcpkgPartnerFeed }})) # This step requires the tag step dependsOn: - TagRepository @@ -314,10 +314,10 @@ stages: condition: and(succeeded(), eq(variables['PublishToVcpkg'], 'true')) displayName: Comment notification to PR - - ${{ if eq(parameters['PublishToVcpkgPartnerFeed'], 'true') }}: + - ${{ if parameters.PublishToVcpkgPartnerFeed }}: - job: PublishVcpkgPartnerFeed displayName: Publish to vcpkg-partner-feed - condition: and(succeeded(), eq(parameters['PublishToVcpkgPartnerFeed'], 'true')) + condition: and(succeeded(), ${{ parameters.PublishToVcpkgPartnerFeed }}) dependsOn: - ReleaseGate pool: From 339613c30ce6c5a989ced152559a08ee0c97678e Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Fri, 16 Oct 2026 04:08:08 -0700 Subject: [PATCH 14/48] Use variables, compile time --- .../templates/stages/archetype-cpp-release.yml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/eng/pipelines/templates/stages/archetype-cpp-release.yml b/eng/pipelines/templates/stages/archetype-cpp-release.yml index 9d1832d223..6c9abc4704 100644 --- a/eng/pipelines/templates/stages/archetype-cpp-release.yml +++ b/eng/pipelines/templates/stages/archetype-cpp-release.yml @@ -11,7 +11,8 @@ parameters: TargetDocRepoOwner: MicrosoftDocs TargetDocRepoName: azure-docs-sdk-cpp - PublishToVcpkgPartnerFeed: false +variables: + PublishToVcpkgPartnerFeed: 'false' stages: - ${{if and(eq(variables['Build.Reason'], 'Manual'), eq(variables['System.TeamProject'], 'internal'))}}: @@ -46,7 +47,7 @@ stages: - job: TagRepository displayName: "Create release tag" - condition: and(ne(variables['Skip.TagRepository'], 'true'), not(${{ parameters.PublishToVcpkgPartnerFeed }})) + condition: and(ne(variables['Skip.TagRepository'], 'true'), ne(${{ variables.PublishToVcpkgPartnerFeed }}, 'true')) dependsOn: - ReleaseGate @@ -96,7 +97,7 @@ stages: PackageName: ${{artifact.name}} SourceRootPath: $(Build.SourcesDirectory) - - ${{if and(ne(artifact.skipPublishDocGithubIo, 'true'), not(parameters.PublishToVcpkgPartnerFeed))}}: + - ${{if and(ne(artifact.skipPublishDocGithubIo, 'true'), ne(${{ variables.PublishToVcpkgPartnerFeed }}, 'true'))}}: - job: PublishDocs displayName: Publish Docs to GitHub pages condition: and(succeeded(), ne(variables['Skip.PublishDocs'], 'true'), ne(variables['Build.Repository.Name'], 'Azure/azure-sdk-for-cpp-pr')) @@ -164,10 +165,10 @@ stages: - ci-configs/packages-latest.json - ci-configs/packages-preview.json - - ${{ if and(ne(artifact.skipPublishVcpkg, 'true'), not(parameters.PublishToVcpkgPartnerFeed)) }}: + - ${{ if and(ne(artifact.skipPublishVcpkg, 'true'), ne(${{ variables.PublishToVcpkgPartnerFeed }}, 'true')) }}: - job: PublishVcpkg displayName: Publish to vcpkg - condition: and(succeeded(), ne(variables['Skip.PublishVcpkg'], 'true'), not(${{ parameters.PublishToVcpkgPartnerFeed }})) + condition: and(succeeded(), ne(variables['Skip.PublishVcpkg'], 'true'), ne(${{ variables.PublishToVcpkgPartnerFeed }}, 'true')) # This step requires the tag step dependsOn: - TagRepository @@ -314,10 +315,10 @@ stages: condition: and(succeeded(), eq(variables['PublishToVcpkg'], 'true')) displayName: Comment notification to PR - - ${{ if parameters.PublishToVcpkgPartnerFeed }}: + - ${{ if eq(variables.PublishToVcpkgPartnerFeed, 'true') }}: - job: PublishVcpkgPartnerFeed displayName: Publish to vcpkg-partner-feed - condition: and(succeeded(), ${{ parameters.PublishToVcpkgPartnerFeed }}) + condition: and(succeeded(), eq(${{ variables.PublishToVcpkgPartnerFeed }}, 'true')) dependsOn: - ReleaseGate pool: From 1571ac142d27f65d33c35dadd0fcd28af7dafcba Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Fri, 16 Oct 2026 04:14:42 -0700 Subject: [PATCH 15/48] Drop variables section --- eng/pipelines/templates/stages/archetype-cpp-release.yml | 3 --- 1 file changed, 3 deletions(-) diff --git a/eng/pipelines/templates/stages/archetype-cpp-release.yml b/eng/pipelines/templates/stages/archetype-cpp-release.yml index 6c9abc4704..baf195e923 100644 --- a/eng/pipelines/templates/stages/archetype-cpp-release.yml +++ b/eng/pipelines/templates/stages/archetype-cpp-release.yml @@ -11,9 +11,6 @@ parameters: TargetDocRepoOwner: MicrosoftDocs TargetDocRepoName: azure-docs-sdk-cpp -variables: - PublishToVcpkgPartnerFeed: 'false' - stages: - ${{if and(eq(variables['Build.Reason'], 'Manual'), eq(variables['System.TeamProject'], 'internal'))}}: - ${{ each artifact in parameters.Artifacts }}: From 9b6a0d74a4d518d4e4bda9aca396c13be5a2fc21 Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Fri, 16 Oct 2026 04:18:15 -0700 Subject: [PATCH 16/48] Syntax --- eng/pipelines/templates/stages/archetype-cpp-release.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eng/pipelines/templates/stages/archetype-cpp-release.yml b/eng/pipelines/templates/stages/archetype-cpp-release.yml index baf195e923..0f4c95ba4e 100644 --- a/eng/pipelines/templates/stages/archetype-cpp-release.yml +++ b/eng/pipelines/templates/stages/archetype-cpp-release.yml @@ -94,7 +94,7 @@ stages: PackageName: ${{artifact.name}} SourceRootPath: $(Build.SourcesDirectory) - - ${{if and(ne(artifact.skipPublishDocGithubIo, 'true'), ne(${{ variables.PublishToVcpkgPartnerFeed }}, 'true'))}}: + - ${{if and(ne(artifact.skipPublishDocGithubIo, 'true'), ne(variables.PublishToVcpkgPartnerFeed, 'true'))}}: - job: PublishDocs displayName: Publish Docs to GitHub pages condition: and(succeeded(), ne(variables['Skip.PublishDocs'], 'true'), ne(variables['Build.Repository.Name'], 'Azure/azure-sdk-for-cpp-pr')) @@ -162,7 +162,7 @@ stages: - ci-configs/packages-latest.json - ci-configs/packages-preview.json - - ${{ if and(ne(artifact.skipPublishVcpkg, 'true'), ne(${{ variables.PublishToVcpkgPartnerFeed }}, 'true')) }}: + - ${{ if and(ne(artifact.skipPublishVcpkg, 'true'), ne(variables.PublishToVcpkgPartnerFeed, 'true')) }}: - job: PublishVcpkg displayName: Publish to vcpkg condition: and(succeeded(), ne(variables['Skip.PublishVcpkg'], 'true'), ne(${{ variables.PublishToVcpkgPartnerFeed }}, 'true')) From 420c3fcedc87bf1f1caac5733dd2da51bbb4343a Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Fri, 16 Oct 2026 04:27:25 -0700 Subject: [PATCH 17/48] Initialize --- eng/pipelines/templates/stages/archetype-cpp-release.yml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/eng/pipelines/templates/stages/archetype-cpp-release.yml b/eng/pipelines/templates/stages/archetype-cpp-release.yml index 0f4c95ba4e..3da8ca9c7e 100644 --- a/eng/pipelines/templates/stages/archetype-cpp-release.yml +++ b/eng/pipelines/templates/stages/archetype-cpp-release.yml @@ -11,6 +11,8 @@ parameters: TargetDocRepoOwner: MicrosoftDocs TargetDocRepoName: azure-docs-sdk-cpp + PublishToVcpkgPartnerFeed: 'false' + stages: - ${{if and(eq(variables['Build.Reason'], 'Manual'), eq(variables['System.TeamProject'], 'internal'))}}: - ${{ each artifact in parameters.Artifacts }}: @@ -44,7 +46,7 @@ stages: - job: TagRepository displayName: "Create release tag" - condition: and(ne(variables['Skip.TagRepository'], 'true'), ne(${{ variables.PublishToVcpkgPartnerFeed }}, 'true')) + condition: and(ne(variables['Skip.TagRepository'], 'true'), ne(variables['PublishToVcpkgPartnerFeed'], 'true')) dependsOn: - ReleaseGate @@ -165,7 +167,7 @@ stages: - ${{ if and(ne(artifact.skipPublishVcpkg, 'true'), ne(variables.PublishToVcpkgPartnerFeed, 'true')) }}: - job: PublishVcpkg displayName: Publish to vcpkg - condition: and(succeeded(), ne(variables['Skip.PublishVcpkg'], 'true'), ne(${{ variables.PublishToVcpkgPartnerFeed }}, 'true')) + condition: and(succeeded(), ne(variables['Skip.PublishVcpkg'], 'true'), ne(variables['PublishToVcpkgPartnerFeed'], 'true')) # This step requires the tag step dependsOn: - TagRepository From 046d7e26aa664620eeeb1d1a49ce1653b6ff94cb Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Fri, 16 Oct 2026 04:32:24 -0700 Subject: [PATCH 18/48] Run-time eval --- .../templates/stages/archetype-cpp-release.yml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/eng/pipelines/templates/stages/archetype-cpp-release.yml b/eng/pipelines/templates/stages/archetype-cpp-release.yml index 3da8ca9c7e..5eb96a8cd6 100644 --- a/eng/pipelines/templates/stages/archetype-cpp-release.yml +++ b/eng/pipelines/templates/stages/archetype-cpp-release.yml @@ -11,8 +11,6 @@ parameters: TargetDocRepoOwner: MicrosoftDocs TargetDocRepoName: azure-docs-sdk-cpp - PublishToVcpkgPartnerFeed: 'false' - stages: - ${{if and(eq(variables['Build.Reason'], 'Manual'), eq(variables['System.TeamProject'], 'internal'))}}: - ${{ each artifact in parameters.Artifacts }}: @@ -96,7 +94,7 @@ stages: PackageName: ${{artifact.name}} SourceRootPath: $(Build.SourcesDirectory) - - ${{if and(ne(artifact.skipPublishDocGithubIo, 'true'), ne(variables.PublishToVcpkgPartnerFeed, 'true'))}}: + - ${{if and(ne(artifact.skipPublishDocGithubIo, 'true'), ne(variables['PublishToVcpkgPartnerFeed'], 'true'))}}: - job: PublishDocs displayName: Publish Docs to GitHub pages condition: and(succeeded(), ne(variables['Skip.PublishDocs'], 'true'), ne(variables['Build.Repository.Name'], 'Azure/azure-sdk-for-cpp-pr')) @@ -164,7 +162,7 @@ stages: - ci-configs/packages-latest.json - ci-configs/packages-preview.json - - ${{ if and(ne(artifact.skipPublishVcpkg, 'true'), ne(variables.PublishToVcpkgPartnerFeed, 'true')) }}: + - ${{ if and(ne(artifact.skipPublishVcpkg, 'true'), ne(variables['PublishToVcpkgPartnerFeed'], 'true')) }}: - job: PublishVcpkg displayName: Publish to vcpkg condition: and(succeeded(), ne(variables['Skip.PublishVcpkg'], 'true'), ne(variables['PublishToVcpkgPartnerFeed'], 'true')) @@ -314,10 +312,10 @@ stages: condition: and(succeeded(), eq(variables['PublishToVcpkg'], 'true')) displayName: Comment notification to PR - - ${{ if eq(variables.PublishToVcpkgPartnerFeed, 'true') }}: + - ${{ if eq(variables['PublishToVcpkgPartnerFeed'], 'true') }}: - job: PublishVcpkgPartnerFeed displayName: Publish to vcpkg-partner-feed - condition: and(succeeded(), eq(${{ variables.PublishToVcpkgPartnerFeed }}, 'true')) + condition: and(succeeded(), eq(variables['PublishToVcpkgPartnerFeed'], 'true')) dependsOn: - ReleaseGate pool: From d9700e39c3019ad7f000bdee2b6c2f8a9a8103c5 Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Fri, 16 Oct 2026 04:37:59 -0700 Subject: [PATCH 19/48] Add extra condition --- eng/pipelines/templates/stages/archetype-cpp-release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/pipelines/templates/stages/archetype-cpp-release.yml b/eng/pipelines/templates/stages/archetype-cpp-release.yml index 5eb96a8cd6..31127bab80 100644 --- a/eng/pipelines/templates/stages/archetype-cpp-release.yml +++ b/eng/pipelines/templates/stages/archetype-cpp-release.yml @@ -312,7 +312,7 @@ stages: condition: and(succeeded(), eq(variables['PublishToVcpkg'], 'true')) displayName: Comment notification to PR - - ${{ if eq(variables['PublishToVcpkgPartnerFeed'], 'true') }}: + - ${{ if and(ne(artifact.skipPublishVcpkg, 'true'), eq(variables['PublishToVcpkgPartnerFeed'], 'true')) }}: - job: PublishVcpkgPartnerFeed displayName: Publish to vcpkg-partner-feed condition: and(succeeded(), eq(variables['PublishToVcpkgPartnerFeed'], 'true')) From fa018cbb95a6c90c252d43777da74c5794ec17da Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Fri, 16 Oct 2026 05:18:01 -0700 Subject: [PATCH 20/48] if-else --- .../stages/archetype-cpp-release.yml | 413 +++++++++--------- 1 file changed, 207 insertions(+), 206 deletions(-) diff --git a/eng/pipelines/templates/stages/archetype-cpp-release.yml b/eng/pipelines/templates/stages/archetype-cpp-release.yml index 31127bab80..1a1750ef0d 100644 --- a/eng/pipelines/templates/stages/archetype-cpp-release.yml +++ b/eng/pipelines/templates/stages/archetype-cpp-release.yml @@ -162,213 +162,214 @@ stages: - ci-configs/packages-latest.json - ci-configs/packages-preview.json - - ${{ if and(ne(artifact.skipPublishVcpkg, 'true'), ne(variables['PublishToVcpkgPartnerFeed'], 'true')) }}: - - job: PublishVcpkg - displayName: Publish to vcpkg - condition: and(succeeded(), ne(variables['Skip.PublishVcpkg'], 'true'), ne(variables['PublishToVcpkgPartnerFeed'], 'true')) - # This step requires the tag step - dependsOn: - - TagRepository - - ReleaseGate - pool: - name: $(WINDOWSPOOL) - image: $(WINDOWSVMIMAGE) - os: windows - - variables: - VcpkgPrRepoOwner: Microsoft - VcpkgPrRepoName: vcpkg - - templateContext: - inputs: - - input: pipelineArtifact - artifactName: packages - targetPath: $(Pipeline.Workspace)/packages - - steps: - - checkout: self - - pwsh: | - $branchName = "azure-sdk-for-cpp-${{ artifact.Name }}-$(Build.BuildId)" - if ('$(VcpkgForkBranchName)') { - Write-Host "Using queue time branch name" - $branchName = '$(VcpkgForkBranchName)' - } - Write-Host "##vso[task.setvariable variable=PrBranchName]$branchName" - displayName: Set fork branch name - - - pwsh: | - $packageSpec = Get-Content -Raw -Path "$(Pipeline.Workspace)/packages/${{artifact.Name}}/package-info.json" | ConvertFrom-Json - $version = $packageSpec.version - Write-Host "##vso[task.setvariable variable=PackageVersion]$version" - displayName: Set PackageVersion variable - - - pwsh: | - $title = "[${{ artifact.VcpkgPortName }}] publish version $(PackageVersion)" - - if ('$(VcpkgPRTitle)') { - Write-Host "Using queue time PR title" - $title = '$(VcpkgPRTitle)' - } - Write-Host "##vso[task.setvariable variable=PrTitle]$title" - displayName: Set PR title - - # There are potential race conditions if this script runs - # in parallel against the same branch name. Release only - # one package at a time. - # Clone main vcpkg repo - - template: /eng/pipelines/templates/steps/vcpkg-clone.yml - parameters: - RepoOwner: azure-sdk - PRBranchName: $(PrBranchName) - - # Clone Vcpkg Betas - - template: /eng/pipelines/templates/steps/vcpkg-clone.yml - parameters: - RepoOwner: Azure - RepoName: azure-sdk-vcpkg-betas - SetVcpkgRoot: false - - - template: /eng/pipelines/templates/steps/vcpkg-publish.yml - parameters: - ArtifactName: ${{ artifact.Name }} - VcpkgPortName: ${{ artifact.VcpkgPortName }} - - - - template: /eng/common/pipelines/templates/steps/set-default-branch.yml - parameters: - WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-vcpkg-betas - - # Push changes to vcpkg betas - - template: /eng/common/pipelines/templates/steps/git-push-changes.yml - parameters: - WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-vcpkg-betas - TargetRepoName: azure-sdk-vcpkg-betas - BaseRepoOwner: Azure - CommitMsg: Update vcpkg-configuration.json - BaseRepoBranch: $(DefaultBranch) - - # Set $(HasChanges) to $(PublishToVcpkg) so that - # create-pull-request.yml creates or does not create a PR - # based on the deicision of the step that determines - # whether to publish to vcpkg. - - pwsh: Write-Host "##vso[task.setvariable variable=HasChanges]$(PublishToVcpkg)" - displayName: Set $(HasChanges) to $(PublishToVcpkg) for create-pull-request.yml - - - template: /eng/common/pipelines/templates/steps/set-default-branch.yml - parameters: - WorkingDirectory: $(Pipeline.Workspace)/vcpkg - - # SkipCheckingForChanges is true to skip the commit step - # (which is already done by Update-VcpkgPort.ps1) - - template: /eng/common/pipelines/templates/steps/create-pull-request.yml - parameters: - RepoOwner: ${{ variables.VcpkgPrRepoOwner }} - RepoName: ${{ variables.VcpkgPrRepoName }} - WorkingDirectory: $(Pipeline.Workspace)/vcpkg - PrBranchName: $(PrBranchName) - PRTitle: $(PrTitle) - PRBody: Update vcpkg ports for Azure SDK release. This release may contain multiple ports. - SkipCheckingForChanges: true - BaseBranchName: $(DefaultBranch) - OpenAsDraft: ${{ parameters.TestPipeline }} - CloseAfterOpenForTesting: '${{ parameters.TestPipeline }}' - - - task: AzureCLI@2 - displayName: Authenticate to OpenSource API - condition: and(succeeded(), eq(variables['PublishToVcpkg'], 'true')) + - ${{ if ne(artifact.skipPublishVcpkg, 'true') }}: + ${{ if ne(variables['PublishToVcpkgPartnerFeed'], 'true') }}: + - job: PublishVcpkg + displayName: Publish to vcpkg + condition: and(succeeded(), ne(variables['Skip.PublishVcpkg'], 'true'), ne(variables['PublishToVcpkgPartnerFeed'], 'true')) + # This step requires the tag step + dependsOn: + - TagRepository + - ReleaseGate + pool: + name: $(WINDOWSPOOL) + image: $(WINDOWSVMIMAGE) + os: windows + + variables: + VcpkgPrRepoOwner: Microsoft + VcpkgPrRepoName: vcpkg + + templateContext: inputs: - azureSubscription: opensource-api-connection - scriptType: pscore - scriptLocation: inlineScript - inlineScript: | - $jwt_accessToken = az account get-access-token --resource "api://2789159d-8d8b-4d13-b90b-ca29c1707afd" --query "accessToken" --output tsv - Write-Host "##vso[task.setvariable variable=opensource-api-token;isSecret=true]$jwt_accessToken" - - - template: /eng/common/pipelines/templates/steps/login-to-github.yml - parameters: - TokenOwners: - - $(VcpkgPrRepoOwner) - - # Workaround: -Fallback uses names from CODEOWNERS who - # should be notified about the release in the event of a - # failure to resolve the appropriate aliases. - - pwsh: | - $notifyUsers = ./eng/scripts/Get-TriggeringUserGitHubAlias.ps1 ` - -EmailAddress "$($env:BUILD_REQUESTEDFOREMAIL)" ` - -OpenApiToken "$(opensource-api-token)" ` - -Fallback '@rickwinter @antkmsft @LarryOsterman' - - $prComment = "Adding ${{ artifact.Name }} to release" - if ($notifyUsers) { - $prComment += "`n`ncc: $notifyUsers" - } - - ./eng/common/scripts/Add-IssueComment.ps1 ` - -AuthToken "$(GH_TOKEN)" ` - -RepoOwner $(VcpkgPrRepoOwner) ` - -RepoName $(VcpkgPrRepoName) ` - -IssueNumber "$(Submitted.PullRequest.Number)" ` - -Comment $prComment - condition: and(succeeded(), eq(variables['PublishToVcpkg'], 'true')) - displayName: Comment notification to PR - - - ${{ if and(ne(artifact.skipPublishVcpkg, 'true'), eq(variables['PublishToVcpkgPartnerFeed'], 'true')) }}: - - job: PublishVcpkgPartnerFeed - displayName: Publish to vcpkg-partner-feed - condition: and(succeeded(), eq(variables['PublishToVcpkgPartnerFeed'], 'true')) - dependsOn: - - ReleaseGate - pool: - name: $(WINDOWSPOOL) - image: $(WINDOWSVMIMAGE) - os: windows - - templateContext: - inputs: - - input: pipelineArtifact - artifactName: packages - targetPath: $(Pipeline.Workspace)/packages - - steps: - - checkout: self - - - pwsh: | - $packageSpec = Get-Content -Raw -Path "$(Pipeline.Workspace)/packages/${{artifact.Name}}/package-info.json" | ConvertFrom-Json - $version = $packageSpec.version - Write-Host "##vso[task.setvariable variable=PackageVersion]$version" - displayName: Set PackageVersion variable - - # There are potential race conditions if this script runs - # in parallel against the same branch name. Release only - # one package at a time. - - # Clone Vcpkg partner feed - - template: /eng/pipelines/templates/steps/vcpkg-clone.yml - parameters: - RepoOwner: Azure - RepoName: azure-sdk-vcpkg-partner-feed - SetVcpkgRoot: false - - - template: /eng/pipelines/templates/steps/vcpkg-publish.yml - parameters: - ArtifactName: ${{ artifact.Name }} - VcpkgPortName: ${{ artifact.VcpkgPortName }} - UpdateVcpkgBeta: false - PartnerRelease: true - PartnerReleaseRef: $(Build.SourceVersion) - - - template: /eng/common/pipelines/templates/steps/set-default-branch.yml - parameters: - WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-vcpkg-partner-feed - - # Push changes to vcpkg partner feed - - template: /eng/common/pipelines/templates/steps/git-push-changes.yml - parameters: - WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-vcpkg-partner-feed - TargetRepoName: azure-sdk-vcpkg-partner-feed - BaseRepoOwner: Azure - CommitMsg: Update vcpkg-configuration.json - BaseRepoBranch: $(DefaultBranch) + - input: pipelineArtifact + artifactName: packages + targetPath: $(Pipeline.Workspace)/packages + + steps: + - checkout: self + - pwsh: | + $branchName = "azure-sdk-for-cpp-${{ artifact.Name }}-$(Build.BuildId)" + if ('$(VcpkgForkBranchName)') { + Write-Host "Using queue time branch name" + $branchName = '$(VcpkgForkBranchName)' + } + Write-Host "##vso[task.setvariable variable=PrBranchName]$branchName" + displayName: Set fork branch name + + - pwsh: | + $packageSpec = Get-Content -Raw -Path "$(Pipeline.Workspace)/packages/${{artifact.Name}}/package-info.json" | ConvertFrom-Json + $version = $packageSpec.version + Write-Host "##vso[task.setvariable variable=PackageVersion]$version" + displayName: Set PackageVersion variable + + - pwsh: | + $title = "[${{ artifact.VcpkgPortName }}] publish version $(PackageVersion)" + + if ('$(VcpkgPRTitle)') { + Write-Host "Using queue time PR title" + $title = '$(VcpkgPRTitle)' + } + Write-Host "##vso[task.setvariable variable=PrTitle]$title" + displayName: Set PR title + + # There are potential race conditions if this script runs + # in parallel against the same branch name. Release only + # one package at a time. + # Clone main vcpkg repo + - template: /eng/pipelines/templates/steps/vcpkg-clone.yml + parameters: + RepoOwner: azure-sdk + PRBranchName: $(PrBranchName) + + # Clone Vcpkg Betas + - template: /eng/pipelines/templates/steps/vcpkg-clone.yml + parameters: + RepoOwner: Azure + RepoName: azure-sdk-vcpkg-betas + SetVcpkgRoot: false + + - template: /eng/pipelines/templates/steps/vcpkg-publish.yml + parameters: + ArtifactName: ${{ artifact.Name }} + VcpkgPortName: ${{ artifact.VcpkgPortName }} + + + - template: /eng/common/pipelines/templates/steps/set-default-branch.yml + parameters: + WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-vcpkg-betas + + # Push changes to vcpkg betas + - template: /eng/common/pipelines/templates/steps/git-push-changes.yml + parameters: + WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-vcpkg-betas + TargetRepoName: azure-sdk-vcpkg-betas + BaseRepoOwner: Azure + CommitMsg: Update vcpkg-configuration.json + BaseRepoBranch: $(DefaultBranch) + + # Set $(HasChanges) to $(PublishToVcpkg) so that + # create-pull-request.yml creates or does not create a PR + # based on the deicision of the step that determines + # whether to publish to vcpkg. + - pwsh: Write-Host "##vso[task.setvariable variable=HasChanges]$(PublishToVcpkg)" + displayName: Set $(HasChanges) to $(PublishToVcpkg) for create-pull-request.yml + + - template: /eng/common/pipelines/templates/steps/set-default-branch.yml + parameters: + WorkingDirectory: $(Pipeline.Workspace)/vcpkg + + # SkipCheckingForChanges is true to skip the commit step + # (which is already done by Update-VcpkgPort.ps1) + - template: /eng/common/pipelines/templates/steps/create-pull-request.yml + parameters: + RepoOwner: ${{ variables.VcpkgPrRepoOwner }} + RepoName: ${{ variables.VcpkgPrRepoName }} + WorkingDirectory: $(Pipeline.Workspace)/vcpkg + PrBranchName: $(PrBranchName) + PRTitle: $(PrTitle) + PRBody: Update vcpkg ports for Azure SDK release. This release may contain multiple ports. + SkipCheckingForChanges: true + BaseBranchName: $(DefaultBranch) + OpenAsDraft: ${{ parameters.TestPipeline }} + CloseAfterOpenForTesting: '${{ parameters.TestPipeline }}' + + - task: AzureCLI@2 + displayName: Authenticate to OpenSource API + condition: and(succeeded(), eq(variables['PublishToVcpkg'], 'true')) + inputs: + azureSubscription: opensource-api-connection + scriptType: pscore + scriptLocation: inlineScript + inlineScript: | + $jwt_accessToken = az account get-access-token --resource "api://2789159d-8d8b-4d13-b90b-ca29c1707afd" --query "accessToken" --output tsv + Write-Host "##vso[task.setvariable variable=opensource-api-token;isSecret=true]$jwt_accessToken" + + - template: /eng/common/pipelines/templates/steps/login-to-github.yml + parameters: + TokenOwners: + - $(VcpkgPrRepoOwner) + + # Workaround: -Fallback uses names from CODEOWNERS who + # should be notified about the release in the event of a + # failure to resolve the appropriate aliases. + - pwsh: | + $notifyUsers = ./eng/scripts/Get-TriggeringUserGitHubAlias.ps1 ` + -EmailAddress "$($env:BUILD_REQUESTEDFOREMAIL)" ` + -OpenApiToken "$(opensource-api-token)" ` + -Fallback '@rickwinter @antkmsft @LarryOsterman' + + $prComment = "Adding ${{ artifact.Name }} to release" + if ($notifyUsers) { + $prComment += "`n`ncc: $notifyUsers" + } + + ./eng/common/scripts/Add-IssueComment.ps1 ` + -AuthToken "$(GH_TOKEN)" ` + -RepoOwner $(VcpkgPrRepoOwner) ` + -RepoName $(VcpkgPrRepoName) ` + -IssueNumber "$(Submitted.PullRequest.Number)" ` + -Comment $prComment + condition: and(succeeded(), eq(variables['PublishToVcpkg'], 'true')) + displayName: Comment notification to PR + + ${{ else }}: + - job: PublishVcpkgPartnerFeed + displayName: Publish to vcpkg-partner-feed + condition: and(succeeded(), eq(variables['PublishToVcpkgPartnerFeed'], 'true')) + dependsOn: + - ReleaseGate + pool: + name: $(WINDOWSPOOL) + image: $(WINDOWSVMIMAGE) + os: windows + + templateContext: + inputs: + - input: pipelineArtifact + artifactName: packages + targetPath: $(Pipeline.Workspace)/packages + + steps: + - checkout: self + + - pwsh: | + $packageSpec = Get-Content -Raw -Path "$(Pipeline.Workspace)/packages/${{artifact.Name}}/package-info.json" | ConvertFrom-Json + $version = $packageSpec.version + Write-Host "##vso[task.setvariable variable=PackageVersion]$version" + displayName: Set PackageVersion variable + + # There are potential race conditions if this script runs + # in parallel against the same branch name. Release only + # one package at a time. + + # Clone Vcpkg partner feed + - template: /eng/pipelines/templates/steps/vcpkg-clone.yml + parameters: + RepoOwner: Azure + RepoName: azure-sdk-vcpkg-partner-feed + SetVcpkgRoot: false + + - template: /eng/pipelines/templates/steps/vcpkg-publish.yml + parameters: + ArtifactName: ${{ artifact.Name }} + VcpkgPortName: ${{ artifact.VcpkgPortName }} + UpdateVcpkgBeta: false + PartnerRelease: true + PartnerReleaseRef: $(Build.SourceVersion) + + - template: /eng/common/pipelines/templates/steps/set-default-branch.yml + parameters: + WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-vcpkg-partner-feed + + # Push changes to vcpkg partner feed + - template: /eng/common/pipelines/templates/steps/git-push-changes.yml + parameters: + WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-vcpkg-partner-feed + TargetRepoName: azure-sdk-vcpkg-partner-feed + BaseRepoOwner: Azure + CommitMsg: Update vcpkg-configuration.json + BaseRepoBranch: $(DefaultBranch) - ${{if ne(artifact.skipUpdatePackageVersion, 'true')}}: - job: UpdatePackageVersion From 5b0726dbfc1189fc06ed6ebfab416e71c7ce4cba Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Fri, 16 Oct 2026 05:22:00 -0700 Subject: [PATCH 21/48] - --- eng/pipelines/templates/stages/archetype-cpp-release.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eng/pipelines/templates/stages/archetype-cpp-release.yml b/eng/pipelines/templates/stages/archetype-cpp-release.yml index 1a1750ef0d..e6ad158912 100644 --- a/eng/pipelines/templates/stages/archetype-cpp-release.yml +++ b/eng/pipelines/templates/stages/archetype-cpp-release.yml @@ -163,7 +163,7 @@ stages: - ci-configs/packages-preview.json - ${{ if ne(artifact.skipPublishVcpkg, 'true') }}: - ${{ if ne(variables['PublishToVcpkgPartnerFeed'], 'true') }}: + - ${{ if ne(variables['PublishToVcpkgPartnerFeed'], 'true') }}: - job: PublishVcpkg displayName: Publish to vcpkg condition: and(succeeded(), ne(variables['Skip.PublishVcpkg'], 'true'), ne(variables['PublishToVcpkgPartnerFeed'], 'true')) @@ -313,7 +313,7 @@ stages: condition: and(succeeded(), eq(variables['PublishToVcpkg'], 'true')) displayName: Comment notification to PR - ${{ else }}: + - ${{ else }}: - job: PublishVcpkgPartnerFeed displayName: Publish to vcpkg-partner-feed condition: and(succeeded(), eq(variables['PublishToVcpkgPartnerFeed'], 'true')) From 5b734fe0049a1faca736994171bf3606aed140ff Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Fri, 16 Oct 2026 05:43:10 -0700 Subject: [PATCH 22/48] Try going via params --- .../templates/stages/archetype-cpp-release.yml | 11 ++++++----- .../templates/stages/archetype-sdk-client.yml | 1 + 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/eng/pipelines/templates/stages/archetype-cpp-release.yml b/eng/pipelines/templates/stages/archetype-cpp-release.yml index e6ad158912..03b121b8d4 100644 --- a/eng/pipelines/templates/stages/archetype-cpp-release.yml +++ b/eng/pipelines/templates/stages/archetype-cpp-release.yml @@ -11,6 +11,8 @@ parameters: TargetDocRepoOwner: MicrosoftDocs TargetDocRepoName: azure-docs-sdk-cpp + PublishToVcpkgPartnerFeed: false + stages: - ${{if and(eq(variables['Build.Reason'], 'Manual'), eq(variables['System.TeamProject'], 'internal'))}}: - ${{ each artifact in parameters.Artifacts }}: @@ -44,7 +46,7 @@ stages: - job: TagRepository displayName: "Create release tag" - condition: and(ne(variables['Skip.TagRepository'], 'true'), ne(variables['PublishToVcpkgPartnerFeed'], 'true')) + condition: and(ne(variables['Skip.TagRepository'], 'true'), not(${{ parameters.PublishToVcpkgPartnerFeed }})) dependsOn: - ReleaseGate @@ -94,7 +96,7 @@ stages: PackageName: ${{artifact.name}} SourceRootPath: $(Build.SourcesDirectory) - - ${{if and(ne(artifact.skipPublishDocGithubIo, 'true'), ne(variables['PublishToVcpkgPartnerFeed'], 'true'))}}: + - ${{if and(ne(artifact.skipPublishDocGithubIo, 'true'), not(parameters.PublishToVcpkgPartnerFeed))}}: - job: PublishDocs displayName: Publish Docs to GitHub pages condition: and(succeeded(), ne(variables['Skip.PublishDocs'], 'true'), ne(variables['Build.Repository.Name'], 'Azure/azure-sdk-for-cpp-pr')) @@ -163,10 +165,10 @@ stages: - ci-configs/packages-preview.json - ${{ if ne(artifact.skipPublishVcpkg, 'true') }}: - - ${{ if ne(variables['PublishToVcpkgPartnerFeed'], 'true') }}: + - ${{ if not(parameters.PublishToVcpkgPartnerFeed) }}: - job: PublishVcpkg displayName: Publish to vcpkg - condition: and(succeeded(), ne(variables['Skip.PublishVcpkg'], 'true'), ne(variables['PublishToVcpkgPartnerFeed'], 'true')) + condition: and(succeeded(), ne(variables['Skip.PublishVcpkg'], 'true')) # This step requires the tag step dependsOn: - TagRepository @@ -316,7 +318,6 @@ stages: - ${{ else }}: - job: PublishVcpkgPartnerFeed displayName: Publish to vcpkg-partner-feed - condition: and(succeeded(), eq(variables['PublishToVcpkgPartnerFeed'], 'true')) dependsOn: - ReleaseGate pool: diff --git a/eng/pipelines/templates/stages/archetype-sdk-client.yml b/eng/pipelines/templates/stages/archetype-sdk-client.yml index 76c51cc412..dbb7ccc3ba 100644 --- a/eng/pipelines/templates/stages/archetype-sdk-client.yml +++ b/eng/pipelines/templates/stages/archetype-sdk-client.yml @@ -223,6 +223,7 @@ extends: - LiveTest_${{ cloud.key }} Artifacts: ${{ parameters.Artifacts }} ArtifactName: packages + PublishToVcpkgPartnerFeed: ${{ eq(variables['PublishToVcpkgPartnerFeed'], 'true') }} ${{ if eq(parameters.ServiceDirectory, 'template') }}: TestPipeline: true From cb44aef046907ef999ed81e09355785c1ce5df99 Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Fri, 16 Oct 2026 05:47:24 -0700 Subject: [PATCH 23/48] different condition --- eng/pipelines/templates/stages/archetype-sdk-client.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/eng/pipelines/templates/stages/archetype-sdk-client.yml b/eng/pipelines/templates/stages/archetype-sdk-client.yml index dbb7ccc3ba..f4302df94d 100644 --- a/eng/pipelines/templates/stages/archetype-sdk-client.yml +++ b/eng/pipelines/templates/stages/archetype-sdk-client.yml @@ -223,7 +223,8 @@ extends: - LiveTest_${{ cloud.key }} Artifacts: ${{ parameters.Artifacts }} ArtifactName: packages - PublishToVcpkgPartnerFeed: ${{ eq(variables['PublishToVcpkgPartnerFeed'], 'true') }} + ${{ eq(variables['PublishToVcpkgPartnerFeed'], 'true') }}: + PublishToVcpkgPartnerFeed: true ${{ if eq(parameters.ServiceDirectory, 'template') }}: TestPipeline: true From b6c1b4fa81efd241d446a97c91f2de8ce8cb7042 Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Fri, 16 Oct 2026 06:10:32 -0700 Subject: [PATCH 24/48] Go via powershell --- eng/pipelines/templates/stages/archetype-sdk-client.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/eng/pipelines/templates/stages/archetype-sdk-client.yml b/eng/pipelines/templates/stages/archetype-sdk-client.yml index f4302df94d..e0f37d4f40 100644 --- a/eng/pipelines/templates/stages/archetype-sdk-client.yml +++ b/eng/pipelines/templates/stages/archetype-sdk-client.yml @@ -206,6 +206,12 @@ extends: EnvVars: ${{ parameters.EnvVars }} - ${{ if and(eq(variables['System.TeamProject'], 'internal'), not(endsWith(variables['Build.DefinitionName'], ' - tests'))) }}: + - pwsh: | + if ('$(PublishToVcpkgPartnerFeed)' -eq 'true') { + Write-Host "##vso[task.setvariable variable=PublishToVcpkgPartnerFeed]true" + } else { + Write-Host "##vso[task.setvariable variable=PublishToVcpkgPartnerFeed]false" + } - template: archetype-cpp-release.yml@self parameters: ServiceDirectory: ${{ parameters.ServiceDirectory }} From fa4a0a1ab6b8593b9045c5913ab45f7b9a350122 Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Fri, 16 Oct 2026 06:15:51 -0700 Subject: [PATCH 25/48] Different way --- eng/pipelines/templates/stages/archetype-sdk-client.yml | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/eng/pipelines/templates/stages/archetype-sdk-client.yml b/eng/pipelines/templates/stages/archetype-sdk-client.yml index e0f37d4f40..dbb7ccc3ba 100644 --- a/eng/pipelines/templates/stages/archetype-sdk-client.yml +++ b/eng/pipelines/templates/stages/archetype-sdk-client.yml @@ -206,12 +206,6 @@ extends: EnvVars: ${{ parameters.EnvVars }} - ${{ if and(eq(variables['System.TeamProject'], 'internal'), not(endsWith(variables['Build.DefinitionName'], ' - tests'))) }}: - - pwsh: | - if ('$(PublishToVcpkgPartnerFeed)' -eq 'true') { - Write-Host "##vso[task.setvariable variable=PublishToVcpkgPartnerFeed]true" - } else { - Write-Host "##vso[task.setvariable variable=PublishToVcpkgPartnerFeed]false" - } - template: archetype-cpp-release.yml@self parameters: ServiceDirectory: ${{ parameters.ServiceDirectory }} @@ -229,8 +223,7 @@ extends: - LiveTest_${{ cloud.key }} Artifacts: ${{ parameters.Artifacts }} ArtifactName: packages - ${{ eq(variables['PublishToVcpkgPartnerFeed'], 'true') }}: - PublishToVcpkgPartnerFeed: true + PublishToVcpkgPartnerFeed: ${{ eq(variables['PublishToVcpkgPartnerFeed'], 'true') }} ${{ if eq(parameters.ServiceDirectory, 'template') }}: TestPipeline: true From 38e9a9e7be5a9f4272d21c14dd82b0284badec7f Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Fri, 16 Oct 2026 07:09:28 -0700 Subject: [PATCH 26/48] Login to GutHub --- .../stages/archetype-cpp-release.yml | 102 +++++++++--------- .../templates/stages/archetype-sdk-client.yml | 2 +- 2 files changed, 55 insertions(+), 49 deletions(-) diff --git a/eng/pipelines/templates/stages/archetype-cpp-release.yml b/eng/pipelines/templates/stages/archetype-cpp-release.yml index 03b121b8d4..088ee8c987 100644 --- a/eng/pipelines/templates/stages/archetype-cpp-release.yml +++ b/eng/pipelines/templates/stages/archetype-cpp-release.yml @@ -44,57 +44,58 @@ stages: steps: - pwsh: Write-Host 'Release gate succeeded. Dependent jobs will run.' - - job: TagRepository - displayName: "Create release tag" - condition: and(ne(variables['Skip.TagRepository'], 'true'), not(${{ parameters.PublishToVcpkgPartnerFeed }})) - dependsOn: - - ReleaseGate + - ${{ if not(parameters.PublishToVcpkgPartnerFeed) }}: + - job: TagRepository + displayName: "Create release tag" + condition: ne(variables['Skip.TagRepository'], 'true') + dependsOn: + - ReleaseGate - pool: - name: $(WINDOWSPOOL) - image: $(WINDOWSVMIMAGE) - os: windows + pool: + name: $(WINDOWSPOOL) + image: $(WINDOWSVMIMAGE) + os: windows - templateContext: - inputs: - - input: pipelineArtifact - artifactName: packages - targetPath: $(Pipeline.Workspace)/packages - - steps: - - checkout: self - - template: /eng/common/pipelines/templates/steps/retain-run.yml - - template: /eng/common/pipelines/templates/steps/set-test-pipeline-version.yml - parameters: - PackageName: ${{ artifact.Name }} - ServiceDirectory: ${{ parameters.ServiceDirectory }} - TestPipeline: ${{ parameters.TestPipeline }} - - pwsh: Get-ChildItem -Recurse $(Pipeline.Workspace)/packages/${{artifact.Name}} - displayName: Output Visible Artifacts - - task: Powershell@2 + templateContext: inputs: - filePath: $(Build.SourcesDirectory)/eng/common/scripts/Verify-ChangeLog.ps1 - arguments: > - -ChangeLogLocation $(Pipeline.Workspace)/packages/${{artifact.Name}}/CHANGELOG.md - -VersionString (Get-Content $(Pipeline.Workspace)/packages/${{artifact.Name}}/package-info.json | ConvertFrom-Json).version - -ForRelease $true - pwsh: true - displayName: Verify CHANGELOG.md contents - - template: /eng/common/pipelines/templates/steps/create-tags-and-git-release.yml - parameters: - ArtifactLocation: "$(Pipeline.Workspace)/packages/${{artifact.Name}}" - PackageRepository: CPP - ReleaseSha: $(Build.SourceVersion) - RepoId: Azure/azure-sdk-for-cpp - - template: /eng/common/pipelines/templates/steps/create-apireview.yml - parameters: - ArtifactPath: $(Pipeline.Workspace)/packages - Artifacts: ${{parameters.Artifacts}} - ConfigFileDir: $(Pipeline.Workspace)/packages/PackageInfo - MarkPackageAsShipped: true - ArtifactName: ${{parameters.ArtifactName}} - PackageName: ${{artifact.name}} - SourceRootPath: $(Build.SourcesDirectory) + - input: pipelineArtifact + artifactName: packages + targetPath: $(Pipeline.Workspace)/packages + + steps: + - checkout: self + - template: /eng/common/pipelines/templates/steps/retain-run.yml + - template: /eng/common/pipelines/templates/steps/set-test-pipeline-version.yml + parameters: + PackageName: ${{ artifact.Name }} + ServiceDirectory: ${{ parameters.ServiceDirectory }} + TestPipeline: ${{ parameters.TestPipeline }} + - pwsh: Get-ChildItem -Recurse $(Pipeline.Workspace)/packages/${{artifact.Name}} + displayName: Output Visible Artifacts + - task: Powershell@2 + inputs: + filePath: $(Build.SourcesDirectory)/eng/common/scripts/Verify-ChangeLog.ps1 + arguments: > + -ChangeLogLocation $(Pipeline.Workspace)/packages/${{artifact.Name}}/CHANGELOG.md + -VersionString (Get-Content $(Pipeline.Workspace)/packages/${{artifact.Name}}/package-info.json | ConvertFrom-Json).version + -ForRelease $true + pwsh: true + displayName: Verify CHANGELOG.md contents + - template: /eng/common/pipelines/templates/steps/create-tags-and-git-release.yml + parameters: + ArtifactLocation: "$(Pipeline.Workspace)/packages/${{artifact.Name}}" + PackageRepository: CPP + ReleaseSha: $(Build.SourceVersion) + RepoId: Azure/azure-sdk-for-cpp + - template: /eng/common/pipelines/templates/steps/create-apireview.yml + parameters: + ArtifactPath: $(Pipeline.Workspace)/packages + Artifacts: ${{parameters.Artifacts}} + ConfigFileDir: $(Pipeline.Workspace)/packages/PackageInfo + MarkPackageAsShipped: true + ArtifactName: ${{parameters.ArtifactName}} + PackageName: ${{artifact.name}} + SourceRootPath: $(Build.SourcesDirectory) - ${{if and(ne(artifact.skipPublishDocGithubIo, 'true'), not(parameters.PublishToVcpkgPartnerFeed))}}: - job: PublishDocs @@ -340,6 +341,11 @@ stages: Write-Host "##vso[task.setvariable variable=PackageVersion]$version" displayName: Set PackageVersion variable + - template: /eng/common/pipelines/templates/steps/login-to-github.yml + parameters: + TokenOwners: + - Azure + # There are potential race conditions if this script runs # in parallel against the same branch name. Release only # one package at a time. diff --git a/eng/pipelines/templates/stages/archetype-sdk-client.yml b/eng/pipelines/templates/stages/archetype-sdk-client.yml index dbb7ccc3ba..5733040a49 100644 --- a/eng/pipelines/templates/stages/archetype-sdk-client.yml +++ b/eng/pipelines/templates/stages/archetype-sdk-client.yml @@ -223,7 +223,7 @@ extends: - LiveTest_${{ cloud.key }} Artifacts: ${{ parameters.Artifacts }} ArtifactName: packages - PublishToVcpkgPartnerFeed: ${{ eq(variables['PublishToVcpkgPartnerFeed'], 'true') }} + PublishToVcpkgPartnerFeed: ${{ or(eq(variables['PublishToVcpkgPartnerFeed'], 'true'), eq(variables['PublishToVcpkgPartnerFeed'], true)) }} ${{ if eq(parameters.ServiceDirectory, 'template') }}: TestPipeline: true From 3456c1584ad48071507db5073384ce8241897f1c Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Fri, 16 Oct 2026 07:21:42 -0700 Subject: [PATCH 27/48] Hardcode false --- eng/pipelines/templates/stages/archetype-sdk-client.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/pipelines/templates/stages/archetype-sdk-client.yml b/eng/pipelines/templates/stages/archetype-sdk-client.yml index 5733040a49..ee6a7683e1 100644 --- a/eng/pipelines/templates/stages/archetype-sdk-client.yml +++ b/eng/pipelines/templates/stages/archetype-sdk-client.yml @@ -223,7 +223,7 @@ extends: - LiveTest_${{ cloud.key }} Artifacts: ${{ parameters.Artifacts }} ArtifactName: packages - PublishToVcpkgPartnerFeed: ${{ or(eq(variables['PublishToVcpkgPartnerFeed'], 'true'), eq(variables['PublishToVcpkgPartnerFeed'], true)) }} + PublishToVcpkgPartnerFeed: false ${{ if eq(parameters.ServiceDirectory, 'template') }}: TestPipeline: true From 2d38a695dcf0c0e92302cc91d07ae2de868b66db Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Fri, 16 Oct 2026 07:25:26 -0700 Subject: [PATCH 28/48] Drop else --- eng/pipelines/templates/stages/archetype-cpp-release.yml | 2 +- eng/pipelines/templates/stages/archetype-sdk-client.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/eng/pipelines/templates/stages/archetype-cpp-release.yml b/eng/pipelines/templates/stages/archetype-cpp-release.yml index 088ee8c987..6951b8e87d 100644 --- a/eng/pipelines/templates/stages/archetype-cpp-release.yml +++ b/eng/pipelines/templates/stages/archetype-cpp-release.yml @@ -316,7 +316,7 @@ stages: condition: and(succeeded(), eq(variables['PublishToVcpkg'], 'true')) displayName: Comment notification to PR - - ${{ else }}: + - ${{ if parameters.PublishToVcpkgPartnerFeed }}: - job: PublishVcpkgPartnerFeed displayName: Publish to vcpkg-partner-feed dependsOn: diff --git a/eng/pipelines/templates/stages/archetype-sdk-client.yml b/eng/pipelines/templates/stages/archetype-sdk-client.yml index ee6a7683e1..5733040a49 100644 --- a/eng/pipelines/templates/stages/archetype-sdk-client.yml +++ b/eng/pipelines/templates/stages/archetype-sdk-client.yml @@ -223,7 +223,7 @@ extends: - LiveTest_${{ cloud.key }} Artifacts: ${{ parameters.Artifacts }} ArtifactName: packages - PublishToVcpkgPartnerFeed: false + PublishToVcpkgPartnerFeed: ${{ or(eq(variables['PublishToVcpkgPartnerFeed'], 'true'), eq(variables['PublishToVcpkgPartnerFeed'], true)) }} ${{ if eq(parameters.ServiceDirectory, 'template') }}: TestPipeline: true From 36f74f4e3b815fb3a246367ab8bb806943a5df4c Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Fri, 16 Oct 2026 07:34:25 -0700 Subject: [PATCH 29/48] Handle as strings --- eng/pipelines/templates/stages/archetype-cpp-release.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/eng/pipelines/templates/stages/archetype-cpp-release.yml b/eng/pipelines/templates/stages/archetype-cpp-release.yml index 6951b8e87d..41549df872 100644 --- a/eng/pipelines/templates/stages/archetype-cpp-release.yml +++ b/eng/pipelines/templates/stages/archetype-cpp-release.yml @@ -44,7 +44,7 @@ stages: steps: - pwsh: Write-Host 'Release gate succeeded. Dependent jobs will run.' - - ${{ if not(parameters.PublishToVcpkgPartnerFeed) }}: + - ${{ if ne(parameters.PublishToVcpkgPartnerFeed, 'true') }}: - job: TagRepository displayName: "Create release tag" condition: ne(variables['Skip.TagRepository'], 'true') @@ -97,7 +97,7 @@ stages: PackageName: ${{artifact.name}} SourceRootPath: $(Build.SourcesDirectory) - - ${{if and(ne(artifact.skipPublishDocGithubIo, 'true'), not(parameters.PublishToVcpkgPartnerFeed))}}: + - ${{if and(ne(artifact.skipPublishDocGithubIo, 'true'), ne(parameters.PublishToVcpkgPartnerFeed, 'true'))}}: - job: PublishDocs displayName: Publish Docs to GitHub pages condition: and(succeeded(), ne(variables['Skip.PublishDocs'], 'true'), ne(variables['Build.Repository.Name'], 'Azure/azure-sdk-for-cpp-pr')) @@ -166,7 +166,7 @@ stages: - ci-configs/packages-preview.json - ${{ if ne(artifact.skipPublishVcpkg, 'true') }}: - - ${{ if not(parameters.PublishToVcpkgPartnerFeed) }}: + - ${{ if ne(parameters.PublishToVcpkgPartnerFeed, 'true') }}: - job: PublishVcpkg displayName: Publish to vcpkg condition: and(succeeded(), ne(variables['Skip.PublishVcpkg'], 'true')) @@ -316,7 +316,7 @@ stages: condition: and(succeeded(), eq(variables['PublishToVcpkg'], 'true')) displayName: Comment notification to PR - - ${{ if parameters.PublishToVcpkgPartnerFeed }}: + - ${{ else }}: - job: PublishVcpkgPartnerFeed displayName: Publish to vcpkg-partner-feed dependsOn: From 39bdc02c5a31210271bf593394977c5e9b9b23b5 Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Fri, 16 Oct 2026 07:55:35 -0700 Subject: [PATCH 30/48] Only evaulatee at run-time --- .../stages/archetype-cpp-release.yml | 526 +++++++++--------- .../templates/stages/archetype-sdk-client.yml | 1 - 2 files changed, 261 insertions(+), 266 deletions(-) diff --git a/eng/pipelines/templates/stages/archetype-cpp-release.yml b/eng/pipelines/templates/stages/archetype-cpp-release.yml index 41549df872..74aa021fbc 100644 --- a/eng/pipelines/templates/stages/archetype-cpp-release.yml +++ b/eng/pipelines/templates/stages/archetype-cpp-release.yml @@ -11,8 +11,6 @@ parameters: TargetDocRepoOwner: MicrosoftDocs TargetDocRepoName: azure-docs-sdk-cpp - PublishToVcpkgPartnerFeed: false - stages: - ${{if and(eq(variables['Build.Reason'], 'Manual'), eq(variables['System.TeamProject'], 'internal'))}}: - ${{ each artifact in parameters.Artifacts }}: @@ -44,63 +42,62 @@ stages: steps: - pwsh: Write-Host 'Release gate succeeded. Dependent jobs will run.' - - ${{ if ne(parameters.PublishToVcpkgPartnerFeed, 'true') }}: - - job: TagRepository - displayName: "Create release tag" - condition: ne(variables['Skip.TagRepository'], 'true') - dependsOn: - - ReleaseGate + - job: TagRepository + displayName: "Create release tag" + condition: and(ne(variables['Skip.TagRepository'], 'true'), ne(variables['PublishToVcpkgPartnerFeed'], 'true')) + dependsOn: + - ReleaseGate - pool: - name: $(WINDOWSPOOL) - image: $(WINDOWSVMIMAGE) - os: windows + pool: + name: $(WINDOWSPOOL) + image: $(WINDOWSVMIMAGE) + os: windows - templateContext: + templateContext: + inputs: + - input: pipelineArtifact + artifactName: packages + targetPath: $(Pipeline.Workspace)/packages + + steps: + - checkout: self + - template: /eng/common/pipelines/templates/steps/retain-run.yml + - template: /eng/common/pipelines/templates/steps/set-test-pipeline-version.yml + parameters: + PackageName: ${{ artifact.Name }} + ServiceDirectory: ${{ parameters.ServiceDirectory }} + TestPipeline: ${{ parameters.TestPipeline }} + - pwsh: Get-ChildItem -Recurse $(Pipeline.Workspace)/packages/${{artifact.Name}} + displayName: Output Visible Artifacts + - task: Powershell@2 inputs: - - input: pipelineArtifact - artifactName: packages - targetPath: $(Pipeline.Workspace)/packages - - steps: - - checkout: self - - template: /eng/common/pipelines/templates/steps/retain-run.yml - - template: /eng/common/pipelines/templates/steps/set-test-pipeline-version.yml - parameters: - PackageName: ${{ artifact.Name }} - ServiceDirectory: ${{ parameters.ServiceDirectory }} - TestPipeline: ${{ parameters.TestPipeline }} - - pwsh: Get-ChildItem -Recurse $(Pipeline.Workspace)/packages/${{artifact.Name}} - displayName: Output Visible Artifacts - - task: Powershell@2 - inputs: - filePath: $(Build.SourcesDirectory)/eng/common/scripts/Verify-ChangeLog.ps1 - arguments: > - -ChangeLogLocation $(Pipeline.Workspace)/packages/${{artifact.Name}}/CHANGELOG.md - -VersionString (Get-Content $(Pipeline.Workspace)/packages/${{artifact.Name}}/package-info.json | ConvertFrom-Json).version - -ForRelease $true - pwsh: true - displayName: Verify CHANGELOG.md contents - - template: /eng/common/pipelines/templates/steps/create-tags-and-git-release.yml - parameters: - ArtifactLocation: "$(Pipeline.Workspace)/packages/${{artifact.Name}}" - PackageRepository: CPP - ReleaseSha: $(Build.SourceVersion) - RepoId: Azure/azure-sdk-for-cpp - - template: /eng/common/pipelines/templates/steps/create-apireview.yml - parameters: - ArtifactPath: $(Pipeline.Workspace)/packages - Artifacts: ${{parameters.Artifacts}} - ConfigFileDir: $(Pipeline.Workspace)/packages/PackageInfo - MarkPackageAsShipped: true - ArtifactName: ${{parameters.ArtifactName}} - PackageName: ${{artifact.name}} - SourceRootPath: $(Build.SourcesDirectory) - - - ${{if and(ne(artifact.skipPublishDocGithubIo, 'true'), ne(parameters.PublishToVcpkgPartnerFeed, 'true'))}}: + filePath: $(Build.SourcesDirectory)/eng/common/scripts/Verify-ChangeLog.ps1 + arguments: > + -ChangeLogLocation $(Pipeline.Workspace)/packages/${{artifact.Name}}/CHANGELOG.md + -VersionString (Get-Content $(Pipeline.Workspace)/packages/${{artifact.Name}}/package-info.json | ConvertFrom-Json).version + -ForRelease $true + pwsh: true + displayName: Verify CHANGELOG.md contents + - template: /eng/common/pipelines/templates/steps/create-tags-and-git-release.yml + parameters: + ArtifactLocation: "$(Pipeline.Workspace)/packages/${{artifact.Name}}" + PackageRepository: CPP + ReleaseSha: $(Build.SourceVersion) + RepoId: Azure/azure-sdk-for-cpp + - template: /eng/common/pipelines/templates/steps/create-apireview.yml + parameters: + ArtifactPath: $(Pipeline.Workspace)/packages + Artifacts: ${{parameters.Artifacts}} + ConfigFileDir: $(Pipeline.Workspace)/packages/PackageInfo + MarkPackageAsShipped: true + ArtifactName: ${{parameters.ArtifactName}} + PackageName: ${{artifact.name}} + SourceRootPath: $(Build.SourcesDirectory) + + - ${{if ne(artifact.skipPublishDocGithubIo, 'true')}}: - job: PublishDocs displayName: Publish Docs to GitHub pages - condition: and(succeeded(), ne(variables['Skip.PublishDocs'], 'true'), ne(variables['Build.Repository.Name'], 'Azure/azure-sdk-for-cpp-pr')) + condition: and(succeeded(), ne(variables['Skip.PublishDocs'], 'true'), ne(variables['Build.Repository.Name'], 'Azure/azure-sdk-for-cpp-pr'), ne(variables['PublishToVcpkgPartnerFeed'], 'true')) # Release tag must exist for link substitution to work dependsOn: - TagRepository @@ -133,7 +130,7 @@ stages: - job: PublishDocsMs displayName: Docs.MS Release - condition: and(succeeded(), ne(variables['Skip.PublishDocs'], 'true'), ne(variables['Build.Repository.Name'], 'Azure/azure-sdk-for-cpp-pr')) + condition: and(succeeded(), ne(variables['Skip.PublishDocs'], 'true'), ne(variables['Build.Repository.Name'], 'Azure/azure-sdk-for-cpp-pr'), ne(variables['PublishToVcpkgPartnerFeed'], 'true')) # C++ learn docs are generated from hosted doxygen docs so this # can only run after the static docs have been published. @@ -166,217 +163,216 @@ stages: - ci-configs/packages-preview.json - ${{ if ne(artifact.skipPublishVcpkg, 'true') }}: - - ${{ if ne(parameters.PublishToVcpkgPartnerFeed, 'true') }}: - - job: PublishVcpkg - displayName: Publish to vcpkg - condition: and(succeeded(), ne(variables['Skip.PublishVcpkg'], 'true')) - # This step requires the tag step - dependsOn: - - TagRepository - - ReleaseGate - pool: - name: $(WINDOWSPOOL) - image: $(WINDOWSVMIMAGE) - os: windows - - variables: - VcpkgPrRepoOwner: Microsoft - VcpkgPrRepoName: vcpkg - - templateContext: - inputs: - - input: pipelineArtifact - artifactName: packages - targetPath: $(Pipeline.Workspace)/packages - - steps: - - checkout: self - - pwsh: | - $branchName = "azure-sdk-for-cpp-${{ artifact.Name }}-$(Build.BuildId)" - if ('$(VcpkgForkBranchName)') { - Write-Host "Using queue time branch name" - $branchName = '$(VcpkgForkBranchName)' - } - Write-Host "##vso[task.setvariable variable=PrBranchName]$branchName" - displayName: Set fork branch name - - - pwsh: | - $packageSpec = Get-Content -Raw -Path "$(Pipeline.Workspace)/packages/${{artifact.Name}}/package-info.json" | ConvertFrom-Json - $version = $packageSpec.version - Write-Host "##vso[task.setvariable variable=PackageVersion]$version" - displayName: Set PackageVersion variable - - - pwsh: | - $title = "[${{ artifact.VcpkgPortName }}] publish version $(PackageVersion)" - - if ('$(VcpkgPRTitle)') { - Write-Host "Using queue time PR title" - $title = '$(VcpkgPRTitle)' - } - Write-Host "##vso[task.setvariable variable=PrTitle]$title" - displayName: Set PR title - - # There are potential race conditions if this script runs - # in parallel against the same branch name. Release only - # one package at a time. - # Clone main vcpkg repo - - template: /eng/pipelines/templates/steps/vcpkg-clone.yml - parameters: - RepoOwner: azure-sdk - PRBranchName: $(PrBranchName) - - # Clone Vcpkg Betas - - template: /eng/pipelines/templates/steps/vcpkg-clone.yml - parameters: - RepoOwner: Azure - RepoName: azure-sdk-vcpkg-betas - SetVcpkgRoot: false - - - template: /eng/pipelines/templates/steps/vcpkg-publish.yml - parameters: - ArtifactName: ${{ artifact.Name }} - VcpkgPortName: ${{ artifact.VcpkgPortName }} - - - - template: /eng/common/pipelines/templates/steps/set-default-branch.yml - parameters: - WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-vcpkg-betas - - # Push changes to vcpkg betas - - template: /eng/common/pipelines/templates/steps/git-push-changes.yml - parameters: - WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-vcpkg-betas - TargetRepoName: azure-sdk-vcpkg-betas - BaseRepoOwner: Azure - CommitMsg: Update vcpkg-configuration.json - BaseRepoBranch: $(DefaultBranch) - - # Set $(HasChanges) to $(PublishToVcpkg) so that - # create-pull-request.yml creates or does not create a PR - # based on the deicision of the step that determines - # whether to publish to vcpkg. - - pwsh: Write-Host "##vso[task.setvariable variable=HasChanges]$(PublishToVcpkg)" - displayName: Set $(HasChanges) to $(PublishToVcpkg) for create-pull-request.yml - - - template: /eng/common/pipelines/templates/steps/set-default-branch.yml - parameters: - WorkingDirectory: $(Pipeline.Workspace)/vcpkg - - # SkipCheckingForChanges is true to skip the commit step - # (which is already done by Update-VcpkgPort.ps1) - - template: /eng/common/pipelines/templates/steps/create-pull-request.yml - parameters: - RepoOwner: ${{ variables.VcpkgPrRepoOwner }} - RepoName: ${{ variables.VcpkgPrRepoName }} - WorkingDirectory: $(Pipeline.Workspace)/vcpkg - PrBranchName: $(PrBranchName) - PRTitle: $(PrTitle) - PRBody: Update vcpkg ports for Azure SDK release. This release may contain multiple ports. - SkipCheckingForChanges: true - BaseBranchName: $(DefaultBranch) - OpenAsDraft: ${{ parameters.TestPipeline }} - CloseAfterOpenForTesting: '${{ parameters.TestPipeline }}' - - - task: AzureCLI@2 - displayName: Authenticate to OpenSource API - condition: and(succeeded(), eq(variables['PublishToVcpkg'], 'true')) - inputs: - azureSubscription: opensource-api-connection - scriptType: pscore - scriptLocation: inlineScript - inlineScript: | - $jwt_accessToken = az account get-access-token --resource "api://2789159d-8d8b-4d13-b90b-ca29c1707afd" --query "accessToken" --output tsv - Write-Host "##vso[task.setvariable variable=opensource-api-token;isSecret=true]$jwt_accessToken" - - - template: /eng/common/pipelines/templates/steps/login-to-github.yml - parameters: - TokenOwners: - - $(VcpkgPrRepoOwner) - - # Workaround: -Fallback uses names from CODEOWNERS who - # should be notified about the release in the event of a - # failure to resolve the appropriate aliases. - - pwsh: | - $notifyUsers = ./eng/scripts/Get-TriggeringUserGitHubAlias.ps1 ` - -EmailAddress "$($env:BUILD_REQUESTEDFOREMAIL)" ` - -OpenApiToken "$(opensource-api-token)" ` - -Fallback '@rickwinter @antkmsft @LarryOsterman' - - $prComment = "Adding ${{ artifact.Name }} to release" - if ($notifyUsers) { - $prComment += "`n`ncc: $notifyUsers" - } - - ./eng/common/scripts/Add-IssueComment.ps1 ` - -AuthToken "$(GH_TOKEN)" ` - -RepoOwner $(VcpkgPrRepoOwner) ` - -RepoName $(VcpkgPrRepoName) ` - -IssueNumber "$(Submitted.PullRequest.Number)" ` - -Comment $prComment - condition: and(succeeded(), eq(variables['PublishToVcpkg'], 'true')) - displayName: Comment notification to PR - - - ${{ else }}: - - job: PublishVcpkgPartnerFeed - displayName: Publish to vcpkg-partner-feed - dependsOn: - - ReleaseGate - pool: - name: $(WINDOWSPOOL) - image: $(WINDOWSVMIMAGE) - os: windows - - templateContext: + - job: PublishVcpkg + displayName: Publish to vcpkg + condition: and(succeeded(), ne(variables['Skip.PublishVcpkg'], 'true'), ne(variables['PublishToVcpkgPartnerFeed'], 'true')) + # This step requires the tag step + dependsOn: + - TagRepository + - ReleaseGate + pool: + name: $(WINDOWSPOOL) + image: $(WINDOWSVMIMAGE) + os: windows + + variables: + VcpkgPrRepoOwner: Microsoft + VcpkgPrRepoName: vcpkg + + templateContext: + inputs: + - input: pipelineArtifact + artifactName: packages + targetPath: $(Pipeline.Workspace)/packages + + steps: + - checkout: self + - pwsh: | + $branchName = "azure-sdk-for-cpp-${{ artifact.Name }}-$(Build.BuildId)" + if ('$(VcpkgForkBranchName)') { + Write-Host "Using queue time branch name" + $branchName = '$(VcpkgForkBranchName)' + } + Write-Host "##vso[task.setvariable variable=PrBranchName]$branchName" + displayName: Set fork branch name + + - pwsh: | + $packageSpec = Get-Content -Raw -Path "$(Pipeline.Workspace)/packages/${{artifact.Name}}/package-info.json" | ConvertFrom-Json + $version = $packageSpec.version + Write-Host "##vso[task.setvariable variable=PackageVersion]$version" + displayName: Set PackageVersion variable + + - pwsh: | + $title = "[${{ artifact.VcpkgPortName }}] publish version $(PackageVersion)" + + if ('$(VcpkgPRTitle)') { + Write-Host "Using queue time PR title" + $title = '$(VcpkgPRTitle)' + } + Write-Host "##vso[task.setvariable variable=PrTitle]$title" + displayName: Set PR title + + # There are potential race conditions if this script runs + # in parallel against the same branch name. Release only + # one package at a time. + # Clone main vcpkg repo + - template: /eng/pipelines/templates/steps/vcpkg-clone.yml + parameters: + RepoOwner: azure-sdk + PRBranchName: $(PrBranchName) + + # Clone Vcpkg Betas + - template: /eng/pipelines/templates/steps/vcpkg-clone.yml + parameters: + RepoOwner: Azure + RepoName: azure-sdk-vcpkg-betas + SetVcpkgRoot: false + + - template: /eng/pipelines/templates/steps/vcpkg-publish.yml + parameters: + ArtifactName: ${{ artifact.Name }} + VcpkgPortName: ${{ artifact.VcpkgPortName }} + + + - template: /eng/common/pipelines/templates/steps/set-default-branch.yml + parameters: + WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-vcpkg-betas + + # Push changes to vcpkg betas + - template: /eng/common/pipelines/templates/steps/git-push-changes.yml + parameters: + WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-vcpkg-betas + TargetRepoName: azure-sdk-vcpkg-betas + BaseRepoOwner: Azure + CommitMsg: Update vcpkg-configuration.json + BaseRepoBranch: $(DefaultBranch) + + # Set $(HasChanges) to $(PublishToVcpkg) so that + # create-pull-request.yml creates or does not create a PR + # based on the deicision of the step that determines + # whether to publish to vcpkg. + - pwsh: Write-Host "##vso[task.setvariable variable=HasChanges]$(PublishToVcpkg)" + displayName: Set $(HasChanges) to $(PublishToVcpkg) for create-pull-request.yml + + - template: /eng/common/pipelines/templates/steps/set-default-branch.yml + parameters: + WorkingDirectory: $(Pipeline.Workspace)/vcpkg + + # SkipCheckingForChanges is true to skip the commit step + # (which is already done by Update-VcpkgPort.ps1) + - template: /eng/common/pipelines/templates/steps/create-pull-request.yml + parameters: + RepoOwner: ${{ variables.VcpkgPrRepoOwner }} + RepoName: ${{ variables.VcpkgPrRepoName }} + WorkingDirectory: $(Pipeline.Workspace)/vcpkg + PrBranchName: $(PrBranchName) + PRTitle: $(PrTitle) + PRBody: Update vcpkg ports for Azure SDK release. This release may contain multiple ports. + SkipCheckingForChanges: true + BaseBranchName: $(DefaultBranch) + OpenAsDraft: ${{ parameters.TestPipeline }} + CloseAfterOpenForTesting: '${{ parameters.TestPipeline }}' + + - task: AzureCLI@2 + displayName: Authenticate to OpenSource API + condition: and(succeeded(), eq(variables['PublishToVcpkg'], 'true')) inputs: - - input: pipelineArtifact - artifactName: packages - targetPath: $(Pipeline.Workspace)/packages - - steps: - - checkout: self - - - pwsh: | - $packageSpec = Get-Content -Raw -Path "$(Pipeline.Workspace)/packages/${{artifact.Name}}/package-info.json" | ConvertFrom-Json - $version = $packageSpec.version - Write-Host "##vso[task.setvariable variable=PackageVersion]$version" - displayName: Set PackageVersion variable - - - template: /eng/common/pipelines/templates/steps/login-to-github.yml - parameters: - TokenOwners: - - Azure - - # There are potential race conditions if this script runs - # in parallel against the same branch name. Release only - # one package at a time. - - # Clone Vcpkg partner feed - - template: /eng/pipelines/templates/steps/vcpkg-clone.yml - parameters: - RepoOwner: Azure - RepoName: azure-sdk-vcpkg-partner-feed - SetVcpkgRoot: false - - - template: /eng/pipelines/templates/steps/vcpkg-publish.yml - parameters: - ArtifactName: ${{ artifact.Name }} - VcpkgPortName: ${{ artifact.VcpkgPortName }} - UpdateVcpkgBeta: false - PartnerRelease: true - PartnerReleaseRef: $(Build.SourceVersion) - - - template: /eng/common/pipelines/templates/steps/set-default-branch.yml - parameters: - WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-vcpkg-partner-feed - - # Push changes to vcpkg partner feed - - template: /eng/common/pipelines/templates/steps/git-push-changes.yml - parameters: - WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-vcpkg-partner-feed - TargetRepoName: azure-sdk-vcpkg-partner-feed - BaseRepoOwner: Azure - CommitMsg: Update vcpkg-configuration.json - BaseRepoBranch: $(DefaultBranch) + azureSubscription: opensource-api-connection + scriptType: pscore + scriptLocation: inlineScript + inlineScript: | + $jwt_accessToken = az account get-access-token --resource "api://2789159d-8d8b-4d13-b90b-ca29c1707afd" --query "accessToken" --output tsv + Write-Host "##vso[task.setvariable variable=opensource-api-token;isSecret=true]$jwt_accessToken" + + - template: /eng/common/pipelines/templates/steps/login-to-github.yml + parameters: + TokenOwners: + - $(VcpkgPrRepoOwner) + + # Workaround: -Fallback uses names from CODEOWNERS who + # should be notified about the release in the event of a + # failure to resolve the appropriate aliases. + - pwsh: | + $notifyUsers = ./eng/scripts/Get-TriggeringUserGitHubAlias.ps1 ` + -EmailAddress "$($env:BUILD_REQUESTEDFOREMAIL)" ` + -OpenApiToken "$(opensource-api-token)" ` + -Fallback '@rickwinter @antkmsft @LarryOsterman' + + $prComment = "Adding ${{ artifact.Name }} to release" + if ($notifyUsers) { + $prComment += "`n`ncc: $notifyUsers" + } + + ./eng/common/scripts/Add-IssueComment.ps1 ` + -AuthToken "$(GH_TOKEN)" ` + -RepoOwner $(VcpkgPrRepoOwner) ` + -RepoName $(VcpkgPrRepoName) ` + -IssueNumber "$(Submitted.PullRequest.Number)" ` + -Comment $prComment + condition: and(succeeded(), eq(variables['PublishToVcpkg'], 'true')) + displayName: Comment notification to PR + + - job: PublishVcpkgPartnerFeed + displayName: Publish to vcpkg-partner-feed + condition: and(succeeded(), eq(variables['PublishToVcpkgPartnerFeed'], 'true')) + dependsOn: + - ReleaseGate + pool: + name: $(WINDOWSPOOL) + image: $(WINDOWSVMIMAGE) + os: windows + + templateContext: + inputs: + - input: pipelineArtifact + artifactName: packages + targetPath: $(Pipeline.Workspace)/packages + + steps: + - checkout: self + + - pwsh: | + $packageSpec = Get-Content -Raw -Path "$(Pipeline.Workspace)/packages/${{artifact.Name}}/package-info.json" | ConvertFrom-Json + $version = $packageSpec.version + Write-Host "##vso[task.setvariable variable=PackageVersion]$version" + displayName: Set PackageVersion variable + + - template: /eng/common/pipelines/templates/steps/login-to-github.yml + parameters: + TokenOwners: + - Azure + + # There are potential race conditions if this script runs + # in parallel against the same branch name. Release only + # one package at a time. + + # Clone Vcpkg partner feed + - template: /eng/pipelines/templates/steps/vcpkg-clone.yml + parameters: + RepoOwner: Azure + RepoName: azure-sdk-vcpkg-partner-feed + SetVcpkgRoot: false + + - template: /eng/pipelines/templates/steps/vcpkg-publish.yml + parameters: + ArtifactName: ${{ artifact.Name }} + VcpkgPortName: ${{ artifact.VcpkgPortName }} + UpdateVcpkgBeta: false + PartnerRelease: true + PartnerReleaseRef: $(Build.SourceVersion) + + - template: /eng/common/pipelines/templates/steps/set-default-branch.yml + parameters: + WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-vcpkg-partner-feed + + # Push changes to vcpkg partner feed + - template: /eng/common/pipelines/templates/steps/git-push-changes.yml + parameters: + WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-vcpkg-partner-feed + TargetRepoName: azure-sdk-vcpkg-partner-feed + BaseRepoOwner: Azure + CommitMsg: Update vcpkg-configuration.json + BaseRepoBranch: $(DefaultBranch) - ${{if ne(artifact.skipUpdatePackageVersion, 'true')}}: - job: UpdatePackageVersion diff --git a/eng/pipelines/templates/stages/archetype-sdk-client.yml b/eng/pipelines/templates/stages/archetype-sdk-client.yml index 5733040a49..76c51cc412 100644 --- a/eng/pipelines/templates/stages/archetype-sdk-client.yml +++ b/eng/pipelines/templates/stages/archetype-sdk-client.yml @@ -223,7 +223,6 @@ extends: - LiveTest_${{ cloud.key }} Artifacts: ${{ parameters.Artifacts }} ArtifactName: packages - PublishToVcpkgPartnerFeed: ${{ or(eq(variables['PublishToVcpkgPartnerFeed'], 'true'), eq(variables['PublishToVcpkgPartnerFeed'], true)) }} ${{ if eq(parameters.ServiceDirectory, 'template') }}: TestPipeline: true From 615fd047df1a356e2aa0ca4bc3bfba983c18dd00 Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Fri, 16 Oct 2026 08:44:31 -0700 Subject: [PATCH 31/48] Clone main repo --- .../templates/stages/archetype-cpp-release.yml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/eng/pipelines/templates/stages/archetype-cpp-release.yml b/eng/pipelines/templates/stages/archetype-cpp-release.yml index 74aa021fbc..7730cabcb1 100644 --- a/eng/pipelines/templates/stages/archetype-cpp-release.yml +++ b/eng/pipelines/templates/stages/archetype-cpp-release.yml @@ -337,14 +337,14 @@ stages: Write-Host "##vso[task.setvariable variable=PackageVersion]$version" displayName: Set PackageVersion variable - - template: /eng/common/pipelines/templates/steps/login-to-github.yml - parameters: - TokenOwners: - - Azure - # There are potential race conditions if this script runs # in parallel against the same branch name. Release only # one package at a time. + # Clone main vcpkg repo + - template: /eng/pipelines/templates/steps/vcpkg-clone.yml + parameters: + RepoOwner: azure-sdk + PRBranchName: $(PrBranchName) # Clone Vcpkg partner feed - template: /eng/pipelines/templates/steps/vcpkg-clone.yml From 7988460ebc02eea8b7cdf1e611f175b3393af11c Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Fri, 16 Oct 2026 11:36:17 -0700 Subject: [PATCH 32/48] Target cloned repo --- eng/pipelines/templates/stages/archetype-cpp-release.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/eng/pipelines/templates/stages/archetype-cpp-release.yml b/eng/pipelines/templates/stages/archetype-cpp-release.yml index 7730cabcb1..57c3ac90de 100644 --- a/eng/pipelines/templates/stages/archetype-cpp-release.yml +++ b/eng/pipelines/templates/stages/archetype-cpp-release.yml @@ -349,7 +349,7 @@ stages: # Clone Vcpkg partner feed - template: /eng/pipelines/templates/steps/vcpkg-clone.yml parameters: - RepoOwner: Azure + RepoOwner: antkmsft RepoName: azure-sdk-vcpkg-partner-feed SetVcpkgRoot: false @@ -370,7 +370,7 @@ stages: parameters: WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-vcpkg-partner-feed TargetRepoName: azure-sdk-vcpkg-partner-feed - BaseRepoOwner: Azure + BaseRepoOwner: antkmsft CommitMsg: Update vcpkg-configuration.json BaseRepoBranch: $(DefaultBranch) From 982972998680945a26939fbcdf1db751f5f414f7 Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Fri, 16 Oct 2026 12:01:15 -0700 Subject: [PATCH 33/48] Target cloned repo --- .../stages/archetype-cpp-release.yml | 29 +++++++++++++++---- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/eng/pipelines/templates/stages/archetype-cpp-release.yml b/eng/pipelines/templates/stages/archetype-cpp-release.yml index 57c3ac90de..0059ed981b 100644 --- a/eng/pipelines/templates/stages/archetype-cpp-release.yml +++ b/eng/pipelines/templates/stages/archetype-cpp-release.yml @@ -313,7 +313,7 @@ stages: displayName: Comment notification to PR - job: PublishVcpkgPartnerFeed - displayName: Publish to vcpkg-partner-feed + displayName: Publish to partner-feed-copy condition: and(succeeded(), eq(variables['PublishToVcpkgPartnerFeed'], 'true')) dependsOn: - ReleaseGate @@ -331,12 +331,31 @@ stages: steps: - checkout: self + - pwsh: | + $branchName = "azure-sdk-for-cpp-${{ artifact.Name }}-$(Build.BuildId)" + if ('$(VcpkgForkBranchName)') { + Write-Host "Using queue time branch name" + $branchName = '$(VcpkgForkBranchName)' + } + Write-Host "##vso[task.setvariable variable=PrBranchName]$branchName" + displayName: Set fork branch name + - pwsh: | $packageSpec = Get-Content -Raw -Path "$(Pipeline.Workspace)/packages/${{artifact.Name}}/package-info.json" | ConvertFrom-Json $version = $packageSpec.version Write-Host "##vso[task.setvariable variable=PackageVersion]$version" displayName: Set PackageVersion variable + - pwsh: | + $title = "[${{ artifact.VcpkgPortName }}] publish version $(PackageVersion)" + + if ('$(VcpkgPRTitle)') { + Write-Host "Using queue time PR title" + $title = '$(VcpkgPRTitle)' + } + Write-Host "##vso[task.setvariable variable=PrTitle]$title" + displayName: Set PR title + # There are potential race conditions if this script runs # in parallel against the same branch name. Release only # one package at a time. @@ -350,7 +369,7 @@ stages: - template: /eng/pipelines/templates/steps/vcpkg-clone.yml parameters: RepoOwner: antkmsft - RepoName: azure-sdk-vcpkg-partner-feed + RepoName: azure-sdk-partner-feed-copy SetVcpkgRoot: false - template: /eng/pipelines/templates/steps/vcpkg-publish.yml @@ -363,13 +382,13 @@ stages: - template: /eng/common/pipelines/templates/steps/set-default-branch.yml parameters: - WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-vcpkg-partner-feed + WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-partner-feed-copy # Push changes to vcpkg partner feed - template: /eng/common/pipelines/templates/steps/git-push-changes.yml parameters: - WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-vcpkg-partner-feed - TargetRepoName: azure-sdk-vcpkg-partner-feed + WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-partner-feed-copy + TargetRepoName: azure-sdk-partner-feed-copy BaseRepoOwner: antkmsft CommitMsg: Update vcpkg-configuration.json BaseRepoBranch: $(DefaultBranch) From f890dc3b0b1c01c9d093e18114e4d6de622403d7 Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Fri, 16 Oct 2026 12:08:00 -0700 Subject: [PATCH 34/48] Update back --- .../templates/stages/archetype-cpp-release.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/eng/pipelines/templates/stages/archetype-cpp-release.yml b/eng/pipelines/templates/stages/archetype-cpp-release.yml index 0059ed981b..b9a222f094 100644 --- a/eng/pipelines/templates/stages/archetype-cpp-release.yml +++ b/eng/pipelines/templates/stages/archetype-cpp-release.yml @@ -368,8 +368,8 @@ stages: # Clone Vcpkg partner feed - template: /eng/pipelines/templates/steps/vcpkg-clone.yml parameters: - RepoOwner: antkmsft - RepoName: azure-sdk-partner-feed-copy + RepoOwner: Azure + RepoName: azure-sdk-vcpkg-partner-feed SetVcpkgRoot: false - template: /eng/pipelines/templates/steps/vcpkg-publish.yml @@ -382,14 +382,14 @@ stages: - template: /eng/common/pipelines/templates/steps/set-default-branch.yml parameters: - WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-partner-feed-copy + WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-vcpkg-partner-feed # Push changes to vcpkg partner feed - template: /eng/common/pipelines/templates/steps/git-push-changes.yml parameters: - WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-partner-feed-copy - TargetRepoName: azure-sdk-partner-feed-copy - BaseRepoOwner: antkmsft + WorkingDirectory: $(Pipeline.Workspace)/azure-sdk-vcpkg-partner-feed + TargetRepoName: azure-sdk-vcpkg-partner-feed + BaseRepoOwner: Azure CommitMsg: Update vcpkg-configuration.json BaseRepoBranch: $(DefaultBranch) From 46ef22c9edc36485356fd4977be900742864a8a9 Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Fri, 16 Oct 2026 14:40:35 -0700 Subject: [PATCH 35/48] Auth --- .../templates/stages/archetype-cpp-release.yml | 7 ++++++- eng/pipelines/templates/steps/vcpkg-publish.yml | 14 ++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/eng/pipelines/templates/stages/archetype-cpp-release.yml b/eng/pipelines/templates/stages/archetype-cpp-release.yml index b9a222f094..c7cfe3b652 100644 --- a/eng/pipelines/templates/stages/archetype-cpp-release.yml +++ b/eng/pipelines/templates/stages/archetype-cpp-release.yml @@ -313,7 +313,7 @@ stages: displayName: Comment notification to PR - job: PublishVcpkgPartnerFeed - displayName: Publish to partner-feed-copy + displayName: Publish to vcpkg-partner-feed condition: and(succeeded(), eq(variables['PublishToVcpkgPartnerFeed'], 'true')) dependsOn: - ReleaseGate @@ -365,6 +365,11 @@ stages: RepoOwner: azure-sdk PRBranchName: $(PrBranchName) + - template: /eng/common/pipelines/templates/steps/login-to-github.yml + parameters: + TokenOwners: + - Azure + # Clone Vcpkg partner feed - template: /eng/pipelines/templates/steps/vcpkg-clone.yml parameters: diff --git a/eng/pipelines/templates/steps/vcpkg-publish.yml b/eng/pipelines/templates/steps/vcpkg-publish.yml index 818df4bb69..1e23357153 100644 --- a/eng/pipelines/templates/steps/vcpkg-publish.yml +++ b/eng/pipelines/templates/steps/vcpkg-publish.yml @@ -69,3 +69,17 @@ steps: -VcpkgPortName '${{ parameters.VcpkgPortName }}' -GitCommitParameters '-c user.name="azure-sdk" -c user.email="azuresdk@microsoft.com"' displayName: Update Vcpkg Betas port ${{ parameters.DisplayNameExtension }} + + - ${{ if eq(parameters.PartnerRelease, 'true') }}: + - task: Powershell@2 + inputs: + pwsh: true + targetType: filePath + filePath: eng/scripts/Update-VcpkgBeta.ps1 + arguments: >- + -VcpkgBetaFolder ${{ parameters.Workspace }}/azure-sdk-vcpkg-partner-feed + -VcpkgFolder ${{ parameters.Workspace }}/vcpkg + -ReleaseArtifactSourceDirectory "${{ parameters.Workspace }}/packages/${{ parameters.ArtifactName }}" + -VcpkgPortName '${{ parameters.VcpkgPortName }}' + -GitCommitParameters '-c user.name="azure-sdk" -c user.email="azuresdk@microsoft.com"' + displayName: Update Vcpkg Partner Feed port ${{ parameters.DisplayNameExtension }} From 89225594df910ef6acb15ec4c143e2b6e7361c81 Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Mon, 19 Oct 2026 05:17:52 -0700 Subject: [PATCH 36/48] Use GH PAT --- .../templates/stages/archetype-cpp-release.yml | 3 +++ eng/pipelines/templates/steps/vcpkg-clone.yml | 16 +++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/eng/pipelines/templates/stages/archetype-cpp-release.yml b/eng/pipelines/templates/stages/archetype-cpp-release.yml index c7cfe3b652..71fb23dc6a 100644 --- a/eng/pipelines/templates/stages/archetype-cpp-release.yml +++ b/eng/pipelines/templates/stages/archetype-cpp-release.yml @@ -376,6 +376,9 @@ stages: RepoOwner: Azure RepoName: azure-sdk-vcpkg-partner-feed SetVcpkgRoot: false + UseGhToken: true + env: + GH_TOKEN: $(GH_TOKEN) - template: /eng/pipelines/templates/steps/vcpkg-publish.yml parameters: diff --git a/eng/pipelines/templates/steps/vcpkg-clone.yml b/eng/pipelines/templates/steps/vcpkg-clone.yml index eb0f1dc8ab..cb886f684b 100644 --- a/eng/pipelines/templates/steps/vcpkg-clone.yml +++ b/eng/pipelines/templates/steps/vcpkg-clone.yml @@ -4,11 +4,25 @@ parameters: RepoName: vcpkg PRBranchName: not-set SetVcpkgRoot: true + GhTokenUsername: azure-sdk + GhTokenEnvVarName: GH_TOKEN + UseGhToken: false steps: - pwsh: | Write-Host "git clone https://github.com/${{ parameters.RepoOwner }}/${{ parameters.RepoName }} ${{ parameters.Workspace }}/${{ parameters.RepoName }}" - git clone https://github.com/${{ parameters.RepoOwner }}/${{ parameters.RepoName }} ${{ parameters.Workspace }}/${{ parameters.RepoName }} + if (${{ parameters.UseGhToken }}) { + Write-Host "Using GitHub token for authentication as ${{ parameters.GhTokenUsername }}" + $ghToken = $env:${{ parameters.GhTokenEnvVarName }} + if (-not $ghToken) { + Write-Error "GitHub token is not set in environment variable ${{ parameters.GhTokenEnvVarName }}" + exit 1 + } + $repoUrl = "https://${{ parameters.GhTokenUsername }}:$ghToken@github.com/${{ parameters.RepoOwner }}/${{ parameters.RepoName }}" + } else { + $repoUrl = "https://github.com/${{ parameters.RepoOwner }}/${{ parameters.RepoName }}" + } + git clone $repoUrl ${{ parameters.Workspace }}/${{ parameters.RepoName }} if ($LASTEXITCODE -ne 0) { Write-Error "Unable to check out vcpkg fork repo" exit $LASTEXITCODE From ff2530800ac916dddb42128f5af4ac1f59ec5c21 Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Mon, 19 Oct 2026 05:21:02 -0700 Subject: [PATCH 37/48] Use GH PAT --- eng/pipelines/templates/stages/archetype-cpp-release.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/eng/pipelines/templates/stages/archetype-cpp-release.yml b/eng/pipelines/templates/stages/archetype-cpp-release.yml index 71fb23dc6a..97b3f2b4df 100644 --- a/eng/pipelines/templates/stages/archetype-cpp-release.yml +++ b/eng/pipelines/templates/stages/archetype-cpp-release.yml @@ -377,8 +377,6 @@ stages: RepoName: azure-sdk-vcpkg-partner-feed SetVcpkgRoot: false UseGhToken: true - env: - GH_TOKEN: $(GH_TOKEN) - template: /eng/pipelines/templates/steps/vcpkg-publish.yml parameters: From 7e71bf928499213970a7ac293de2222c6fc42cbf Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Mon, 19 Oct 2026 06:08:30 -0700 Subject: [PATCH 38/48] yaml condition --- eng/pipelines/templates/steps/vcpkg-clone.yml | 31 +++++++++++-------- 1 file changed, 18 insertions(+), 13 deletions(-) diff --git a/eng/pipelines/templates/steps/vcpkg-clone.yml b/eng/pipelines/templates/steps/vcpkg-clone.yml index cb886f684b..09917cad38 100644 --- a/eng/pipelines/templates/steps/vcpkg-clone.yml +++ b/eng/pipelines/templates/steps/vcpkg-clone.yml @@ -9,25 +9,30 @@ parameters: UseGhToken: false steps: - - pwsh: | - Write-Host "git clone https://github.com/${{ parameters.RepoOwner }}/${{ parameters.RepoName }} ${{ parameters.Workspace }}/${{ parameters.RepoName }}" - if (${{ parameters.UseGhToken }}) { + - ${{ if eq(parameters.UseGhToken, true) }}: + - pwsh: | + Write-Host "git clone https://github.com/${{ parameters.RepoOwner }}/${{ parameters.RepoName }} ${{ parameters.Workspace }}/${{ parameters.RepoName }}" Write-Host "Using GitHub token for authentication as ${{ parameters.GhTokenUsername }}" $ghToken = $env:${{ parameters.GhTokenEnvVarName }} if (-not $ghToken) { Write-Error "GitHub token is not set in environment variable ${{ parameters.GhTokenEnvVarName }}" exit 1 } - $repoUrl = "https://${{ parameters.GhTokenUsername }}:$ghToken@github.com/${{ parameters.RepoOwner }}/${{ parameters.RepoName }}" - } else { - $repoUrl = "https://github.com/${{ parameters.RepoOwner }}/${{ parameters.RepoName }}" - } - git clone $repoUrl ${{ parameters.Workspace }}/${{ parameters.RepoName }} - if ($LASTEXITCODE -ne 0) { - Write-Error "Unable to check out vcpkg fork repo" - exit $LASTEXITCODE - } - displayName: Clone vcpkg (${{ parameters.RepoOwner }}/${{ parameters.RepoName }}) + + git clone https://${{ parameters.GhTokenUsername }}:$ghToken@github.com/${{ parameters.RepoOwner }}/${{ parameters.RepoName }} ${{ parameters.Workspace }}/${{ parameters.RepoName }} + if ($LASTEXITCODE -ne 0) { + Write-Error "Unable to check out vcpkg fork repo" + exit $LASTEXITCODE + } + displayName: Clone vcpkg (${{ parameters.RepoOwner }}/${{ parameters.RepoName }}) + - ${{ else }}: + - pwsh: | + git clone https://github.com/${{ parameters.RepoOwner }}/${{ parameters.RepoName }} ${{ parameters.Workspace }}/${{ parameters.RepoName }} + if ($LASTEXITCODE -ne 0) { + Write-Error "Unable to check out vcpkg fork repo" + exit $LASTEXITCODE + } + displayName: Clone vcpkg (${{ parameters.RepoOwner }}/${{ parameters.RepoName }}) - ${{ if eq(parameters.SetVcpkgRoot, true) }}: - pwsh: | From b8e04c6ee7c5fbe8d4e26c619289096bbf52316b Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Mon, 19 Oct 2026 06:54:42 -0700 Subject: [PATCH 39/48] Use AuthToken param --- .../templates/stages/archetype-cpp-release.yml | 2 +- eng/pipelines/templates/steps/vcpkg-clone.yml | 16 +++++----------- 2 files changed, 6 insertions(+), 12 deletions(-) diff --git a/eng/pipelines/templates/stages/archetype-cpp-release.yml b/eng/pipelines/templates/stages/archetype-cpp-release.yml index 97b3f2b4df..779a320b6c 100644 --- a/eng/pipelines/templates/stages/archetype-cpp-release.yml +++ b/eng/pipelines/templates/stages/archetype-cpp-release.yml @@ -376,7 +376,7 @@ stages: RepoOwner: Azure RepoName: azure-sdk-vcpkg-partner-feed SetVcpkgRoot: false - UseGhToken: true + AuthToken: $(GH_TOKEN) - template: /eng/pipelines/templates/steps/vcpkg-publish.yml parameters: diff --git a/eng/pipelines/templates/steps/vcpkg-clone.yml b/eng/pipelines/templates/steps/vcpkg-clone.yml index 09917cad38..4eca9d43ad 100644 --- a/eng/pipelines/templates/steps/vcpkg-clone.yml +++ b/eng/pipelines/templates/steps/vcpkg-clone.yml @@ -4,22 +4,16 @@ parameters: RepoName: vcpkg PRBranchName: not-set SetVcpkgRoot: true - GhTokenUsername: azure-sdk - GhTokenEnvVarName: GH_TOKEN - UseGhToken: false + AuthTokenUsername: azure-sdk + AuthToken: '' steps: - - ${{ if eq(parameters.UseGhToken, true) }}: + - ${{ if ne(parameters.AuthToken, '') }}: - pwsh: | Write-Host "git clone https://github.com/${{ parameters.RepoOwner }}/${{ parameters.RepoName }} ${{ parameters.Workspace }}/${{ parameters.RepoName }}" - Write-Host "Using GitHub token for authentication as ${{ parameters.GhTokenUsername }}" - $ghToken = $env:${{ parameters.GhTokenEnvVarName }} - if (-not $ghToken) { - Write-Error "GitHub token is not set in environment variable ${{ parameters.GhTokenEnvVarName }}" - exit 1 - } + Write-Host "Using GitHub token for authentication as ${{ parameters.AuthTokenUsername }}" - git clone https://${{ parameters.GhTokenUsername }}:$ghToken@github.com/${{ parameters.RepoOwner }}/${{ parameters.RepoName }} ${{ parameters.Workspace }}/${{ parameters.RepoName }} + git clone https://${{ parameters.AuthTokenUsername }}:${{ parameters.AuthToken }}@github.com/${{ parameters.RepoOwner }}/${{ parameters.RepoName }} ${{ parameters.Workspace }}/${{ parameters.RepoName }} if ($LASTEXITCODE -ne 0) { Write-Error "Unable to check out vcpkg fork repo" exit $LASTEXITCODE From b1f2c97a3290b0554f144da59493e388b02a56a5 Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Mon, 19 Oct 2026 07:57:02 -0700 Subject: [PATCH 40/48] Add GitHub to network isolation --- sdk/template/ci.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sdk/template/ci.yml b/sdk/template/ci.yml index 0da45624e2..a6f3f8c24c 100644 --- a/sdk/template/ci.yml +++ b/sdk/template/ci.yml @@ -25,6 +25,8 @@ pr: extends: template: ../../eng/pipelines/templates/stages/archetype-sdk-client.yml parameters: + settings: + networkIsolationPolicy: Permissive, CFSClean, GitHub ServiceDirectory: template CtestRegex: azure-template Artifacts: From 287830feb5aa194be6591796f13323aa6b924088 Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Mon, 19 Oct 2026 08:02:18 -0700 Subject: [PATCH 41/48] Test GitHub policy --- .../pipelines/templates/steps/eng-common-workflow-enforcer.yml | 2 +- eng/pipelines/templates/stages/archetype-sdk-client.yml | 2 +- sdk/template/ci.yml | 2 -- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/eng/common/pipelines/templates/steps/eng-common-workflow-enforcer.yml b/eng/common/pipelines/templates/steps/eng-common-workflow-enforcer.yml index 291183351d..c12a839798 100644 --- a/eng/common/pipelines/templates/steps/eng-common-workflow-enforcer.yml +++ b/eng/common/pipelines/templates/steps/eng-common-workflow-enforcer.yml @@ -34,7 +34,7 @@ steps: { Write-Host "##vso[task.LogIssue type=error;]Changes to selected workflow and shared skill files under '.github/' should not be made in this Repo`n${filesInCommonDir}" Write-Host "##vso[task.LogIssue type=error;]Follow the workflow at https://github.com/Azure/azure-sdk-tools/blob/main/doc/engsys_workflows_and_skills.md" - exit 1 + # exit 1 } } displayName: Prevent changes to eng/common and selected .github/* files outside of azure-sdk-tools repo diff --git a/eng/pipelines/templates/stages/archetype-sdk-client.yml b/eng/pipelines/templates/stages/archetype-sdk-client.yml index 76c51cc412..69673d10b4 100644 --- a/eng/pipelines/templates/stages/archetype-sdk-client.yml +++ b/eng/pipelines/templates/stages/archetype-sdk-client.yml @@ -91,7 +91,7 @@ extends: parameters: settings: skipBuildTagsForGitHubPullRequests: true - networkIsolationPolicy: Permissive, CFSClean + networkIsolationPolicy: Permissive, CFSClean, GitHub sdl: ${{ if and(eq(variables['Build.DefinitionName'], 'cpp - core'), eq(variables['Build.SourceBranchName'], 'main'), eq(variables['System.TeamProject'], 'internal')) }}: autobaseline: diff --git a/sdk/template/ci.yml b/sdk/template/ci.yml index a6f3f8c24c..0da45624e2 100644 --- a/sdk/template/ci.yml +++ b/sdk/template/ci.yml @@ -25,8 +25,6 @@ pr: extends: template: ../../eng/pipelines/templates/stages/archetype-sdk-client.yml parameters: - settings: - networkIsolationPolicy: Permissive, CFSClean, GitHub ServiceDirectory: template CtestRegex: azure-template Artifacts: From d46f87f864767f1b15f53a913887416e7d2da00f Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Mon, 19 Oct 2026 09:03:57 -0700 Subject: [PATCH 42/48] Debug PAT --- eng/pipelines/templates/steps/vcpkg-clone.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/eng/pipelines/templates/steps/vcpkg-clone.yml b/eng/pipelines/templates/steps/vcpkg-clone.yml index 4eca9d43ad..eb87878275 100644 --- a/eng/pipelines/templates/steps/vcpkg-clone.yml +++ b/eng/pipelines/templates/steps/vcpkg-clone.yml @@ -13,7 +13,11 @@ steps: Write-Host "git clone https://github.com/${{ parameters.RepoOwner }}/${{ parameters.RepoName }} ${{ parameters.Workspace }}/${{ parameters.RepoName }}" Write-Host "Using GitHub token for authentication as ${{ parameters.AuthTokenUsername }}" - git clone https://${{ parameters.AuthTokenUsername }}:${{ parameters.AuthToken }}@github.com/${{ parameters.RepoOwner }}/${{ parameters.RepoName }} ${{ parameters.Workspace }}/${{ parameters.RepoName }} + $pat = "${{ parameters.AuthToken }}"" + $debugPat = $pat[0..3] -join '' + + Write-Host git clone https://${{ parameters.AuthTokenUsername }}:$debugPat@github.com/${{ parameters.RepoOwner }}/${{ parameters.RepoName }} ${{ parameters.Workspace }}/${{ parameters.RepoName }} + git clone https://${{ parameters.AuthTokenUsername }}:$pat@github.com/${{ parameters.RepoOwner }}/${{ parameters.RepoName }} ${{ parameters.Workspace }}/${{ parameters.RepoName }} if ($LASTEXITCODE -ne 0) { Write-Error "Unable to check out vcpkg fork repo" exit $LASTEXITCODE From 808e938003c14e8a66d492e11b731b4983cf475e Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Mon, 19 Oct 2026 09:48:39 -0700 Subject: [PATCH 43/48] Debug print --- eng/pipelines/templates/steps/vcpkg-clone.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/pipelines/templates/steps/vcpkg-clone.yml b/eng/pipelines/templates/steps/vcpkg-clone.yml index eb87878275..184e22041b 100644 --- a/eng/pipelines/templates/steps/vcpkg-clone.yml +++ b/eng/pipelines/templates/steps/vcpkg-clone.yml @@ -16,7 +16,7 @@ steps: $pat = "${{ parameters.AuthToken }}"" $debugPat = $pat[0..3] -join '' - Write-Host git clone https://${{ parameters.AuthTokenUsername }}:$debugPat@github.com/${{ parameters.RepoOwner }}/${{ parameters.RepoName }} ${{ parameters.Workspace }}/${{ parameters.RepoName }} + Write-Host "git clone https://${{ parameters.AuthTokenUsername }}:$debugPat@github.com/${{ parameters.RepoOwner }}/${{ parameters.RepoName }} ${{ parameters.Workspace }}/${{ parameters.RepoName }}" git clone https://${{ parameters.AuthTokenUsername }}:$pat@github.com/${{ parameters.RepoOwner }}/${{ parameters.RepoName }} ${{ parameters.Workspace }}/${{ parameters.RepoName }} if ($LASTEXITCODE -ne 0) { Write-Error "Unable to check out vcpkg fork repo" From aaa58b8d19d66c207590fbe5abbcf49af19a4941 Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Mon, 19 Oct 2026 11:16:36 -0700 Subject: [PATCH 44/48] quote --- eng/pipelines/templates/steps/vcpkg-clone.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/eng/pipelines/templates/steps/vcpkg-clone.yml b/eng/pipelines/templates/steps/vcpkg-clone.yml index 184e22041b..375120d1a0 100644 --- a/eng/pipelines/templates/steps/vcpkg-clone.yml +++ b/eng/pipelines/templates/steps/vcpkg-clone.yml @@ -13,7 +13,7 @@ steps: Write-Host "git clone https://github.com/${{ parameters.RepoOwner }}/${{ parameters.RepoName }} ${{ parameters.Workspace }}/${{ parameters.RepoName }}" Write-Host "Using GitHub token for authentication as ${{ parameters.AuthTokenUsername }}" - $pat = "${{ parameters.AuthToken }}"" + $pat = "${{ parameters.AuthToken }}" $debugPat = $pat[0..3] -join '' Write-Host "git clone https://${{ parameters.AuthTokenUsername }}:$debugPat@github.com/${{ parameters.RepoOwner }}/${{ parameters.RepoName }} ${{ parameters.Workspace }}/${{ parameters.RepoName }}" From 1e595cbb1dfe22df9822b5df544b945555e1b8e0 Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Mon, 19 Oct 2026 13:02:43 -0700 Subject: [PATCH 45/48] More dignostic output --- .../templates/stages/archetype-cpp-release.yml | 3 ++- eng/pipelines/templates/steps/vcpkg-clone.yml | 12 +++++------- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/eng/pipelines/templates/stages/archetype-cpp-release.yml b/eng/pipelines/templates/stages/archetype-cpp-release.yml index 779a320b6c..30504cd2f7 100644 --- a/eng/pipelines/templates/stages/archetype-cpp-release.yml +++ b/eng/pipelines/templates/stages/archetype-cpp-release.yml @@ -367,6 +367,7 @@ stages: - template: /eng/common/pipelines/templates/steps/login-to-github.yml parameters: + AlwaysUseOwnerSuffix: true TokenOwners: - Azure @@ -376,7 +377,7 @@ stages: RepoOwner: Azure RepoName: azure-sdk-vcpkg-partner-feed SetVcpkgRoot: false - AuthToken: $(GH_TOKEN) + AuthToken: $(GH_TOKEN_Azure) - template: /eng/pipelines/templates/steps/vcpkg-publish.yml parameters: diff --git a/eng/pipelines/templates/steps/vcpkg-clone.yml b/eng/pipelines/templates/steps/vcpkg-clone.yml index 375120d1a0..9a26d02ad8 100644 --- a/eng/pipelines/templates/steps/vcpkg-clone.yml +++ b/eng/pipelines/templates/steps/vcpkg-clone.yml @@ -4,20 +4,18 @@ parameters: RepoName: vcpkg PRBranchName: not-set SetVcpkgRoot: true - AuthTokenUsername: azure-sdk AuthToken: '' steps: - ${{ if ne(parameters.AuthToken, '') }}: - pwsh: | - Write-Host "git clone https://github.com/${{ parameters.RepoOwner }}/${{ parameters.RepoName }} ${{ parameters.Workspace }}/${{ parameters.RepoName }}" - Write-Host "Using GitHub token for authentication as ${{ parameters.AuthTokenUsername }}" + $tokenLength = "${{ parameters.AuthToken }}".Length + $startsWithGhp = "${{ parameters.AuthToken }}".Substring(0, 4) -eq "ghp_" - $pat = "${{ parameters.AuthToken }}" - $debugPat = $pat[0..3] -join '' + Write-Host "git clone https://github.com/${{ parameters.RepoOwner }}/${{ parameters.RepoName }} ${{ parameters.Workspace }}/${{ parameters.RepoName }}" + Write-Host "Using GitHub token for authentication (Token length: $tokenLength, Starts with 'ghp_': $startsWithGhp)." - Write-Host "git clone https://${{ parameters.AuthTokenUsername }}:$debugPat@github.com/${{ parameters.RepoOwner }}/${{ parameters.RepoName }} ${{ parameters.Workspace }}/${{ parameters.RepoName }}" - git clone https://${{ parameters.AuthTokenUsername }}:$pat@github.com/${{ parameters.RepoOwner }}/${{ parameters.RepoName }} ${{ parameters.Workspace }}/${{ parameters.RepoName }} + git clone https://${{ parameters.AuthToken }}@github.com/${{ parameters.RepoOwner }}/${{ parameters.RepoName }} ${{ parameters.Workspace }}/${{ parameters.RepoName }} if ($LASTEXITCODE -ne 0) { Write-Error "Unable to check out vcpkg fork repo" exit $LASTEXITCODE From 2d3e97a0317145dfdb9e34e25cffacffc38acb1f Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Tue, 20 Oct 2026 11:52:59 -0700 Subject: [PATCH 46/48] Undo some changes to work through the Azure SDK Automation app --- .../steps/eng-common-workflow-enforcer.yml | 2 +- .../stages/archetype-cpp-release.yml | 27 ----------------- .../templates/stages/archetype-sdk-client.yml | 2 +- eng/pipelines/templates/steps/vcpkg-clone.yml | 30 +++++-------------- 4 files changed, 9 insertions(+), 52 deletions(-) diff --git a/eng/common/pipelines/templates/steps/eng-common-workflow-enforcer.yml b/eng/common/pipelines/templates/steps/eng-common-workflow-enforcer.yml index c12a839798..291183351d 100644 --- a/eng/common/pipelines/templates/steps/eng-common-workflow-enforcer.yml +++ b/eng/common/pipelines/templates/steps/eng-common-workflow-enforcer.yml @@ -34,7 +34,7 @@ steps: { Write-Host "##vso[task.LogIssue type=error;]Changes to selected workflow and shared skill files under '.github/' should not be made in this Repo`n${filesInCommonDir}" Write-Host "##vso[task.LogIssue type=error;]Follow the workflow at https://github.com/Azure/azure-sdk-tools/blob/main/doc/engsys_workflows_and_skills.md" - # exit 1 + exit 1 } } displayName: Prevent changes to eng/common and selected .github/* files outside of azure-sdk-tools repo diff --git a/eng/pipelines/templates/stages/archetype-cpp-release.yml b/eng/pipelines/templates/stages/archetype-cpp-release.yml index 30504cd2f7..7a39392e5b 100644 --- a/eng/pipelines/templates/stages/archetype-cpp-release.yml +++ b/eng/pipelines/templates/stages/archetype-cpp-release.yml @@ -331,31 +331,12 @@ stages: steps: - checkout: self - - pwsh: | - $branchName = "azure-sdk-for-cpp-${{ artifact.Name }}-$(Build.BuildId)" - if ('$(VcpkgForkBranchName)') { - Write-Host "Using queue time branch name" - $branchName = '$(VcpkgForkBranchName)' - } - Write-Host "##vso[task.setvariable variable=PrBranchName]$branchName" - displayName: Set fork branch name - - pwsh: | $packageSpec = Get-Content -Raw -Path "$(Pipeline.Workspace)/packages/${{artifact.Name}}/package-info.json" | ConvertFrom-Json $version = $packageSpec.version Write-Host "##vso[task.setvariable variable=PackageVersion]$version" displayName: Set PackageVersion variable - - pwsh: | - $title = "[${{ artifact.VcpkgPortName }}] publish version $(PackageVersion)" - - if ('$(VcpkgPRTitle)') { - Write-Host "Using queue time PR title" - $title = '$(VcpkgPRTitle)' - } - Write-Host "##vso[task.setvariable variable=PrTitle]$title" - displayName: Set PR title - # There are potential race conditions if this script runs # in parallel against the same branch name. Release only # one package at a time. @@ -363,13 +344,6 @@ stages: - template: /eng/pipelines/templates/steps/vcpkg-clone.yml parameters: RepoOwner: azure-sdk - PRBranchName: $(PrBranchName) - - - template: /eng/common/pipelines/templates/steps/login-to-github.yml - parameters: - AlwaysUseOwnerSuffix: true - TokenOwners: - - Azure # Clone Vcpkg partner feed - template: /eng/pipelines/templates/steps/vcpkg-clone.yml @@ -377,7 +351,6 @@ stages: RepoOwner: Azure RepoName: azure-sdk-vcpkg-partner-feed SetVcpkgRoot: false - AuthToken: $(GH_TOKEN_Azure) - template: /eng/pipelines/templates/steps/vcpkg-publish.yml parameters: diff --git a/eng/pipelines/templates/stages/archetype-sdk-client.yml b/eng/pipelines/templates/stages/archetype-sdk-client.yml index 69673d10b4..76c51cc412 100644 --- a/eng/pipelines/templates/stages/archetype-sdk-client.yml +++ b/eng/pipelines/templates/stages/archetype-sdk-client.yml @@ -91,7 +91,7 @@ extends: parameters: settings: skipBuildTagsForGitHubPullRequests: true - networkIsolationPolicy: Permissive, CFSClean, GitHub + networkIsolationPolicy: Permissive, CFSClean sdl: ${{ if and(eq(variables['Build.DefinitionName'], 'cpp - core'), eq(variables['Build.SourceBranchName'], 'main'), eq(variables['System.TeamProject'], 'internal')) }}: autobaseline: diff --git a/eng/pipelines/templates/steps/vcpkg-clone.yml b/eng/pipelines/templates/steps/vcpkg-clone.yml index 9a26d02ad8..fa785f7ed4 100644 --- a/eng/pipelines/templates/steps/vcpkg-clone.yml +++ b/eng/pipelines/templates/steps/vcpkg-clone.yml @@ -4,31 +4,15 @@ parameters: RepoName: vcpkg PRBranchName: not-set SetVcpkgRoot: true - AuthToken: '' steps: - - ${{ if ne(parameters.AuthToken, '') }}: - - pwsh: | - $tokenLength = "${{ parameters.AuthToken }}".Length - $startsWithGhp = "${{ parameters.AuthToken }}".Substring(0, 4) -eq "ghp_" - - Write-Host "git clone https://github.com/${{ parameters.RepoOwner }}/${{ parameters.RepoName }} ${{ parameters.Workspace }}/${{ parameters.RepoName }}" - Write-Host "Using GitHub token for authentication (Token length: $tokenLength, Starts with 'ghp_': $startsWithGhp)." - - git clone https://${{ parameters.AuthToken }}@github.com/${{ parameters.RepoOwner }}/${{ parameters.RepoName }} ${{ parameters.Workspace }}/${{ parameters.RepoName }} - if ($LASTEXITCODE -ne 0) { - Write-Error "Unable to check out vcpkg fork repo" - exit $LASTEXITCODE - } - displayName: Clone vcpkg (${{ parameters.RepoOwner }}/${{ parameters.RepoName }}) - - ${{ else }}: - - pwsh: | - git clone https://github.com/${{ parameters.RepoOwner }}/${{ parameters.RepoName }} ${{ parameters.Workspace }}/${{ parameters.RepoName }} - if ($LASTEXITCODE -ne 0) { - Write-Error "Unable to check out vcpkg fork repo" - exit $LASTEXITCODE - } - displayName: Clone vcpkg (${{ parameters.RepoOwner }}/${{ parameters.RepoName }}) + - pwsh: | + git clone https://github.com/${{ parameters.RepoOwner }}/${{ parameters.RepoName }} ${{ parameters.Workspace }}/${{ parameters.RepoName }} + if ($LASTEXITCODE -ne 0) { + Write-Error "Unable to check out vcpkg fork repo" + exit $LASTEXITCODE + } + displayName: Clone vcpkg (${{ parameters.RepoOwner }}/${{ parameters.RepoName }}) - ${{ if eq(parameters.SetVcpkgRoot, true) }}: - pwsh: | From 68f4ae8fa3b3e16528781cc2a4b3a60ece517bba Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Tue, 20 Oct 2026 15:54:09 -0700 Subject: [PATCH 47/48] Re-add auth --- eng/pipelines/templates/stages/archetype-cpp-release.yml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/eng/pipelines/templates/stages/archetype-cpp-release.yml b/eng/pipelines/templates/stages/archetype-cpp-release.yml index 7a39392e5b..a2eede8f23 100644 --- a/eng/pipelines/templates/stages/archetype-cpp-release.yml +++ b/eng/pipelines/templates/stages/archetype-cpp-release.yml @@ -345,12 +345,18 @@ stages: parameters: RepoOwner: azure-sdk + - template: /eng/common/pipelines/templates/steps/login-to-github.yml + parameters: + TokenOwners: + - Azure + # Clone Vcpkg partner feed - template: /eng/pipelines/templates/steps/vcpkg-clone.yml parameters: RepoOwner: Azure RepoName: azure-sdk-vcpkg-partner-feed SetVcpkgRoot: false + AuthToken: $(GH_TOKEN) - template: /eng/pipelines/templates/steps/vcpkg-publish.yml parameters: From 9f528c189a8d0f0350ada60bdb7dd41dad6775ea Mon Sep 17 00:00:00 2001 From: Anton Kolesnyk Date: Tue, 20 Oct 2026 20:01:13 -0700 Subject: [PATCH 48/48] Re-add auth --- eng/pipelines/templates/steps/vcpkg-clone.yml | 30 ++++++++++++++----- 1 file changed, 23 insertions(+), 7 deletions(-) diff --git a/eng/pipelines/templates/steps/vcpkg-clone.yml b/eng/pipelines/templates/steps/vcpkg-clone.yml index fa785f7ed4..2c77daf7a8 100644 --- a/eng/pipelines/templates/steps/vcpkg-clone.yml +++ b/eng/pipelines/templates/steps/vcpkg-clone.yml @@ -4,15 +4,31 @@ parameters: RepoName: vcpkg PRBranchName: not-set SetVcpkgRoot: true + AuthToken: '' steps: - - pwsh: | - git clone https://github.com/${{ parameters.RepoOwner }}/${{ parameters.RepoName }} ${{ parameters.Workspace }}/${{ parameters.RepoName }} - if ($LASTEXITCODE -ne 0) { - Write-Error "Unable to check out vcpkg fork repo" - exit $LASTEXITCODE - } - displayName: Clone vcpkg (${{ parameters.RepoOwner }}/${{ parameters.RepoName }}) + - ${{ if ne(parameters.AuthToken, '') }}: + - pwsh: | + $tokenLength = "${{ parameters.AuthToken }}".Length + $startsWithGhp = "${{ parameters.AuthToken }}".Substring(0, 4) -eq "ghp_" + + Write-Host "git clone https://github.com/${{ parameters.RepoOwner }}/${{ parameters.RepoName }} ${{ parameters.Workspace }}/${{ parameters.RepoName }}" + Write-Host "Using GitHub token for authentication (Token length: $tokenLength, Starts with 'ghp_': $startsWithGhp)." + + git clone https://azure-sdk:${{ parameters.AuthToken }}@github.com/${{ parameters.RepoOwner }}/${{ parameters.RepoName }} ${{ parameters.Workspace }}/${{ parameters.RepoName }} + if ($LASTEXITCODE -ne 0) { + Write-Error "Unable to check out vcpkg fork repo" + exit $LASTEXITCODE + } + displayName: Clone vcpkg (${{ parameters.RepoOwner }}/${{ parameters.RepoName }}) + - ${{ else }}: + - pwsh: | + git clone https://github.com/${{ parameters.RepoOwner }}/${{ parameters.RepoName }} ${{ parameters.Workspace }}/${{ parameters.RepoName }} + if ($LASTEXITCODE -ne 0) { + Write-Error "Unable to check out vcpkg fork repo" + exit $LASTEXITCODE + } + displayName: Clone vcpkg (${{ parameters.RepoOwner }}/${{ parameters.RepoName }}) - ${{ if eq(parameters.SetVcpkgRoot, true) }}: - pwsh: |