Skip to content

Commit 32bef6d

Browse files
authored
Allow for publishing to DevOps feed instead of PyPi (#41600)
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 7f6b1c1 commit 32bef6d

File tree

4 files changed

+76
-32
lines changed

4 files changed

+76
-32
lines changed

eng/pipelines/templates/stages/archetype-python-release.yml

Lines changed: 48 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ parameters:
66
DependsOn: Build
77
DocArtifact: 'documentation'
88
DevFeedName: 'public/azure-sdk-for-python'
9+
PublicFeed: PyPi
10+
PublicPublishEnvironment: package-publish
911
TargetDocRepoOwner: ''
1012
TargetDocRepoName: ''
1113
PackageSourceOverride: "https://pkgs.dev.azure.com/azure-sdk/public/_packaging/azure-sdk-for-python/pypi/simple/"
@@ -93,9 +95,9 @@ stages:
9395

9496
- ${{if ne(artifact.skipPublishPackage, 'true')}}:
9597
- deployment: PublishPackage
96-
displayName: "Publish to PyPI"
98+
displayName: "Publish to ${{ parameters.PublicFeed }}"
9799
condition: and(succeeded(), ne(variables['Skip.PublishPackage'], 'true'))
98-
environment: package-publish
100+
environment: ${{ parameters.PublicPublishEnvironment }}
99101
dependsOn: TagRepository
100102

101103
templateContext:
@@ -127,39 +129,54 @@ stages:
127129
python -m pip install -r $(Pipeline.Workspace)/release_artifact/release_requirements.txt
128130
displayName: Install Release Dependencies
129131
132+
- ${{ if eq(parameters.PublicFeed, 'PyPi') }}:
133+
- pwsh: |
134+
$esrpDirectory = "$(Pipeline.Workspace)/esrp-release/${{parameters.ArtifactName}}/${{artifact.name}}"
135+
New-Item -ItemType Directory -Force -Path $esrpDirectory
136+
137+
Get-ChildItem -Path "$(Pipeline.Workspace)/${{parameters.ArtifactName}}/${{artifact.name}}" `
138+
| Where-Object { ($_.Name -like "*.tar.gz" -or $_.Name -like "*.whl") } `
139+
| Copy-Item -Destination $esrpDirectory
140+
141+
Get-ChildItem $esrpDirectory
142+
displayName: Isolate files for ESRP Publish
143+
144+
- task: EsrpRelease@9
145+
displayName: 'Publish to ESRP'
146+
inputs:
147+
ConnectedServiceName: 'Azure SDK PME Managed Identity'
148+
ClientId: '5f81938c-2544-4f1f-9251-dd9de5b8a81b'
149+
DomainTenantId: '975f013f-7f24-47e8-a7d3-abc4752bf346'
150+
UseManagedIdentity: true
151+
KeyVaultName: 'kv-azuresdk-codesign'
152+
SignCertName: 'azure-sdk-esrp-release-certificate'
153+
Intent: 'PackageDistribution'
154+
ContentType: 'PyPI'
155+
FolderLocation: $(Pipeline.Workspace)/esrp-release/${{parameters.ArtifactName}}/${{artifact.name}}
156+
Owners: $(Build.RequestedForEmail)
157+
Approvers: $(Build.RequestedForEmail)
158+
ServiceEndpointUrl: 'https://api.esrp.microsoft.com'
159+
MainPublisher: 'ESRPRELPACMANTEST'
160+
161+
- ${{ if ne(parameters.PublicFeed, 'PyPi') }}:
162+
- task: TwineAuthenticate@0
163+
displayName: 'Authenticate to feed: ${{parameters.PublicFeed}}'
164+
inputs:
165+
artifactFeeds: ${{parameters.PublicFeed}}
166+
167+
- script: |
168+
set -e
169+
twine upload --repository ${{parameters.PublicFeed}} --config-file $(PYPIRC_PATH) $(Pipeline.Workspace)/${{parameters.ArtifactName}}/${{artifact.name}}/*.whl
170+
echo "Uploaded whl to devops feed"
171+
twine upload --repository ${{parameters.PublicFeed}} --config-file $(PYPIRC_PATH) $(Pipeline.Workspace)/${{parameters.ArtifactName}}/${{artifact.name}}/*.tar.gz
172+
echo "Uploaded sdist to devops feed"
173+
displayName: 'Publish package to feed: ${{parameters.PublicFeed}}'
174+
130175
- task: TwineAuthenticate@0
131176
displayName: 'Authenticate to feed: ${{parameters.DevFeedName}}'
132177
inputs:
133178
artifactFeeds: ${{parameters.DevFeedName}}
134-
135-
- pwsh: |
136-
$esrpDirectory = "$(Pipeline.Workspace)/esrp-release/${{parameters.ArtifactName}}/${{artifact.name}}"
137-
New-Item -ItemType Directory -Force -Path $esrpDirectory
138-
139-
Get-ChildItem -Path "$(Pipeline.Workspace)/${{parameters.ArtifactName}}/${{artifact.name}}" `
140-
| Where-Object { ($_.Name -like "*.tar.gz" -or $_.Name -like "*.whl") } `
141-
| Copy-Item -Destination $esrpDirectory
142-
143-
Get-ChildItem $esrpDirectory
144-
displayName: Isolate files for ESRP Publish
145-
146-
- task: EsrpRelease@9
147-
displayName: 'Publish to ESRP'
148-
inputs:
149-
ConnectedServiceName: 'Azure SDK PME Managed Identity'
150-
ClientId: '5f81938c-2544-4f1f-9251-dd9de5b8a81b'
151-
DomainTenantId: '975f013f-7f24-47e8-a7d3-abc4752bf346'
152-
UseManagedIdentity: true
153-
KeyVaultName: 'kv-azuresdk-codesign'
154-
SignCertName: 'azure-sdk-esrp-release-certificate'
155-
Intent: 'PackageDistribution'
156-
ContentType: 'PyPI'
157-
FolderLocation: $(Pipeline.Workspace)/esrp-release/${{parameters.ArtifactName}}/${{artifact.name}}
158-
Owners: $(Build.RequestedForEmail)
159-
Approvers: $(Build.RequestedForEmail)
160-
ServiceEndpointUrl: 'https://api.esrp.microsoft.com'
161-
MainPublisher: 'ESRPRELPACMANTEST'
162-
179+
163180
- script: |
164181
set -e
165182
twine upload --repository ${{parameters.DevFeedName}} --config-file $(PYPIRC_PATH) $(Pipeline.Workspace)/${{parameters.ArtifactName}}/${{artifact.name}}/*.whl

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,12 @@ parameters:
4141
- name: DevFeedName
4242
type: string
4343
default: public/azure-sdk-for-python
44+
- name: PublicFeed
45+
type: string
46+
default: 'PyPi'
47+
- name: PublicPublishEnvironment
48+
type: string
49+
default: package-publish
4450
- name: TargetDocRepoOwner
4551
type: string
4652
default: MicrosoftDocs
@@ -127,4 +133,5 @@ extends:
127133
TargetDocRepoOwner: ${{ parameters.TargetDocRepoOwner }}
128134
TargetDocRepoName: ${{ parameters.TargetDocRepoName }}
129135
DevFeedName: ${{ parameters.DevFeedName }}
130-
136+
PublicFeed: ${{ parameters.PublicFeed }}
137+
PublicPublishEnvironment: ${{ parameters.PublicPublishEnvironment }}

sdk/storage/ci.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
# NOTE: Please refer to https://aka.ms/azsdk/engsys/ci-yaml before editing this file.
22

3+
parameters:
4+
- name: ReleaseToDevOpsOnly
5+
displayName: 'Release package to DevOps feed instead of PyPi'
6+
type: boolean
7+
default: false
8+
39
trigger:
410
branches:
511
include:
@@ -28,6 +34,8 @@ pr:
2834
extends:
2935
template: ../../eng/pipelines/templates/stages/archetype-sdk-client.yml
3036
parameters:
37+
${{ if eq(parameters.ReleaseToDevOpsOnly, 'true') }}:
38+
PublicFeed: 'public/storage-staging'
3139
ServiceDirectory: storage
3240
TestProxy: true
3341
TestTimeoutInMinutes: 120

sdk/template/ci.yml

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,14 @@ pr:
3131
- eng/common/
3232

3333
parameters:
34+
- name: ReleaseToDevOpsOnly
35+
displayName: 'Release package to DevOps feed instead of PyPi'
36+
type: boolean
37+
default: false
38+
- name: AutoApproveRelease
39+
displayName: 'Automatically approve the release stage'
40+
type: boolean
41+
default: false
3442
# Switch to canary to test canary 1es branch. 1es template validation will set this parameter
3543
# to canary on run.
3644
- name: oneESTemplateTag
@@ -43,6 +51,10 @@ parameters:
4351
extends:
4452
template: ../../eng/pipelines/templates/stages/archetype-sdk-client.yml
4553
parameters:
54+
${{ if eq(parameters.ReleaseToDevOpsOnly, 'true') }}:
55+
PublicFeed: 'public/storage-staging'
56+
${{ if eq(parameters.AutoApproveRelease, 'true') }}:
57+
PublicPublishEnvironment: none
4658
oneESTemplateTag: ${{ parameters.oneESTemplateTag }}
4759
ServiceDirectory: template
4860
TestProxy: true

0 commit comments

Comments
 (0)