diff --git a/build/AzurePipelinesTemplates/MUX-BuildDevProject-Steps.yml b/build/AzurePipelinesTemplates/MUX-BuildDevProject-Steps.yml index 7f73cd7980..7176635f21 100644 --- a/build/AzurePipelinesTemplates/MUX-BuildDevProject-Steps.yml +++ b/build/AzurePipelinesTemplates/MUX-BuildDevProject-Steps.yml @@ -64,3 +64,4 @@ steps: - template: MUX-MakeFrameworkPackages-Steps.yml parameters: buildOutputDir: $(buildOutputDir) + signOutput: ${{parameters.signOutput}} diff --git a/build/AzurePipelinesTemplates/MUX-MakeFrameworkPackages-Steps.yml b/build/AzurePipelinesTemplates/MUX-MakeFrameworkPackages-Steps.yml index 1abe9feb70..ffaca1823a 100644 --- a/build/AzurePipelinesTemplates/MUX-MakeFrameworkPackages-Steps.yml +++ b/build/AzurePipelinesTemplates/MUX-MakeFrameworkPackages-Steps.yml @@ -1,5 +1,6 @@ parameters: buildOutputDir: '$(Build.SourcesDirectory)\Artifacts\drop' + signOutput: false steps: - powershell: | @@ -25,3 +26,42 @@ steps: } } displayName: 'Make FrameworkPackages' + + - ${{ if eq( parameters.signOutput, true) }}: + - task: EsrpCodeSigning@1 + displayName: First Party StoreSign Framework Package + inputs: + ConnectedServiceName: WinUISigning + FolderPath: '${{ parameters.buildOutputDir }}\$(buildConfiguration)\$(buildPlatform)\FrameworkPackage' + Pattern: | + *.appx + signConfigType: 'inlineSignParams' + inlineOperation: >- + [ + { + "KeyCode" : "Dynamic", + "CertTemplateName" : "WINMSAPP1ST", + "CertSubjectName" : "CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US", + "OperationCode" : "SigntoolSign", + "Parameters" : { + "OpusName" : "Microsoft", + "OpusInfo" : "http://www.microsoft.com", + "FileDigest" : "/fd \"SHA256\"", + "TimeStamp" : "/tr \"http://rfc3161.gtm.corp.microsoft.com/TSS/HttpTspServer\" /td sha256" + }, + "ToolName" : "sign", + "ToolVersion" : "1.0" + }, + { + "KeyCode" : "Dynamic", + "CertTemplateName" : "WINMSAPP1ST", + "CertSubjectName" : "CN=Microsoft Corporation, O=Microsoft Corporation, L=Redmond, S=Washington, C=US", + "OperationCode" : "SigntoolVerify", + "Parameters" : {}, + "ToolName" : "sign", + "ToolVersion" : "1.0" + } + ] + SessionTimeout: '60' + MaxConcurrency: '50' + MaxRetryAttempts: '5' diff --git a/build/AzurePipelinesTemplates/MUX-PushCBSVpack-Job.yml b/build/AzurePipelinesTemplates/MUX-PushCBSVpack-Job.yml index 9570e37329..55af9bb76a 100644 --- a/build/AzurePipelinesTemplates/MUX-PushCBSVpack-Job.yml +++ b/build/AzurePipelinesTemplates/MUX-PushCBSVpack-Job.yml @@ -38,6 +38,13 @@ jobs: failOnStderr: true # Note: This task sets the 'vpackversion' variable that is used below. + - task: PublishBuildArtifacts@1 + displayName: Publish WinUIVpack Artifact + inputs: + PathtoPublish: $(System.ArtifactsDirectory)\drop\release\WinUIVpack + artifactName: WinUIVpack + # This artifact is not consumed by anyone, but it is useful for debugging purposes. + - task: PublishBuildArtifacts@1 displayName: Publish CBS Artifact inputs: @@ -46,6 +53,13 @@ jobs: # This artifact is not consumed by anyone, but it is useful for debugging purposes. # Push the VPacks: + - task: PkgESVPack@12 + displayName: 'Push VPack Microsoft.UI.Xaml' + inputs: + sourceDirectory: '$(System.ArtifactsDirectory)\drop\Release\WinUIVpack' + description: Microsoft.UI.Xaml + pushPkgName: Microsoft.UI.Xaml + version: $(vpackversion) - task: PkgESVPack@12 displayName: 'Push VPack MicrosoftUIXamlInbox_x64' inputs: diff --git a/build/CreateCBSVPack.ps1 b/build/CreateCBSVPack.ps1 index f2d82ce59e..0f4f199a62 100644 --- a/build/CreateCBSVPack.ps1 +++ b/build/CreateCBSVPack.ps1 @@ -69,7 +69,7 @@ if(!(Get-Command mdmerge -ErrorAction Ignore)) Write-Error "Cannot find mdmerge. Make sure to run from a Developer Command Prompt." exit 1 } - +$winuiVpackFolder = "$releaseFolder\WinUIVpack" $cbsFolder = "$releaseFolder\CBS" $winmdFolder = "$cbsFolder\winmd" $packagesDir = Join-Path $repoRoot "packages" @@ -81,12 +81,19 @@ if (Test-Path $cbsFolder) Remove-Item -Path $cbsFolder -Force -Recurse| Out-Null } +if (Test-Path $winuiVpackFolder) +{ + Write-Host "Deleting $winuiVpackFolder" + Remove-Item -Path $winuiVpackFolder -Force -Recurse| Out-Null +} + if (Test-Path $winmdReferencesDir) { Write-Host "Deleting $winmdReferencesDir" Remove-Item -Path $winmdReferencesDir -Force -Recurse| Out-Null } +New-Item -Path "$winuiVpackFolder" -ItemType Directory | Out-Null New-Item -Path "$cbsFolder" -ItemType Directory | Out-Null New-Item -Path "$winmdFolder" -ItemType Directory | Out-Null New-Item -Path "$winmdReferencesDir" -ItemType Directory | Out-Null @@ -112,6 +119,32 @@ foreach ($flavour in $buildFlavours) } } +# Create WinUI Vpack: +foreach ($flavour in $buildFlavours) +{ + $sourceFolder = "$releaseFolder\$flavour\FrameworkPackage" + $targetFolder = "$winuiVpackFolder\$flavour" + + New-Item -Path "$targetFolder" -ItemType Directory | Out-Null + + $search = "Microsoft.UI.Xaml.*.appx" + $found = Get-ChildItem $sourceFolder -Filter $search + if ($found.Length -eq 0) + { + Write-Error "Could not find '$search' in '$sourceFolder'" + Exit 1 + } + + $fileName = $found[0].Name + $sourcePathFull = $found[0].FullName + + $destPathFull = Join-Path $targetFolder $fileName + + Write-Verbose "Copy item from '$sourcePathFull' to '$destPathFull' " + Copy-Item $sourcePathFull $destPathFull +} + +# Create CBS Vpacks: foreach ($flavour in $buildFlavours) { $sourceFolder = "$releaseFolder\$flavour"