2121variables :
2222 buildPlatform : ' Any CPU'
2323 buildConfiguration : ' Release'
24+ NuGetOrganizationName : ' openapinet'
25+ privateFeedBaseUrl : ' https://microsoftgraph.pkgs.visualstudio.com/0985d294-5762-4bc2-a565-161ef349ca3e/_packaging/GraphDeveloperExperiences_Public'
2426 ProductBinPath : ' $(Build.SourcesDirectory)\src\Microsoft.OpenApi\bin\$(BuildConfiguration)'
2527
2628resources :
@@ -81,7 +83,7 @@ extends:
8183 <configuration>
8284 <packageSources>
8385 <clear />
84- <add key="GraphDeveloperExperiences_Public" value="https://microsoftgraph.pkgs.visualstudio.com/0985d294-5762-4bc2-a565-161ef349ca3e/_packaging/GraphDeveloperExperiences_Public /nuget/v3/index.json" />
86+ <add key="GraphDeveloperExperiences_Public" value="$(privateFeedBaseUrl) /nuget/v3/index.json" />
8587 </packageSources>
8688 </configuration>
8789 "@ | Set-Content -Path "$(Build.SourcesDirectory)/nuget.config" -Encoding UTF8
@@ -205,7 +207,16 @@ extends:
205207 inputs :
206208 targetFolder : $(Build.ArtifactStagingDirectory)/Nugets
207209 sourceFolder : $(Build.ArtifactStagingDirectory)
208- content : ' *.nupkg'
210+ Contents : |
211+ *.nupkg
212+ *.snupkg
213+
214+ - task : CopyFiles@2
215+ displayName : ' Include version-check script in Nugets artifact'
216+ inputs :
217+ SourceFolder : ' $(Build.SourcesDirectory)/scripts'
218+ Contents : ' check-nuget-package-published.ps1'
219+ TargetFolder : ' $(Build.ArtifactStagingDirectory)/Nugets/scripts'
209220
210221 - stage : deploy
211222 condition : and(contains(variables['Build.SourceBranch'], 'refs/tags/v'), succeeded())
@@ -232,13 +243,47 @@ extends:
232243 pool :
233244 vmImage : ubuntu-latest
234245 steps :
235- - task : 1ES.PublishNuget@1
236- displayName : ' NuGet push'
246+ - task : PowerShell@2
247+ displayName : ' Check whether NuGet package version already published (idempotent)'
248+ inputs :
249+ targetType : filePath
250+ filePath : ' $(Pipeline.Workspace)/scripts/check-nuget-package-published.ps1'
251+ arguments : ' -PackageId "Microsoft.OpenApi" -PackageDirectory "$(Pipeline.Workspace)" -NuGetServiceIndexUrl "$(privateFeedBaseUrl)/nuget/v3/index.json"'
252+ pwsh : true
253+ env :
254+ FEED_ACCESS_TOKEN : $(System.AccessToken)
255+ - task : CopyFiles@2
256+ displayName : ' Stage OpenAPI NuGet packages for ESRP release'
257+ condition : and(succeeded(), ne(variables['nugetAlreadyPublished'], 'true'))
237258 inputs :
238- packagesToPush : ' $(Pipeline.Workspace)/Microsoft.OpenApi.[0-9]*.nupkg'
239- packageParentPath : ' $(Pipeline.Workspace)'
240- nuGetFeedType : external
241- publishFeedCredentials : ' OpenAPI Nuget Connection'
259+ SourceFolder : ' $(Pipeline.Workspace)'
260+ Contents : |
261+ Microsoft.OpenApi.*.nupkg
262+ Microsoft.OpenApi.*.snupkg
263+ !Microsoft.OpenApi.YamlReader.*
264+ TargetFolder : ' $(Pipeline.Workspace)/nuget-packages/$(NuGetOrganizationName)/openapi'
265+ CleanTargetFolder : true
266+ - task : EsrpRelease@14
267+ displayName : ' ESRP Release - OpenAPI NuGet'
268+ condition : and(succeeded(), ne(variables['nugetAlreadyPublished'], 'true'))
269+ inputs :
270+ connectedservicename : ' Federated DevX ESRP Managed Identity Connection'
271+ usemanagedidentity : false
272+ keyvaultname : ' akv-prod-eastus'
273+ authcertname : ' ReferenceLibraryPrivateCert'
274+ signcertname : ' ReferencePackagePublisherCertificate'
275+ clientid : ' 65035b7f-7357-4f29-bf25-c5ee5c3949f8'
276+ intent : ' packagedistribution'
277+ contenttype : ' NuGet'
278+ organizationname : ' $(NuGetOrganizationName)'
279+ contentsource : ' Folder'
280+ folderlocation : ' $(Pipeline.Workspace)/nuget-packages/$(NuGetOrganizationName)/openapi'
281+ waitforreleasecompletion : true
282+ owners : ' christiano@microsoft.com,ramsess@microsoft.com,gavinbarron@microsoft.com,jingjingjia@microsoft.com,peombwa@microsoft.com,treicys@microsoft.com'
283+ approvers : ' christiano@microsoft.com,ramsess@microsoft.com,gavinbarron@microsoft.com,jingjingjia@microsoft.com,peombwa@microsoft.com,treicys@microsoft.com'
284+ serviceendpointurl : ' https://api.esrp.microsoft.com/'
285+ mainpublisher : ' ESRPRELPACMAN'
286+ domaintenantid : ' cdc5aeea-15c5-4db6-b079-fcadd2505dc2'
242287
243288 - deployment : deploy_yaml_reader
244289 condition : and(contains(variables['build.SourceBranch'], 'refs/tags/v'), succeeded())
@@ -257,13 +302,46 @@ extends:
257302 pool :
258303 vmImage : ubuntu-latest
259304 steps :
260- - task : 1ES.PublishNuget@1
261- displayName : ' NuGet push'
305+ - task : PowerShell@2
306+ displayName : ' Check whether NuGet package version already published (idempotent)'
307+ inputs :
308+ targetType : filePath
309+ filePath : ' $(Pipeline.Workspace)/scripts/check-nuget-package-published.ps1'
310+ arguments : ' -PackageId "Microsoft.OpenApi.YamlReader" -PackageDirectory "$(Pipeline.Workspace)" -NuGetServiceIndexUrl "$(privateFeedBaseUrl)/nuget/v3/index.json"'
311+ pwsh : true
312+ env :
313+ FEED_ACCESS_TOKEN : $(System.AccessToken)
314+ - task : CopyFiles@2
315+ displayName : ' Stage YAML reader NuGet packages for ESRP release'
316+ condition : and(succeeded(), ne(variables['nugetAlreadyPublished'], 'true'))
317+ inputs :
318+ SourceFolder : ' $(Pipeline.Workspace)'
319+ Contents : |
320+ Microsoft.OpenApi.YamlReader.*.nupkg
321+ Microsoft.OpenApi.YamlReader.*.snupkg
322+ TargetFolder : ' $(Pipeline.Workspace)/nuget-packages/$(NuGetOrganizationName)/yaml-reader'
323+ CleanTargetFolder : true
324+ - task : EsrpRelease@14
325+ displayName : ' ESRP Release - YAML reader NuGet'
326+ condition : and(succeeded(), ne(variables['nugetAlreadyPublished'], 'true'))
262327 inputs :
263- packagesToPush : ' $(Pipeline.Workspace)/Microsoft.OpenApi.YamlReader.*.nupkg'
264- packageParentPath : ' $(Pipeline.Workspace)'
265- nuGetFeedType : external
266- publishFeedCredentials : ' OpenAPI Nuget Connection'
328+ connectedservicename : ' Federated DevX ESRP Managed Identity Connection'
329+ usemanagedidentity : false
330+ keyvaultname : ' akv-prod-eastus'
331+ authcertname : ' ReferenceLibraryPrivateCert'
332+ signcertname : ' ReferencePackagePublisherCertificate'
333+ clientid : ' 65035b7f-7357-4f29-bf25-c5ee5c3949f8'
334+ intent : ' packagedistribution'
335+ contenttype : ' NuGet'
336+ organizationname : ' $(NuGetOrganizationName)'
337+ contentsource : ' Folder'
338+ folderlocation : ' $(Pipeline.Workspace)/nuget-packages/$(NuGetOrganizationName)/yaml-reader'
339+ waitforreleasecompletion : true
340+ owners : ' christiano@microsoft.com,ramsess@microsoft.com,gavinbarron@microsoft.com,jingjingjia@microsoft.com,peombwa@microsoft.com,treicys@microsoft.com'
341+ approvers : ' christiano@microsoft.com,ramsess@microsoft.com,gavinbarron@microsoft.com,jingjingjia@microsoft.com,peombwa@microsoft.com,treicys@microsoft.com'
342+ serviceendpointurl : ' https://api.esrp.microsoft.com/'
343+ mainpublisher : ' ESRPRELPACMAN'
344+ domaintenantid : ' cdc5aeea-15c5-4db6-b079-fcadd2505dc2'
267345
268346 - deployment : create_github_release
269347 condition : and(contains(variables['build.SourceBranch'], 'refs/tags/v'), succeeded())
0 commit comments