@@ -17,20 +17,6 @@ parameters:
1717 type : string
1818 default : ' '
1919
20- - name : SymbolPublishingAdditionalParameters
21- displayName : Additional (MSBuild) properties for symbol publishing
22- type : string
23- default : ' '
24-
25- - name : ArtifactsPublishingAdditionalParameters
26- displayName : Additional (MSBuild) properties for general asset publishing
27- type : string
28- default : ' '
29-
30- # The parameters below here are legacy. They are passed by add-build-to-channel
31- # to the build pipeline, and if they are not present in the pipeline, then queueing
32- # will fail. Remove once add-build-to-channel has been updated to remove the parameters.
33-
3420 - name : EnableSourceLinkValidation
3521 displayName : Should Sourcelink validation be performed?
3622 type : boolean
@@ -50,6 +36,16 @@ parameters:
5036 displayName : Should installers and checksums be published?
5137 type : boolean
5238 default : true
39+
40+ - name : SymbolPublishingAdditionalParameters
41+ displayName : Additional (MSBuild) properties for symbol publishing
42+ type : string
43+ default : ' '
44+
45+ - name : ArtifactsPublishingAdditionalParameters
46+ displayName : Additional (MSBuild) properties for general asset publishing
47+ type : string
48+ default : ' '
5349
5450 - name : SigningValidationAdditionalParameters
5551 displayName : Additional (MSBuild) properties for signing validation
@@ -58,10 +54,101 @@ parameters:
5854
5955trigger : none
6056
57+ variables :
58+ _DotNetArtifactsCategory : .NETCore
59+
60+ pool :
61+ vmImage : ubuntu-latest
62+
6163stages :
62- - template : \eng\publishing\v3\publish.yml
63- parameters :
64- PromoteToChannelIds : ${{ parameters.PromoteToChannelIds }}
65- BARBuildId : ${{ parameters.BARBuildId }}
66- symbolPublishingAdditionalParameters : ${{ parameters.SymbolPublishingAdditionalParameters }}
67- artifactsPublishingAdditionalParameters : ${{ parameters.ArtifactsPublishingAdditionalParameters }}
64+ - stage : prepare_promotion
65+ displayName : Prepare for Promotion
66+ jobs :
67+ - job :
68+ displayName : Validate Parameters
69+ variables :
70+ - template : common\templates\post-build\common-variables.yml
71+ steps :
72+ - checkout : none
73+
74+ - task : PowerShell@2
75+ displayName : Validate Build & Channel
76+ inputs :
77+ targetType : inline
78+ script : |
79+ # Keeping this script inline so that we don't need to checkout the whole repo to use just one file
80+ try {
81+ $buildApiEndpoint = "$(MaestroApiEndPoint)/api/builds/${Env:BARBuildId}?api-version=$(MaestroApiVersion)"
82+
83+ $apiHeaders = New-Object 'System.Collections.Generic.Dictionary[[String],[String]]'
84+ $apiHeaders.Add('Accept', 'application/json')
85+ $apiHeaders.Add('Authorization',"Bearer ${Env:MAESTRO_API_TOKEN}")
86+
87+ $buildInfo = try { Invoke-WebRequest -Method Get -Uri $buildApiEndpoint -Headers $apiHeaders | ConvertFrom-Json } catch { Write-Host "Error: $_" }
88+
89+ if (!$buildInfo) {
90+ Write-Host "Build with BAR ID ${Env:BARBuildId} was not found in BAR!"
91+ exit 1
92+ }
93+
94+ $channels = ${Env:PromoteToChannelIds} -split "-"
95+ foreach ($channelId in $channels) {
96+ $channelApiEndpoint = "$(MaestroApiEndPoint)/api/channels/${channelId}?api-version=$(MaestroApiVersion)"
97+ $channelInfo = try { Invoke-WebRequest -Method Get -Uri $channelApiEndpoint -Headers $apiHeaders | ConvertFrom-Json } catch { Write-Host "Error: $_" }
98+
99+ if (!$channelInfo) {
100+ Write-Host "Channel with ID ${channelId} was not found in BAR. Aborting."
101+ exit 1
102+ }
103+ }
104+
105+ $azureDevOpsBuildNumber = $buildInfo.azureDevOpsBuildNumber
106+ $channelName = $channelInfo.name
107+ $azureDevOpsRepository = "Unknown"
108+ $lastIndexOfSlash = $buildInfo.azureDevOpsRepository.LastIndexOf('/')
109+
110+ if ($lastIndexOfSlash -ne -1) {
111+ $azureDevOpsRepository = $buildInfo.azureDevOpsRepository.Substring($lastIndexOfSlash + 1)
112+
113+ # Invalid chars in Azdo build number: '"', '/', ':', '<', '>', '\', '|', '?', '@', and '*'
114+ $azureDevOpsRepository = $azureDevOpsRepository -replace '["/:<>\\|?@*"]', '_'
115+ }
116+
117+ $buildNumberName = "Promoting $azureDevOpsRepository build $azureDevOpsBuildNumber to channel(s) ${Env:PromoteToChannelIds}#"
118+
119+ # Maximum buildnumber length is 255 chars
120+ if ($buildNumberName.Length -GT 255) {
121+ $buildNumberName = $buildNumberName.Substring(0, 255)
122+ }
123+
124+ Write-Host "##vso[build.updatebuildnumber]$buildNumberName"
125+ Write-Host "##vso[build.addbuildtag]$channelName"
126+ }
127+ catch {
128+ Write-Host $_
129+ Write-Host $_.Exception
130+ Write-Host $_.ScriptStackTrace
131+ exit 1
132+ }
133+ env :
134+ MAESTRO_API_TOKEN : $(MaestroApiAccessToken)
135+ BARBuildId : ${{ parameters.BARBuildId }}
136+ PromoteToChannelIds : ${{ parameters.PromoteToChannelIds }}
137+
138+ - ${{ if ge(parameters.PublishingInfraVersion, 3) }} :
139+ - template : \eng\publishing\v3\publish.yml
140+ parameters :
141+ PromoteToChannelIds : ${{ parameters.PromoteToChannelIds }}
142+ BARBuildId : ${{ parameters.BARBuildId }}
143+
144+ enableSourceLinkValidation : ${{ parameters.EnableSourceLinkValidation }}
145+ enableNugetValidation : ${{ parameters.EnableNugetValidation }}
146+ enableSigningValidation : ${{ parameters.EnableSigningValidation }}
147+
148+ validateDependsOn :
149+ - prepare_promotion
150+
151+ publishInstallersAndChecksums : ${{ parameters.PublishInstallersAndChecksums }}
152+ symbolPublishingAdditionalParameters : ${{ parameters.SymbolPublishingAdditionalParameters }}
153+ artifactsPublishingAdditionalParameters : ${{ parameters.ArtifactsPublishingAdditionalParameters }}
154+ signingValidationAdditionalParameters : ${{ parameters.SigningValidationAdditionalParameters }}
0 commit comments