From 06f1273235d565a21c98404abafbdab3281afcd1 Mon Sep 17 00:00:00 2001 From: Dongbo Wang Date: Tue, 9 Mar 2021 09:11:38 -0800 Subject: [PATCH 01/12] wip --- .../templates/release-MsixBundle.yml | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml diff --git a/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml b/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml new file mode 100644 index 00000000000..9ab6b93d92f --- /dev/null +++ b/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml @@ -0,0 +1,55 @@ +jobs: +- job: ${{ parameters.jobName }} + displayName: ${{ parameters.displayName }} + pool: + vmImage: ${{ parameters.imageName }} + variables: + - group: msixTools + + steps: + - task: DownloadPipelineArtifact@2 + inputs: + source: specific + project: PowerShellCore + pipeline: '696' + preferTriggeringPipeline: true + runVersion: latestFromBranch + runBranch: '$(Build.SourceBranch)' + artifact: finalResults + patterns: '**/*.msix' + path: '$(Pipeline.Workspace)\releasePipeline\msix' + + - pwsh: | + $cmd = Get-Command makeappx.exe -ErrorAction Ignore + if ($cmd) { + Write-Verbose -Verbose 'makeappx available in PATH' + $exePath = $cmd.Source + } else { + Invoke-RestMethod -Uri '$(makeappUrl)' -OutFile '$(Pipeline.Workspace)\releasePipeline\tools\makeappx.zip' + Expand-Archive '\makeappx.zip' -DestinationPath '$(Pipeline.Workspace)\releasePipeline\tools' -Force + $exePath = '$(Pipeline.Workspace)\releasePipeline\tools\makeappx\makeappx.exe' + + Write-Verbose -Verbose 'makeappx is installed:' + Get-ChildItem -Path '$(Pipeline.Workspace)\releasePipeline\tools' -Recurse + } + + $vstsCommandString = "vso[task.setvariable variable=MakeAppxPath]$exePath" + Write-Host "sending " + $vstsCommandString + Write-Host "##$vstsCommandString" + + displayName: Install makeappx tool + + - pwsh: | + $sourceDir = '$(Pipeline.Workspace)\releasePipeline\msix' + $file = Get-ChildItem $sourceDir | Select-Object -First 1 + $prefix = ($file.BaseName -split "-win")[0] + $pkgName = "$prefix.msixbundle" + Write-Verbose -Verbose "Creating $pkgName" + + $makeappxPath = '$(MakeAppxPath)' + $outputDir = '$(Pipeline.Workspace)\releasePipeline\msix\output' + New-Item $outputDir -Type Directory -Force > $null + & $makeappxPath bundle /d $sourceDir /p "$outputDir\$pkgName" + + Get-ChildItem -Path $sourceDir -Recurse + displayName: Build MsixBundle From 614ed3aa1b76b29fcec931fd1414fb4b0d5c2081 Mon Sep 17 00:00:00 2001 From: Dongbo Wang Date: Tue, 9 Mar 2021 10:37:11 -0800 Subject: [PATCH 02/12] Create msixbundle file in release pipeline --- .../azureDevOps/releasePipeline.yml | 8 ++- .../templates/release-MsixBundle.yml | 55 +++++++++++-------- 2 files changed, 40 insertions(+), 23 deletions(-) diff --git a/tools/releaseBuild/azureDevOps/releasePipeline.yml b/tools/releaseBuild/azureDevOps/releasePipeline.yml index 8908ccb11b1..b3ec4e431bf 100644 --- a/tools/releaseBuild/azureDevOps/releasePipeline.yml +++ b/tools/releaseBuild/azureDevOps/releasePipeline.yml @@ -19,6 +19,12 @@ variables: value: none stages: +- stage: MSIXBundle + displayName: Create MSIX Bundle package + dependsOn: [] + jobs: + - template: templates/release-MsixBundle.yml + - stage: ValidateSDK displayName: Validate SDK dependsOn: [] @@ -242,7 +248,7 @@ stages: displayName: Publish MSIX to store jobs: - deployment: PublishMsix - displayName: Publish MSIX to store + displayName: Publish the MSIX Bundle package to store pool: server environment: PSReleasePublishMsix diff --git a/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml b/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml index 9ab6b93d92f..cfa3fde028f 100644 --- a/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml +++ b/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml @@ -1,12 +1,15 @@ jobs: -- job: ${{ parameters.jobName }} - displayName: ${{ parameters.displayName }} +- job: CreateMSIXBundle + displayName: Create .msixbundle file pool: - vmImage: ${{ parameters.imageName }} + vmImage: windows-latest variables: - group: msixTools + - group: 'Azure Blob variable group' steps: + - template: release-SetReleaseTagAndContainerName.yml + - task: DownloadPipelineArtifact@2 inputs: source: specific @@ -20,24 +23,23 @@ jobs: path: '$(Pipeline.Workspace)\releasePipeline\msix' - pwsh: | - $cmd = Get-Command makeappx.exe -ErrorAction Ignore - if ($cmd) { - Write-Verbose -Verbose 'makeappx available in PATH' - $exePath = $cmd.Source - } else { - Invoke-RestMethod -Uri '$(makeappUrl)' -OutFile '$(Pipeline.Workspace)\releasePipeline\tools\makeappx.zip' - Expand-Archive '\makeappx.zip' -DestinationPath '$(Pipeline.Workspace)\releasePipeline\tools' -Force - $exePath = '$(Pipeline.Workspace)\releasePipeline\tools\makeappx\makeappx.exe' - - Write-Verbose -Verbose 'makeappx is installed:' - Get-ChildItem -Path '$(Pipeline.Workspace)\releasePipeline\tools' -Recurse - } + $cmd = Get-Command makeappx.exe -ErrorAction Ignore + if ($cmd) { + Write-Verbose -Verbose 'makeappx available in PATH' + $exePath = $cmd.Source + } else { + Invoke-RestMethod -Uri '$(makeappUrl)' -OutFile '$(Pipeline.Workspace)\releasePipeline\tools\makeappx.zip' + Expand-Archive '\makeappx.zip' -DestinationPath '$(Pipeline.Workspace)\releasePipeline\tools' -Force + $exePath = '$(Pipeline.Workspace)\releasePipeline\tools\makeappx\makeappx.exe' - $vstsCommandString = "vso[task.setvariable variable=MakeAppxPath]$exePath" - Write-Host "sending " + $vstsCommandString - Write-Host "##$vstsCommandString" + Write-Verbose -Verbose 'makeappx is installed:' + Get-ChildItem -Path '$(Pipeline.Workspace)\releasePipeline\tools' -Recurse + } - displayName: Install makeappx tool + $vstsCommandString = "vso[task.setvariable variable=MakeAppxPath]$exePath" + Write-Host "sending " + $vstsCommandString + Write-Host "##$vstsCommandString" + displayName: Install makeappx tool - pwsh: | $sourceDir = '$(Pipeline.Workspace)\releasePipeline\msix' @@ -47,9 +49,18 @@ jobs: Write-Verbose -Verbose "Creating $pkgName" $makeappxPath = '$(MakeAppxPath)' - $outputDir = '$(Pipeline.Workspace)\releasePipeline\msix\output' + $outputDir = '$sourceDir\output' + $bundlePath = "$outputDir\$pkgName" New-Item $outputDir -Type Directory -Force > $null - & $makeappxPath bundle /d $sourceDir /p "$outputDir\$pkgName" + & $makeappxPath bundle /d $sourceDir /p $bundlePath Get-ChildItem -Path $sourceDir -Recurse - displayName: Build MsixBundle + $vstsCommandString = "vso[task.setvariable variable=BundlePath]$bundlePath" + Write-Host "sending " + $vstsCommandString + Write-Host "##$vstsCommandString" + displayName: Create MsixBundle + + - pwsh: | + $azcopy = "C:\Program Files (x86)\Microsoft SDKs\Azure\AzCopy\AzCopy.exe" + & $azcopy /Source:$(BundlePath) /Dest:https://$(StorageAccount).blob.core.windows.net/$(AzureVersion)-private /DestKey:$(StorageAccountKey) + displayName: Upload MSIX Bundle package to Az Blob From 65b7e53c04d4dea0a20d26800a82ef5b2243fd01 Mon Sep 17 00:00:00 2001 From: Dongbo Wang Date: Tue, 9 Mar 2021 10:50:53 -0800 Subject: [PATCH 03/12] Fix syntax error --- .../templates/release-MsixBundle.yml | 20 +++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml b/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml index cfa3fde028f..60867edc72f 100644 --- a/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml +++ b/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml @@ -11,16 +11,16 @@ jobs: - template: release-SetReleaseTagAndContainerName.yml - task: DownloadPipelineArtifact@2 - inputs: - source: specific - project: PowerShellCore - pipeline: '696' - preferTriggeringPipeline: true - runVersion: latestFromBranch - runBranch: '$(Build.SourceBranch)' - artifact: finalResults - patterns: '**/*.msix' - path: '$(Pipeline.Workspace)\releasePipeline\msix' + inputs: + source: specific + project: PowerShellCore + pipeline: '696' + preferTriggeringPipeline: true + runVersion: latestFromBranch + runBranch: '$(Build.SourceBranch)' + artifact: finalResults + patterns: '**/*.msix' + path: '$(Pipeline.Workspace)\releasePipeline\msix' - pwsh: | $cmd = Get-Command makeappx.exe -ErrorAction Ignore From 919cac5918df1c0f466c1620be041bb9a33a1181 Mon Sep 17 00:00:00 2001 From: Dongbo Wang Date: Tue, 9 Mar 2021 12:04:23 -0800 Subject: [PATCH 04/12] Make 'GitHubDraftRelease' depends on 'MSIXBundle' --- tools/releaseBuild/azureDevOps/releasePipeline.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/tools/releaseBuild/azureDevOps/releasePipeline.yml b/tools/releaseBuild/azureDevOps/releasePipeline.yml index b3ec4e431bf..64f3f6d1f77 100644 --- a/tools/releaseBuild/azureDevOps/releasePipeline.yml +++ b/tools/releaseBuild/azureDevOps/releasePipeline.yml @@ -124,6 +124,7 @@ stages: displayName: Create GitHub draft release # do not include stages that are likely to fail in dependency as there is no way to force deploy. dependsOn: + - MSIXBundle - ValidateSDK - PRCreation - ValidatePkgNames From c8a783ee21357650bc8df36e7674033bf9f38901 Mon Sep 17 00:00:00 2001 From: Dongbo Wang Date: Tue, 9 Mar 2021 12:05:56 -0800 Subject: [PATCH 05/12] Use co-ordinate build from the 'size' branch --- tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml b/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml index 60867edc72f..7175751bb09 100644 --- a/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml +++ b/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml @@ -17,7 +17,7 @@ jobs: pipeline: '696' preferTriggeringPipeline: true runVersion: latestFromBranch - runBranch: '$(Build.SourceBranch)' + runBranch: 'size' artifact: finalResults patterns: '**/*.msix' path: '$(Pipeline.Workspace)\releasePipeline\msix' From 8ea0d85ab414325be3059e8b5d2c2d2658356f72 Mon Sep 17 00:00:00 2001 From: Dongbo Wang Date: Tue, 9 Mar 2021 12:22:38 -0800 Subject: [PATCH 06/12] fix runBranch --- tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml b/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml index 7175751bb09..d3336c9fd45 100644 --- a/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml +++ b/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml @@ -17,7 +17,7 @@ jobs: pipeline: '696' preferTriggeringPipeline: true runVersion: latestFromBranch - runBranch: 'size' + runBranch: 'refs/heads/size' artifact: finalResults patterns: '**/*.msix' path: '$(Pipeline.Workspace)\releasePipeline\msix' From 4b270c67bb809c317dbd157aedf5dbe11f565803 Mon Sep 17 00:00:00 2001 From: Dongbo Wang Date: Tue, 9 Mar 2021 12:33:12 -0800 Subject: [PATCH 07/12] Fix install tool step --- .../azureDevOps/templates/release-MsixBundle.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml b/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml index d3336c9fd45..f6d323332f7 100644 --- a/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml +++ b/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml @@ -28,12 +28,14 @@ jobs: Write-Verbose -Verbose 'makeappx available in PATH' $exePath = $cmd.Source } else { - Invoke-RestMethod -Uri '$(makeappUrl)' -OutFile '$(Pipeline.Workspace)\releasePipeline\tools\makeappx.zip' - Expand-Archive '\makeappx.zip' -DestinationPath '$(Pipeline.Workspace)\releasePipeline\tools' -Force - $exePath = '$(Pipeline.Workspace)\releasePipeline\tools\makeappx\makeappx.exe' + $toolsDir = '$(Pipeline.Workspace)\releasePipeline\tools' + New-Item $toolsDir -Type Directory -Force > $null + Invoke-RestMethod -Uri '$(makeappUrl)' -OutFile "$toolsDir\makeappx.zip" + Expand-Archive '\makeappx.zip' -DestinationPath $toolsDir -Force + $exePath = "$toolsDir\makeappx\makeappx.exe" Write-Verbose -Verbose 'makeappx is installed:' - Get-ChildItem -Path '$(Pipeline.Workspace)\releasePipeline\tools' -Recurse + Get-ChildItem -Path $toolsDir -Recurse } $vstsCommandString = "vso[task.setvariable variable=MakeAppxPath]$exePath" From 0c0a2829b4af78986c30a9c799d021e7ff15d963 Mon Sep 17 00:00:00 2001 From: Dongbo Wang Date: Tue, 9 Mar 2021 12:36:43 -0800 Subject: [PATCH 08/12] One more fix --- tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml b/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml index f6d323332f7..24882ef5a04 100644 --- a/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml +++ b/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml @@ -31,7 +31,7 @@ jobs: $toolsDir = '$(Pipeline.Workspace)\releasePipeline\tools' New-Item $toolsDir -Type Directory -Force > $null Invoke-RestMethod -Uri '$(makeappUrl)' -OutFile "$toolsDir\makeappx.zip" - Expand-Archive '\makeappx.zip' -DestinationPath $toolsDir -Force + Expand-Archive "$toolsDir\makeappx.zip" -DestinationPath $toolsDir -Force $exePath = "$toolsDir\makeappx\makeappx.exe" Write-Verbose -Verbose 'makeappx is installed:' From bac4661085832885c9ba59e5bb329beb4303397d Mon Sep 17 00:00:00 2001 From: Dongbo Wang Date: Tue, 9 Mar 2021 12:45:42 -0800 Subject: [PATCH 09/12] Another fix to tool install --- tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml b/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml index 24882ef5a04..d91b06d1701 100644 --- a/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml +++ b/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml @@ -31,7 +31,7 @@ jobs: $toolsDir = '$(Pipeline.Workspace)\releasePipeline\tools' New-Item $toolsDir -Type Directory -Force > $null Invoke-RestMethod -Uri '$(makeappUrl)' -OutFile "$toolsDir\makeappx.zip" - Expand-Archive "$toolsDir\makeappx.zip" -DestinationPath $toolsDir -Force + Expand-Archive "$toolsDir\makeappx.zip" -DestinationPath "$toolsDir\makeappx" -Force $exePath = "$toolsDir\makeappx\makeappx.exe" Write-Verbose -Verbose 'makeappx is installed:' From d0479e972437e9dfabe8acb93d57febf29541a34 Mon Sep 17 00:00:00 2001 From: Dongbo Wang Date: Tue, 9 Mar 2021 14:10:07 -0800 Subject: [PATCH 10/12] Fix minor issue --- .../azureDevOps/templates/release-MsixBundle.yml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml b/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml index d91b06d1701..e7f073dc5ba 100644 --- a/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml +++ b/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml @@ -34,7 +34,7 @@ jobs: Expand-Archive "$toolsDir\makeappx.zip" -DestinationPath "$toolsDir\makeappx" -Force $exePath = "$toolsDir\makeappx\makeappx.exe" - Write-Verbose -Verbose 'makeappx is installed:' + Write-Verbose -Verbose 'makeappx was installed:' Get-ChildItem -Path $toolsDir -Recurse } @@ -50,11 +50,11 @@ jobs: $pkgName = "$prefix.msixbundle" Write-Verbose -Verbose "Creating $pkgName" - $makeappxPath = '$(MakeAppxPath)' - $outputDir = '$sourceDir\output' + $makeappx = '$(MakeAppxPath)' + $outputDir = "$sourceDir\output" $bundlePath = "$outputDir\$pkgName" New-Item $outputDir -Type Directory -Force > $null - & $makeappxPath bundle /d $sourceDir /p $bundlePath + & $makeappx bundle /d $sourceDir /p $bundlePath Get-ChildItem -Path $sourceDir -Recurse $vstsCommandString = "vso[task.setvariable variable=BundlePath]$bundlePath" From bcbb8ee08dfc50f0e0159db1d960375cf126d9f4 Mon Sep 17 00:00:00 2001 From: Dongbo Wang Date: Tue, 9 Mar 2021 14:26:07 -0800 Subject: [PATCH 11/12] Fix upload --- .../azureDevOps/templates/release-MsixBundle.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml b/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml index e7f073dc5ba..2d17d7a0dae 100644 --- a/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml +++ b/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml @@ -52,17 +52,19 @@ jobs: $makeappx = '$(MakeAppxPath)' $outputDir = "$sourceDir\output" - $bundlePath = "$outputDir\$pkgName" New-Item $outputDir -Type Directory -Force > $null - & $makeappx bundle /d $sourceDir /p $bundlePath + & $makeappx bundle /d $sourceDir /p "$outputDir\$pkgName" Get-ChildItem -Path $sourceDir -Recurse - $vstsCommandString = "vso[task.setvariable variable=BundlePath]$bundlePath" + $vstsCommandString = "vso[task.setvariable variable=BundleDir]$outputDir" Write-Host "sending " + $vstsCommandString Write-Host "##$vstsCommandString" displayName: Create MsixBundle - 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 + $azcopy = "C:\Program Files (x86)\Microsoft SDKs\Azure\AzCopy\AzCopy.exe" - & $azcopy /Source:$(BundlePath) /Dest:https://$(StorageAccount).blob.core.windows.net/$(AzureVersion)-private /DestKey:$(StorageAccountKey) + & $azcopy /Source:$(BundleDir) /Dest:https://$(StorageAccount).blob.core.windows.net/$(AzureVersion)-private /DestKey:$(StorageAccountKey) /Pattern:*.msixbundle displayName: Upload MSIX Bundle package to Az Blob From e9d7fdf3511cacb7d0d36051ffc3d488aa84b7b4 Mon Sep 17 00:00:00 2001 From: Dongbo Wang Date: Tue, 9 Mar 2021 14:34:08 -0800 Subject: [PATCH 12/12] Fix the runBranch --- tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml b/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml index 2d17d7a0dae..bab273e96da 100644 --- a/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml +++ b/tools/releaseBuild/azureDevOps/templates/release-MsixBundle.yml @@ -17,7 +17,7 @@ jobs: pipeline: '696' preferTriggeringPipeline: true runVersion: latestFromBranch - runBranch: 'refs/heads/size' + runBranch: '$(Build.SourceBranch)' artifact: finalResults patterns: '**/*.msix' path: '$(Pipeline.Workspace)\releasePipeline\msix'