Skip to content

Commit 6ee8e82

Browse files
authored
Allow for publishing to DevOps feed instead of maven.org (Azure#45764)
Add feature to enable the Storage team to release to a devops feed instead of public nuget.org for releases. This allows them to do a soft GA where consumers can use the latest GA from the Devops feed if they know their regions have the new storage features. The GA will get published to nuget.org once all the regions have the new features.
1 parent 7f108bb commit 6ee8e82

File tree

7 files changed

+96
-100
lines changed

7 files changed

+96
-100
lines changed

eng/pipelines/templates/stages/archetype-java-release-batch.yml

Lines changed: 50 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -14,11 +14,12 @@ parameters:
1414
- name: EnableIntegrationStage
1515
type: boolean
1616
default: true
17-
# A different environment will be passed in for service directories that have
18-
# live tests enabled for release and ReleaseDependsOnLiveTests is false
19-
- name: Environment
17+
- name: PublicPublishEnvironment
2018
type: string
21-
default: 'maven'
19+
default: 'package-publish'
20+
- name: PublicFeedUrl
21+
type: string
22+
default: 'maven.org'
2223

2324
stages:
2425
# The signing stage is responsible for submitting binaries to ESRP for our official signing
@@ -204,41 +205,43 @@ stages:
204205
PackageRepository: Maven
205206
ReleaseSha: $(Build.SourceVersion)
206207

207-
- deployment: PublishESRPPackage
208-
displayName: "Publish to Maven Central via ESRP"
209-
condition: and(succeeded(), ne(variables['Skip.PublishPackage'], 'true'))
210-
# This timeout shouldn't be necessary once we're able to parallelize better. Right now,
211-
# this is here to ensure larger areas (30+) libraries don't time out.
212-
timeoutInMinutes: 120
213-
environment: ${{ parameters.Environment }}
214-
dependsOn: TagRepository
215-
216-
templateContext:
217-
type: releaseJob
218-
isProduction: true
219-
inputs:
220-
- input: pipelineArtifact
221-
artifactName: 'packages-esrp-flattened'
222-
targetPath: '$(Pipeline.Workspace)/packages-esrp-flattened'
223-
pool:
224-
name: azsdk-pool-mms-win-2022-general
225-
image: azsdk-pool-mms-win-2022-1espt
226-
os: windows
227-
strategy:
228-
runOnce:
229-
deploy:
230-
steps:
231-
- template: /eng/pipelines/templates/steps/java-esrp-publishing.yml
232-
parameters:
233-
FlattenedDirectory: $(Pipeline.Workspace)/packages-esrp-flattened
208+
- ${{ if eq(parameters.PublicFeedUrl, 'maven.org') }}:
209+
- deployment: PublishESRPPackage
210+
displayName: "Publish to Maven Central via ESRP"
211+
condition: and(succeeded(), ne(variables['Skip.PublishPackage'], 'true'))
212+
# This timeout shouldn't be necessary once we're able to parallelize better. Right now,
213+
# this is here to ensure larger areas (30+) libraries don't time out.
214+
timeoutInMinutes: 120
215+
environment: ${{ parameters.PublicPublishEnvironment }}
216+
dependsOn: TagRepository
217+
218+
templateContext:
219+
type: releaseJob
220+
isProduction: true
221+
inputs:
222+
- input: pipelineArtifact
223+
artifactName: 'packages-esrp-flattened'
224+
targetPath: '$(Pipeline.Workspace)/packages-esrp-flattened'
225+
pool:
226+
name: azsdk-pool
227+
image: windows-2022
228+
os: windows
229+
strategy:
230+
runOnce:
231+
deploy:
232+
steps:
233+
- template: /eng/pipelines/templates/steps/java-esrp-publishing.yml
234+
parameters:
235+
FlattenedDirectory: $(Pipeline.Workspace)/packages-esrp-flattened
234236

235237
- job: PublishDevFeedPackage
236238
displayName: "Publish to Java Dev feed"
237239
condition: and(succeeded(), ne(variables['Skip.PublishPackage'], 'true'))
238240
# This timeout shouldn't be necessary once we're able to parallelize better. Right now,
239241
# this is here to ensure larger areas (30+) libraries don't time out.
240242
timeoutInMinutes: 120
241-
dependsOn: PublishESRPPackage
243+
${{ if eq(parameters.PublicFeedUrl, 'maven.org') }}:
244+
dependsOn: PublishESRPPackage
242245
pool:
243246
name: $(WINDOWSPOOL)
244247
image: $(WINDOWSVMIMAGE)
@@ -258,17 +261,20 @@ stages:
258261
displayName: 'Download Artifacts'
259262
artifact: packages-signed
260263
- template: tools/gpg/gpg.yml@azure-sdk-build-tools
264+
265+
- ${{ if ne(parameters.PublicFeedUrl, 'maven.org') }}:
266+
- template: /eng/pipelines/templates/steps/java-dev-feed-publishing.yml
267+
parameters:
268+
RepositoryUrl: ${{ parameters.PublicFeedUrl }}
269+
261270
# Publish to the azure-sdk-for-java feed.
262271
- template: /eng/pipelines/templates/steps/java-dev-feed-publishing.yml
263-
parameters:
264-
ArtifactDirectory: $(Pipeline.Workspace)/packages-signed
265-
RepositoryUrl: https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-java/maven/v1
266-
Target: JavaDevFeed
267-
JavaRepoRoot: $(Pipeline.Workspace)/azure-sdk-for-java
272+
268273
- template: /eng/common/pipelines/templates/steps/publish-1es-artifact.yml
269274
parameters:
270275
ArtifactName: packages-javadevfeed-$(System.JobAttempt)
271276
ArtifactPath: $(Pipeline.Workspace)/packages-signed
277+
272278
- template: /eng/common/pipelines/templates/steps/create-apireview.yml
273279
parameters:
274280
ArtifactPath: $(Pipeline.Workspace)/packages-signed
@@ -281,7 +287,7 @@ stages:
281287
- job: UpdatePackageVersion
282288
displayName: "Update Package Version"
283289
condition: and(succeeded(), ne(variables['Skip.UpdatePackageVersion'], 'true'))
284-
dependsOn: PublishESRPPackage
290+
dependsOn: PublishDevFeedPackage
285291
pool:
286292
name: $(WINDOWSPOOL)
287293
image: $(WINDOWSVMIMAGE)
@@ -367,7 +373,7 @@ stages:
367373
- job: PublishDocs
368374
displayName: Publish Docs to GitHubIO Blob Storage
369375
condition: and(succeeded(), ne(variables['Skip.PublishDocs'], 'true'))
370-
dependsOn: PublishESRPPackage
376+
dependsOn: PublishDevFeedPackage
371377
pool:
372378
name: $(WINDOWSPOOL)
373379
image: $(WINDOWSVMIMAGE)
@@ -399,9 +405,6 @@ stages:
399405
- job: PublishPackages
400406
condition: or(eq(variables['SetDevVersion'], 'true'), and(eq(variables['Build.Reason'],'Schedule'), eq(variables['System.TeamProject'], 'internal')))
401407
displayName: Publish package to daily feed
402-
variables:
403-
- name: RepositoryUrl
404-
value: https://pkgs.dev.azure.com/azure-sdk/internal/_packaging/azure-sdk-for-java-pr/maven/v1
405408

406409
templateContext:
407410
outputs:
@@ -434,14 +437,16 @@ stages:
434437
- pwsh: |
435438
# For safety default to publishing to the private feed.
436439
# Publish to https://pkgs.dev.azure.com/azure-sdk/internal/_packaging/azure-sdk-for-java-pr/maven/v1
440+
441+
$devFeedUrl = "https://pkgs.dev.azure.com/azure-sdk/internal/_packaging/azure-sdk-for-java-pr/maven/v1"
437442
if ('$(Build.Repository.Name)' -eq 'Azure/azure-sdk-for-java') {
438-
# Publish to the public feed
439-
# Publish to https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-java/maven/v1
440-
echo "##vso[task.setvariable variable=RepositoryUrl]https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-java/maven/v1"
443+
$devFeedUrl = "https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-java/maven/v1"
441444
echo "Using Java Public Dev Feed"
442445
} else {
443446
echo "Using Java Private Dev Feed"
444447
}
448+
echo "##vso[task.setvariable variable=RepositoryUrl]$devFeedUrl"
449+
445450
displayName: Setup TargetFeed
446451
447452
- template: tools/gpg/gpg.yml@azure-sdk-build-tools
@@ -452,10 +457,7 @@ stages:
452457
parameters:
453458
ArtifactID: ${{artifact.name}}
454459
GroupID: ${{artifact.groupId}}
455-
ArtifactDirectory: $(Pipeline.Workspace)/packages-signed
456460
RepositoryUrl: $(RepositoryUrl)
457-
Target: JavaDevFeed
458-
JavaRepoRoot: $(Pipeline.Workspace)/azure-sdk-for-java
459461

460462
- job: PublishDocsToNightlyBranch
461463
dependsOn: PublishPackages

eng/pipelines/templates/stages/archetype-java-release-patch.yml

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -171,11 +171,6 @@ stages:
171171
# this is that the azure-sdk-for-java feed will have the package available immediately
172172
# whereas Maven can take several hours for the package to become available.
173173
- template: /eng/pipelines/templates/steps/java-dev-feed-publishing.yml
174-
parameters:
175-
ArtifactDirectory: $(Pipeline.Workspace)/packages-signed
176-
RepositoryUrl: https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-java/maven/v1
177-
Target: JavaDevFeed
178-
JavaRepoRoot: $(Pipeline.Workspace)/azure-sdk-for-java
179174
- template: /eng/common/pipelines/templates/steps/publish-1es-artifact.yml
180175
parameters:
181176
ArtifactName: packages-javadevfeed-$(System.JobAttempt)

eng/pipelines/templates/stages/archetype-java-release-pom-only.yml

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ stages:
105105
- deployment: PublishESRPPackage
106106
displayName: "Publish to Maven Central via ESRP"
107107
condition: and(succeeded(), ne(variables['Skip.PublishPackage'], 'true'))
108-
environment: maven
108+
environment: package-publish
109109
dependsOn: TagRepository
110110

111111
templateContext:
@@ -157,11 +157,7 @@ stages:
157157
parameters:
158158
ArtifactID: ${{artifact.name}}
159159
GroupID: ${{artifact.groupId}}
160-
ArtifactDirectory: $(Pipeline.Workspace)/packages-signed
161-
RepositoryUrl: https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-java/maven/v1
162-
Target: JavaDevFeed
163-
JavaRepoRoot: $(Pipeline.Workspace)/azure-sdk-for-java
164-
- template: /eng/common/pipelines/templates/steps/publish-1es-artifact.yml
160+
- template: /eng/common/pipelines/templates/steps/publish-1es-artifact.yml
165161
parameters:
166162
ArtifactName: packages-${{artifact.name}}-javadevfeed-$(System.JobAttempt)
167163
ArtifactPath: $(Pipeline.Workspace)/packages-signed

eng/pipelines/templates/stages/archetype-sdk-client.yml

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,12 @@ parameters:
6161
- name: EnvVars
6262
type: object
6363
default: {}
64+
- name: PublicFeedUrl
65+
type: string
66+
default: 'maven.org'
67+
- name: PublicPublishEnvironment
68+
type: string
69+
default: 'package-publish'
6470

6571
extends:
6672
template: /eng/pipelines/templates/stages/1es-redirect.yml
@@ -152,7 +158,6 @@ extends:
152158
- ${{ if ne(artifact.releaseInBatch, 'false') }}:
153159
- ${{ artifact }}
154160
TestPipeline: ${{ parameters.TestPipeline }}
155-
# This where the MavenBreakGlassApprovers is set for the release tasks.
156-
${{ if and(in(variables['Build.Reason'], 'Manual', ''), eq(parameters.ReleaseDependsOnLiveTests, 'false')) }}:
157-
Environment: 'MavenBreakGlassApprovers'
161+
PublicFeedUrl: ${{ parameters.PublicFeedUrl }}
162+
PublicPublishEnvironment: ${{ parameters.PublicPublishEnvironment }}
158163

Lines changed: 18 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,46 +1,26 @@
11
parameters:
2-
ArtifactDirectory: not-specified
3-
OutputDirectory: not-specified
4-
RepositoryUrl: not-specified
2+
ArtifactDirectory: $(Pipeline.Workspace)/packages-signed
3+
RepositoryUrl: https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-java/maven/v1
54
GroupID:
65
ArtifactID:
76
GPGExecutablePath: $(Pipeline.Workspace)/azure-sdk-build-tools/tools/gpg/bin/gpg.exe
87
JavaRepoRoot: $(Pipeline.Workspace)/azure-sdk-for-java
98
ShouldPublish: true
109

1110
steps:
12-
- ${{if eq(parameters.Target, 'JavaDevFeed')}}:
13-
- task: PowerShell@2
14-
displayName: 'Publish to Java Dev Feed'
15-
inputs:
16-
pwsh: true
17-
workingDirectory: $(Agent.BuildDirectory)
18-
filePath: ${{ parameters.JavaRepoRoot }}/eng/scripts/Publish-MavenPackages.ps1
19-
arguments: >
20-
-ArtifactDirectory ${{ parameters.ArtifactDirectory }}
21-
-GroupIDFilter "${{ parameters.GroupID }}"
22-
-ArtifactIDFilter "${{ parameters.ArtifactID }}"
23-
-RepositoryUrl ${{ parameters.RepositoryUrl }}
24-
-RepositoryUsername nobody
25-
-RepositoryPassword $(System.AccessToken)
26-
-GPGExecutablePath ${{ parameters.GPGExecutablePath }}
27-
-ShouldPublish:$${{parameters.ShouldPublish}}
28-
-InformationAction Continue
29-
30-
- ${{if eq(parameters.Target, 'AndroidDevFeed')}}:
31-
- task: PowerShell@2
32-
displayName: 'Publish to Andriod Public Dev Feed'
33-
inputs:
34-
pwsh: true
35-
workingDirectory: $(Agent.BuildDirectory)
36-
filePath: ${{ parameters.JavaRepoRoot }}/eng/scripts/Publish-MavenPackages.ps1
37-
arguments: >
38-
-ArtifactDirectory ${{ parameters.ArtifactDirectory }}
39-
-GroupIDFilter "${{ parameters.GroupID }}"
40-
-ArtifactIDFilter "${{ parameters.ArtifactID }}"
41-
-RepositoryUrl https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-android/maven/v1
42-
-RepositoryUsername nobody
43-
-RepositoryPassword $(System.AccessToken)
44-
-GPGExecutablePath ${{ parameters.GPGExecutablePath }}
45-
-ShouldPublish:$${{parameters.ShouldPublish}}
46-
-InformationAction Continue
11+
- task: PowerShell@2
12+
displayName: 'Publish to DevOps Feed ${{ parameters.RepositoryUrl }}'
13+
inputs:
14+
pwsh: true
15+
workingDirectory: $(Agent.BuildDirectory)
16+
filePath: ${{ parameters.JavaRepoRoot }}/eng/scripts/Publish-MavenPackages.ps1
17+
arguments: >
18+
-ArtifactDirectory ${{ parameters.ArtifactDirectory }}
19+
-GroupIDFilter "${{ parameters.GroupID }}"
20+
-ArtifactIDFilter "${{ parameters.ArtifactID }}"
21+
-RepositoryUrl ${{ parameters.RepositoryUrl }}
22+
-RepositoryUsername nobody
23+
-RepositoryPassword $(System.AccessToken)
24+
-GPGExecutablePath ${{ parameters.GPGExecutablePath }}
25+
-ShouldPublish:$${{ parameters.ShouldPublish }}
26+
-InformationAction Continue

sdk/storage/ci.yml

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,10 +110,16 @@ parameters:
110110
displayName: 'azure-storage-queue'
111111
type: boolean
112112
default: true
113+
- name: ReleaseToDevOpsOnly
114+
displayName: 'Release package to DevOps feed instead of maven.org'
115+
type: boolean
116+
default: false
113117

114118
extends:
115119
template: /eng/pipelines/templates/stages/archetype-sdk-client.yml
116120
parameters:
121+
${{ if eq(parameters.ReleaseToDevOpsOnly, true) }}:
122+
PublicFeedUrl: 'https://pkgs.dev.azure.com/azure-sdk/public/_packaging/storage-staging/maven/v1'
117123
ServiceDirectory: storage
118124
Artifacts:
119125
- name: azure-storage-common

sdk/template/ci.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -64,11 +64,23 @@ parameters:
6464
values:
6565
- release
6666
- canary
67+
- name: ReleaseToDevOpsOnly
68+
displayName: 'Release package to DevOps feed instead of maven.org'
69+
type: boolean
70+
default: false
71+
- name: AutoApproveRelease
72+
displayName: 'Automatically approve the release stage'
73+
type: boolean
74+
default: false
6775

6876
extends:
6977
template: ../../eng/pipelines/templates/stages/archetype-sdk-client.yml
7078
parameters:
7179
oneESTemplateTag: ${{ parameters.oneESTemplateTag }}
80+
${{ if eq(parameters.ReleaseToDevOpsOnly, true) }}:
81+
PublicFeedUrl: 'https://pkgs.dev.azure.com/azure-sdk/public/_packaging/storage-staging/maven/v1'
82+
${{ if eq(parameters.AutoApproveRelease, true) }}:
83+
PublicPublishEnvironment: none
7284
ServiceDirectory: template
7385
ReleaseDependsOnLiveTests: ${{ parameters.release_dependsonlivetests }}
7486
# If you're copying template for a new pipeline, remove this variable. It is only valid for the template pipeline.

0 commit comments

Comments
 (0)