From c97f2d7fd78576709cd776c9c4d6b44a7a5a1999 Mon Sep 17 00:00:00 2001 From: Travis Plunk Date: Thu, 27 Feb 2020 10:13:29 -0800 Subject: [PATCH] Publish PowerShell `vPack` for stable and better builds (#11960) --- .../azureDevOps/templates/vpackReleaseJob.yml | 86 +++++++++++++++++++ .../releaseBuild/azureDevOps/vpackRelease.yml | 55 ++++++++++++ 2 files changed, 141 insertions(+) create mode 100644 tools/releaseBuild/azureDevOps/templates/vpackReleaseJob.yml create mode 100644 tools/releaseBuild/azureDevOps/vpackRelease.yml diff --git a/tools/releaseBuild/azureDevOps/templates/vpackReleaseJob.yml b/tools/releaseBuild/azureDevOps/templates/vpackReleaseJob.yml new file mode 100644 index 0000000000..97d3bea8d1 --- /dev/null +++ b/tools/releaseBuild/azureDevOps/templates/vpackReleaseJob.yml @@ -0,0 +1,86 @@ +parameters: + architecture: x64 + +jobs: +- job: vpack_${{ parameters.architecture }} + displayName: Build and Publish VPack - ${{ parameters.architecture }} + condition: succeeded() + pool: Package ES Standard Build + steps: + + - template: ./SetVersionVariables.yml + parameters: + ReleaseTagVar: $(ReleaseTagVar) + + - pwsh: | + $azcopy = "C:\Program Files (x86)\Microsoft SDKs\Azure\AzCopy\AzCopy.exe" + + 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) + displayName: 'Download Azure Artifacts' + + - pwsh: 'Get-ChildItem $(System.ArtifactsDirectory)\* -recurse | Select-Object -ExpandProperty Name' + displayName: 'Capture Artifact Listing' + + - pwsh: | + $message = @() + Get-ChildItem $(System.ArtifactsDirectory)\* -recurse -include *.zip, *.msi | ForEach-Object { + if($_.Name -notmatch 'PowerShell-\d\.\d\.\d\-([a-z]*.\d+\-)?win\-(fxdependent|x64|arm32|arm64|x86|fxdependentWinDesktop)\.(msi|zip){1}') + { + $messageInstance = "$($_.Name) is not a valid package name" + $message += $messageInstance + Write-Warning $messageInstance + } + } + + if($message.count -gt 0){throw ($message | out-string)} + displayName: 'Validate Zip and MSI Package Names' + + - pwsh: | + Get-ChildItem $(System.ArtifactsDirectory)\* -recurse -include *.zip, *.msi | ForEach-Object { + if($_.Name -match 'PowerShell-\d\.\d\.\d\-([a-z]*.\d+\-)?win\-(${{ parameters.architecture }})\.(zip){1}') + { + $destDir = "$(System.ArtifactsDirectory)\vpack${{ parameters.architecture }}" + $null = new-item -ItemType Directory -Path $destDir + Expand-Archive -Path $_.FullName -DestinationPath $destDir + $vstsCommandString = "vso[task.setvariable variable=vpackDir]$destDir" + Write-Host "sending " + $vstsCommandString + Write-Host "##$vstsCommandString" + } + } + displayName: 'Extract Zip' + + - pwsh: | + $vpackVersion = '$(version)' + + if('$(VPackPublishOverride)' -ne '' -and '$(VPackPublishOverride)' -ne 'None' ) + { + Write-Host "Using VPackPublishOverride varabile" + $vpackVersion = '$(VPackPublishOverride)' + } + + $vstsCommandString = "vso[task.setvariable variable=vpackVersion]$vpackVersion" + Write-Host "sending " + $vstsCommandString + Write-Host "##$vstsCommandString" + displayName: 'Set vpackVersion' + + - pwsh: | + Get-ChildItem -Path env: + displayName: Capture Environment + condition: succeededOrFailed() + + - task: PkgESVPack@10 + displayName: 'Package ES - VPack ' + env: + SYSTEM_ACCESSTOKEN: $(System.AccessToken) + inputs: + sourceDirectory: '$(vpackDir)' + description: PowerShell ${{ parameters.architecture }} $(version) + pushPkgName: 'PowerShell.${{ parameters.architecture }}' + configurations: Release + platforms: x64 + target: '$(System.ArtifactsDirectory)' + owner: tplunk + provData: false + version: '$(vpackVersion)' + condition: and(succeeded(), eq(variables['Build.Reason'], 'Manual')) diff --git a/tools/releaseBuild/azureDevOps/vpackRelease.yml b/tools/releaseBuild/azureDevOps/vpackRelease.yml new file mode 100644 index 0000000000..48b9e83384 --- /dev/null +++ b/tools/releaseBuild/azureDevOps/vpackRelease.yml @@ -0,0 +1,55 @@ +name: vpack-$(Build.BuildId) +trigger: + branches: + include: + - master + - release* +pr: + branches: + include: + - master + - release* + +variables: + - name: DOTNET_CLI_TELEMETRY_OPTOUT + value: 1 + - name: POWERSHELL_TELEMETRY_OPTOUT + value: 1 + - group: Azure Blob variable group + +# Set AzDevOps Agent to clean the machine after the end of the build +resources: +- repo: self + clean: true + +jobs: +- job: rename + displayName: Name the build + condition: succeeded() + pool: + vmImage: 'windows-latest' + steps: + + - template: ./templates/SetVersionVariables.yml + parameters: + ReleaseTagVar: $(ReleaseTagVar) + + - powershell: Write-Host "##vso[build.updatebuildnumber]$env:BUILD_SOURCEBRANCHNAME-$env:BUILD_SOURCEVERSION-$((get-date).ToString("yyyyMMddhhss"))" + displayName: Set Build Name for Non-PR + condition: ne(variables['Build.Reason'], 'PullRequest') + +- template: ./templates/vpackReleaseJob.yml + parameters: + architecture: x64 + +- template: ./templates/vpackReleaseJob.yml + parameters: + architecture: x86 + +- template: ./templates/vpackReleaseJob.yml + parameters: + architecture: arm32 + +- template: ./templates/vpackReleaseJob.yml + parameters: + architecture: arm64