Skip to content

Commit 1329fcd

Browse files
adityapatwardhanchrisdent-de
authored andcommitted
Copy azure blob with PowerShell global tool to private blob and move to CDN during release (PowerShell#20659)
1 parent 3be0d03 commit 1329fcd

File tree

4 files changed

+106
-17
lines changed

4 files changed

+106
-17
lines changed

tools/releaseBuild/azureDevOps/releasePipeline.yml

Lines changed: 44 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -301,8 +301,8 @@ stages:
301301
Update and merge the changelog for the release.
302302
This step is required for creating GitHub draft release.
303303
304-
- stage: GitHubDraftRelease
305-
displayName: Create GitHub draft release
304+
- stage: BlobPublic
305+
displayName: Make Blob Public
306306
# do not include stages that are likely to fail in dependency as there is no way to force deploy.
307307
dependsOn: UpdateChangeLog
308308

@@ -325,6 +325,38 @@ stages:
325325
steps:
326326
- template: templates/release-MakeContainerPublic.yml
327327

328+
- template: templates/release/approvalJob.yml
329+
parameters:
330+
displayName: Copy Global tool packages to PSInfra storage
331+
jobName: CopyBlobApproval
332+
instructions: |
333+
Approval for Copy global tool packages to PSInfra storage
334+
335+
- job: PSInfraBlobPublic
336+
displayName: Copy global tools to PSInfra storage
337+
dependsOn: CopyBlobApproval
338+
339+
pool:
340+
name: PowerShell1ES
341+
demands:
342+
- ImageOverride -equals PSMMS2019-Secure
343+
344+
variables:
345+
- group: 'PSInfraStorage'
346+
347+
steps:
348+
- template: templates/release-CopyGlobalTools.yml
349+
parameters:
350+
sourceContainerName: 'tool-private'
351+
destinationContainerName: 'tool'
352+
sourceStorageAccountName: '$(GlobalToolStorageAccount)'
353+
destinationStorageAccountName: '$(PSInfraStorageAccount)'
354+
blobPrefix: '$(Version)'
355+
356+
- stage: GitHubTasks
357+
displayName: GitHub tasks
358+
dependsOn: BlobPublic
359+
jobs:
328360
- job: GitHubDraft
329361
displayName: Create GitHub Draft release
330362

@@ -337,28 +369,24 @@ stages:
337369
- group: 'Azure Blob variable group'
338370
- group: 'AzDevOpsArtifacts'
339371
- group: ReleasePipelineSecrets
340-
dependsOn: AzureBlobPublic
341372
steps:
342373
- template: templates/release-CreateGitHubDraft.yml
343374

344-
- stage: GitHubManualTasks
345-
displayName: GitHub manual tasks
346-
dependsOn: GitHubDraftRelease
347-
jobs:
348375
- deployment: PushTag
376+
dependsOn: GitHubDraft
349377
displayName: Push Git Tag
350378
pool : server
351379
environment: PSReleasePushTag
352380

353381
- deployment: MakeDraftPublic
382+
dependsOn: PushTag
354383
displayName: Make GitHub Draft public
355384
pool : server
356385
environment: PSReleaseDraftPublic
357-
dependsOn: PushTag
358386

359387
- stage: PublishPackages
360388
displayName: Publish packages
361-
dependsOn: GitHubManualTasks
389+
dependsOn: GitHubTasks
362390
jobs:
363391
- job: PublishNuget
364392

@@ -420,7 +448,7 @@ stages:
420448
- stage: ReleaseDocker
421449
displayName: Release Docker
422450
dependsOn:
423-
- GitHubManualTasks
451+
- GitHubTasks
424452
jobs:
425453
- deployment: ReleaseDocker
426454
displayName: Release Docker
@@ -519,7 +547,7 @@ stages:
519547
Notify the PM team to start the process of releasing to MU.
520548
521549
- stage: UpdateDotnetDocker
522-
dependsOn: GitHubManualTasks
550+
dependsOn: GitHubTasks
523551
displayName: Update DotNet SDK Docker images
524552
jobs:
525553
- template: templates/release/approvalJob.yml
@@ -534,7 +562,7 @@ stages:
534562
4. create PR targeting nightly branch
535563
536564
- stage: UpdateWinGet
537-
dependsOn: GitHubManualTasks
565+
dependsOn: GitHubTasks
538566
displayName: Add manifest entry to winget
539567
jobs:
540568
- template: templates/release/approvalJob.yml
@@ -545,7 +573,7 @@ stages:
545573
This is typically done by the community 1-2 days after the release.
546574
547575
- stage: PublishMsix
548-
dependsOn: GitHubManualTasks
576+
dependsOn: GitHubTasks
549577
displayName: Publish MSIX to store
550578
jobs:
551579
- template: templates/release/approvalJob.yml
@@ -556,7 +584,7 @@ stages:
556584
Ask Steve to release MSIX bundle package to Store
557585
558586
- stage: BuildInfoJson
559-
dependsOn: GitHubManualTasks
587+
dependsOn: GitHubTasks
560588
displayName: Upload BuildInfoJson
561589
jobs:
562590
- deployment: UploadJson
@@ -577,7 +605,7 @@ stages:
577605
- template: templates/release-BuildJson.yml
578606

579607
- stage: ReleaseVPack
580-
dependsOn: GitHubManualTasks
608+
dependsOn: GitHubTasks
581609
displayName: Release VPack
582610
jobs:
583611
- job: KickoffvPack
@@ -626,7 +654,7 @@ stages:
626654
}
627655
628656
- stage: ReleaseDeps
629-
dependsOn: GitHubManualTasks
657+
dependsOn: GitHubTasks
630658
displayName: Update pwsh.deps.json links
631659
jobs:
632660
- template: templates/release-UpdateDepsJson.yml

