From 58f2b2c8d0196e06fe7260c88384a5741e02a73e Mon Sep 17 00:00:00 2001 From: Travis Plunk Date: Wed, 9 Nov 2022 13:55:35 -0800 Subject: [PATCH] Update to azCopy 10 (#18509) --- build.psm1 | 10 ++++---- .../azureDevOps/releasePipeline.yml | 1 + .../templates/release-CreateGitHubDraft.yml | 22 ++++++++++++++---- .../templates/release-MsixBundle.yml | 23 ++++++++----------- .../azureDevOps/templates/vpackReleaseJob.yml | 13 +++++++++-- 5 files changed, 45 insertions(+), 24 deletions(-) diff --git a/build.psm1 b/build.psm1 index 713ce06f36..ae9938a3f4 100644 --- a/build.psm1 +++ b/build.psm1 @@ -3341,13 +3341,15 @@ function Install-AzCopy { return } - $destination = "$env:TEMP\azcopy81.msi" - Invoke-WebRequest "https://aka.ms/downloadazcopy" -OutFile $destination - Start-Process -FilePath $destination -ArgumentList "/quiet" -Wait + $destination = "$env:TEMP\azcopy10.zip" + $downloadLocation = (Invoke-WebRequest -Uri https://aka.ms/downloadazcopy-v10-windows -MaximumRedirection 0 -ErrorAction SilentlyContinue -SkipHttpErrorCheck).headers.location | Select-Object -First 1 + + Invoke-WebRequest -Uri $downloadLocation -OutFile $destination -Verbose + Expand-archive -Path $destination -Destinationpath '$(Agent.ToolsDirectory)\azcopy10' } function Find-AzCopy { - $searchPaths = "C:\Program Files (x86)\Microsoft SDKs\Azure\AzCopy\AzCopy.exe" + $searchPaths = @('$(Agent.ToolsDirectory)\azcopy10\AzCopy.exe', "C:\Program Files (x86)\Microsoft SDKs\Azure\AzCopy\AzCopy.exe", "C:\azcopy10\AzCopy.exe") foreach ($filter in $searchPaths) { $azCopy = Get-ChildItem -Path $filter -Recurse -ErrorAction SilentlyContinue | Select-Object -ExpandProperty FullName -First 1 diff --git a/tools/releaseBuild/azureDevOps/releasePipeline.yml b/tools/releaseBuild/azureDevOps/releasePipeline.yml index 39e0902f02..b0a3d6f52e 100644 --- a/tools/releaseBuild/azureDevOps/releasePipeline.yml +++ b/tools/releaseBuild/azureDevOps/releasePipeline.yml @@ -283,6 +283,7 @@ stages: variables: - group: 'Azure Blob variable group' - group: 'AzDevOpsArtifacts' + - group: ReleasePipelineSecrets dependsOn: AzureBlobPublic steps: - template: templates/release-CreateGitHubDraft.yml diff --git a/tools/releaseBuild/azureDevOps/templates/release-CreateGitHubDraft.yml b/tools/releaseBuild/azureDevOps/templates/release-CreateGitHubDraft.yml index 6eed7fbfd9..dc7cf12663 100644 --- a/tools/releaseBuild/azureDevOps/templates/release-CreateGitHubDraft.yml +++ b/tools/releaseBuild/azureDevOps/templates/release-CreateGitHubDraft.yml @@ -10,15 +10,27 @@ steps: Import-module '$(BUILD.SOURCESDIRECTORY)/build.psm1' Install-AzCopy displayName: Install AzCopy + retryCountOnTaskFailure: 2 - pwsh: | Import-module '$(BUILD.SOURCESDIRECTORY)/build.psm1' $azcopy = Find-AzCopy - & $azcopy /Source:https://$(StorageAccount).blob.core.windows.net/$(AzureVersion) /Dest:$(System.ArtifactsDirectory) /S /SourceKey:$(StorageAccountKey) + Write-Verbose -Verbose "Found AzCopy: $azcopy" + + & $azcopy login --service-principal --application-id $(PowerShellReleaseSPN) + & $azcopy cp https://$(StorageAccount).blob.core.windows.net/$(AzureVersion) $(System.ArtifactsDirectory) --recursive + + $packagesPath = Get-ChildItem -Path $(System.ArtifactsDirectory)\*.deb -Recurse -File | Select-Object -First 1 -ExpandProperty DirectoryName + Write-Host "sending -- vso[task.setvariable variable=PackagesRoot]$packagesPath" + Write-Host "##vso[task.setvariable variable=PackagesRoot]$packagesPath" + displayName: Download Azure Artifacts + retryCountOnTaskFailure: 2 + env: + AZCOPY_SPA_CLIENT_SECRET: $(PowerShellReleaseSPNSecret) - pwsh: | - Get-ChildItem $(System.ArtifactsDirectory)\* -recurse | Select-Object -ExpandProperty Name + Get-ChildItem $(System.ArtifactsDirectory)\* -recurse | Select-Object -ExpandProperty FullName displayName: Capture downloaded artifacts - pwsh: | @@ -26,10 +38,10 @@ steps: displayName: Clone Internal-Tools repository - pwsh: | - $Path = "$(System.ArtifactsDirectory)" + $Path = "$(PackagesRoot)" $OutputPath = Join-Path $Path ‘hashes.sha256’ $srcPaths = @($Path) - $packages = Get-ChildItem -Path $srcPaths -Include * -Recurse + $packages = Get-ChildItem -Path $srcPaths -Include * -Recurse -File $checksums = $packages | ForEach-Object { Write-Verbose -Verbose "Generating checksum file for $($_.FullName)" @@ -77,5 +89,5 @@ steps: Write-Verbose -Verbose "Selected content: `n$clContent" - Publish-ReleaseDraft -Tag '$(ReleaseTag)' -Name '$(ReleaseTag) Release of PowerShell' -Description $clContent -User PowerShell -Repository PowerShell -PackageFolder $(System.ArtifactsDirectory) -Token $(GitHubReleasePat) + Publish-ReleaseDraft -Tag '$(ReleaseTag)' -Name '$(ReleaseTag) Release of PowerShell' -Description $clContent -User PowerShell -Repository PowerShell -PackageFolder $(PackagesRoot) -Token $(GitHubReleasePat) displayName: Publish Release Draft diff --git a/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml b/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml index c883bc0ff0..6f3957d081 100644 --- a/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml +++ b/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml @@ -65,16 +65,13 @@ jobs: Write-Host "##$vstsCommandString" displayName: Create MsixBundle - - pwsh: | - Import-module '$(BUILD.SOURCESDIRECTORY)/build.psm1' - Install-AzCopy - displayName: Install AzCopy - - - pwsh: | - ## We use AzCopy v8.1 in our release pipeline, see the documentation at: - ## https://docs.microsoft.com/en-us/previous-versions/azure/storage/storage-use-azcopy - - Import-module '$(BUILD.SOURCESDIRECTORY)/build.psm1' - $azcopy = Find-AzCopy - & $azcopy /Source:$(BundleDir) /Dest:https://$(StorageAccount).blob.core.windows.net/$(AzureVersion)-private /DestKey:$(StorageAccountKey) /Pattern:*.msixbundle /Y - displayName: Upload MSIX Bundle package to Az Blob + - task: AzureFileCopy@4 + displayName: 'Upload MSIX Bundle package to Az Blob' + inputs: + SourcePath: '$(BundleDir)/*.msixbundle' + azureSubscription: '$(AzureFileCopySubscription)' + Destination: AzureBlob + storage: '$(StorageAccount)' + ContainerName: '$(AzureVersion)-private' + resourceGroup: '$(StorageResourceGroup)' + condition: succeeded() diff --git a/tools/releaseBuild/azureDevOps/templates/vpackReleaseJob.yml b/tools/releaseBuild/azureDevOps/templates/vpackReleaseJob.yml index a51818e4ac..3e58295ad8 100644 --- a/tools/releaseBuild/azureDevOps/templates/vpackReleaseJob.yml +++ b/tools/releaseBuild/azureDevOps/templates/vpackReleaseJob.yml @@ -5,6 +5,7 @@ jobs: - job: vpack_${{ parameters.architecture }} variables: - group: vPack + - group: ReleasePipelineSecrets displayName: Build and Publish VPack - ${{ parameters.architecture }} condition: succeeded() @@ -31,14 +32,22 @@ jobs: Import-module '$(BUILD.SOURCESDIRECTORY)/build.psm1' Install-AzCopy displayName: Install AzCopy + retryCountOnTaskFailure: 2 - pwsh: | Import-module '$(BUILD.SOURCESDIRECTORY)/build.psm1' $azcopy = Find-AzCopy + Write-Verbose -Verbose "Found AzCopy: $azcopy" - Write-Host "running: $azcopy /Source:https://$(StorageAccount).blob.core.windows.net/$(AzureVersion) /Dest:$(System.ArtifactsDirectory) /S /SourceKey:****** /Pattern:PowerShell-$(Version)-win-${{ parameters.architecture }}.zip /Z:$(AGENT.TEMPDIRECTORY)" - & $azcopy /Source:https://$(StorageAccount).blob.core.windows.net/$(AzureVersion) /Dest:$(System.ArtifactsDirectory) /S /SourceKey:$(StorageAccountKey) /Pattern:PowerShell-$(Version)-win-${{ parameters.architecture }}.zip /Z:$(AGENT.TEMPDIRECTORY) + & $azcopy login --service-principal --application-id $(PowerShellReleaseSPN) + + Write-Host "running: $azcopy cp https://$(StorageAccount).blob.core.windows.net/$(AzureVersion)/PowerShell-$(Version)-win-${{ parameters.architecture }}.zip $(System.ArtifactsDirectory)" + + & $azcopy cp https://$(StorageAccount).blob.core.windows.net/$(AzureVersion)/PowerShell-$(Version)-win-${{ parameters.architecture }}.zip $(System.ArtifactsDirectory) displayName: 'Download Azure Artifacts' + retryCountOnTaskFailure: 2 + env: + AZCOPY_SPA_CLIENT_SECRET: $(PowerShellReleaseSPNSecret) - pwsh: 'Get-ChildItem $(System.ArtifactsDirectory)\* -recurse | Select-Object -ExpandProperty Name' displayName: 'Capture Artifact Listing'