tools/releaseBuild/azureDevOps/templates/nuget.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -279,7 +279,7 @@ jobs:
279279
azureSubscription: '$(GlobalToolSubscription)'
280280
Destination: AzureBlob
281281
storage: '$(GlobalToolStorageAccount)'
282-
ContainerName: 'tool'
282+
ContainerName: 'tool-private'
283283
blobPrefix: '$(Version)'
284284
condition: and(succeeded(), eq(variables['SHOULD_SIGN'], 'true'))
285285
retryCountOnTaskFailure: 2
Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
parameters:
2+
- name: sourceContainerName
3+
type: string
4+
default: 'source-container'
5+
6+
- name: destinationContainerName
7+
type: string
8+
default: 'destination-container'
9+
10+
- name: sourceStorageAccountName
11+
type: string
12+
default: 'source-storage-account'
13+
14+
- name: destinationStorageAccountName
15+
type: string
16+
default: 'destination-storage-account'
17+
18+
- name: blobPrefix
19+
type: string
20+
default: '$(Version)'
21+
22+
steps:
23+
- template: release-SetReleaseTagAndContainerName.yml
24+
25+
- pwsh: |
26+
Import-module '$(BUILD.SOURCESDIRECTORY)/build.psm1'
27+
Install-AzCopy
28+
displayName: Install AzCopy
29+
retryCountOnTaskFailure: 2
30+
31+
- pwsh: |
32+
Import-module '$(BUILD.SOURCESDIRECTORY)/build.psm1'
33+
$azcopy = Find-AzCopy
34+
Write-Verbose -Verbose "Found AzCopy: $azcopy"
35+
36+
$sourceContainerName = "${{ parameters.sourceContainerName }}"
37+
$destinationContainerName = "${{ parameters.destinationContainerName }}"
38+
$sourceStorageAccountName = "${{ parameters.sourceStorageAccountName }}"
39+
$destinationStorageAccountName = "${{ parameters.destinationStorageAccountName }}"
40+
$blobPrefix = "${{ parameters.blobPrefix }}"
41+
42+
$sourceBlobUrl = "https://${sourceStorageAccountName}.blob.core.windows.net/${sourceContainerName}/${blobPrefix}"
43+
Write-Verbose -Verbose "Source blob url: $sourceBlobUrl"
44+
$destinationBlobUrl = "https://${destinationStorageAccountName}.blob.core.windows.net/${destinationContainerName}"
45+
Write-Verbose -Verbose "Destination blob url: $destinationBlobUrl"
46+
47+
& $azcopy cp $sourceBlobUrl $destinationBlobUrl --recursive
48+
49+
$packagesPath = Get-ChildItem -Path $(System.ArtifactsDirectory)\*.deb -Recurse -File | Select-Object -First 1 -ExpandProperty DirectoryName
50+
Write-Host "sending -- vso[task.setvariable variable=PackagesRoot]$packagesPath"
51+
Write-Host "##vso[task.setvariable variable=PackagesRoot]$packagesPath"
52+
53+
displayName: Copy blobs
54+
retryCountOnTaskFailure: 2
55+
env:
56+
AZCOPY_AUTO_LOGIN_TYPE: MSI

tools/releaseBuild/azureDevOps/templates/release-SetReleaseTagAndContainerName.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,9 @@ steps:
1818
$vstsCommandString = "vso[task.setvariable variable=AzureVersion]$azureVersion"
1919
Write-Host "sending " + $vstsCommandString
2020
Write-Host "##$vstsCommandString"
21+
22+
$version = '$(ReleaseTag)'.ToLowerInvariant().Substring(1)
23+
$vstsCommandString = "vso[task.setvariable variable=Version]$version"
24+
Write-Host ("sending " + $vstsCommandString)
25+
Write-Host "##$vstsCommandString"
2126
displayName: Set container name

0 commit comments

Comments
 (0)