From 00a51d4a112b65544db27bc7e851405df3158182 Mon Sep 17 00:00:00 2001 From: Travis Plunk Date: Wed, 9 Nov 2022 13:56:12 -0800 Subject: [PATCH] Merged PR 23139: Add test for framework dependent package in release pipeline (#18506) --- build.psm1 | 14 +++++++- .../azureDevOps/releasePipeline.yml | 8 +++++ .../templates/release-ValidateFxdPackage.yml | 36 +++++++++++++++++-- .../release-ValidatePackageNames.yml | 13 +++---- .../azureDevOps/templates/signBuildFiles.yml | 8 +++++ 5 files changed, 69 insertions(+), 10 deletions(-) diff --git a/build.psm1 b/build.psm1 index ae9938a3f4..73036bf9ce 100644 --- a/build.psm1 +++ b/build.psm1 @@ -2361,7 +2361,11 @@ function Start-ResGen } } -function Find-Dotnet() { +function Find-Dotnet { + param ( + [switch] $SetDotnetRoot + ) + Write-Verbose "In Find-DotNet" $originalPath = $env:PATH @@ -2388,6 +2392,14 @@ function Find-Dotnet() { Write-Warning "The 'dotnet' in the current path can't find SDK version ${dotnetCLIRequiredVersion}, prepending $dotnetPath to PATH." # Globally installed dotnet doesn't have the required SDK version, prepend the user local dotnet location $env:PATH = $dotnetPath + [IO.Path]::PathSeparator + $env:PATH + + if ($SetDotnetRoot) { + Write-Verbose -Verbose "Setting DOTNET_ROOT to $dotnetPath" + $env:DOTNET_ROOT = $dotnetPath + } + } elseif ($SetDotnetRoot) { + Write-Verbose -Verbose "Expected dotnet version found, setting DOTNET_ROOT to $dotnetPath" + $env:DOTNET_ROOT = $dotnetPath } } else { diff --git a/tools/releaseBuild/azureDevOps/releasePipeline.yml b/tools/releaseBuild/azureDevOps/releasePipeline.yml index b0a3d6f52e..05b86ff3d2 100644 --- a/tools/releaseBuild/azureDevOps/releasePipeline.yml +++ b/tools/releaseBuild/azureDevOps/releasePipeline.yml @@ -113,6 +113,14 @@ stages: imageName: ubuntu-latest packageNamePattern: '**/*fxdependent.tar.gz' + - template: templates/release-ValidateFxdPackage.yml + parameters: + jobName: FxdPackageLinuxonARM + displayName: Fxd Package Test Linux ARM64 + imageName: 'PSMMSUbuntu20.04-ARM64-secure' + packageNamePattern: '**/*fxdependent.tar.gz' + use1ES: true + - stage: StaticPkgValidation dependsOn: [] displayName: Static package validation diff --git a/tools/releaseBuild/azureDevOps/templates/release-ValidateFxdPackage.yml b/tools/releaseBuild/azureDevOps/templates/release-ValidateFxdPackage.yml index a4d473cf3b..6843cf2a2d 100644 --- a/tools/releaseBuild/azureDevOps/templates/release-ValidateFxdPackage.yml +++ b/tools/releaseBuild/azureDevOps/templates/release-ValidateFxdPackage.yml @@ -3,13 +3,18 @@ parameters: displayName: "" imageName: "" packageNamePattern: "" + use1ES: false jobs: - job: ${{ parameters.jobName }} displayName: ${{ parameters.displayName }} + variables: + - group: DotNetPrivateBuildAccess pool: - # testing - vmImage: ${{ parameters.imageName }} + ${{ if eq(parameters.use1ES, 'false') }}: + vmImage: ${{ parameters.imageName }} + ${{ else }}: + name: 'PS-MSCodeHub-ARM' # add ImageOverride to select image steps: - checkout: self clean: true @@ -26,6 +31,16 @@ jobs: patterns: '${{ parameters.packageNamePattern }}' path: '$(Pipeline.Workspace)/releasePipeline/finalResults' + - pwsh: | + $env:DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1 + Import-Module "$(Build.SourcesDirectory)/build.psm1" -Force + Start-PSBootstrap + Write-Verbose -Message "Installing .NET SDK completed." -Verbose + displayName: Install .NET + env: + __DONET_RUNTIME_FEED: $(RUNTIME_SOURCEFEED) + __DONET_RUNTIME_FEED_KEY: $(RUNTIME_SOURCEFEED_KEY) + - pwsh: | Get-ChildItem -Path '$(Pipeline.Workspace)/releasePipeline/finalResults' -Recurse displayName: Capture downloaded package @@ -53,9 +68,24 @@ jobs: displayName: Expand fxd package - pwsh: | + $env:DOTNET_SKIP_FIRST_TIME_EXPERIENCE=1 + Import-Module "$(Build.SourcesDirectory)/build.psm1" -Force + Find-Dotnet -SetDotnetRoot + Write-Verbose -Verbose "DOTNET_ROOT: $env:DOTNET_ROOT" + Write-Verbose -Verbose "Check dotnet install" + dotnet --info + Write-Verbose -Verbose "Start test" $packageNameFilter = '${{ parameters.packageNamePattern }}' $pwshExeName = if ($packageNameFilter.EndsWith('tar.gz')) { 'pwsh' } else { 'pwsh.exe' } - $actualOutput = & $pwshExeName -c 'Start-Job -ScriptBlock { "1" } | Wait-Job | Receive-Job' + $pwshPath = Join-Path '$(Pipeline.Workspace)/releasePipeline/finalResults/fxd' $pwshExeName + + if ($IsLinux) { + chmod u+x $pwshPath + } + + $pwshDllPath = Join-Path '$(Pipeline.Workspace)/releasePipeline/finalResults/fxd' 'pwsh.dll' + + $actualOutput = & dotnet $pwshDllPath -c 'Start-ThreadJob -ScriptBlock { "1" } | Wait-Job | Receive-Job' Write-Verbose -Verbose "Actual output: $actualOutput" if ($actualOutput -ne 1) { throw "Actual output is not as expected" diff --git a/tools/releaseBuild/azureDevOps/templates/release-ValidatePackageNames.yml b/tools/releaseBuild/azureDevOps/templates/release-ValidatePackageNames.yml index c6925ba8a0..8a95ab8201 100644 --- a/tools/releaseBuild/azureDevOps/templates/release-ValidatePackageNames.yml +++ b/tools/releaseBuild/azureDevOps/templates/release-ValidatePackageNames.yml @@ -11,17 +11,18 @@ steps: Write-Host "##vso[build.updatebuildnumber]$name" displayName: Set Release Name -- pwsh: | - Import-module '$(BUILD.SOURCESDIRECTORY)/build.psm1' - Install-AzCopy - displayName: Install AzCopy - - pwsh: | Import-module '$(BUILD.SOURCESDIRECTORY)/build.psm1' $azcopy = Find-AzCopy + 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 - & $azcopy /Source:https://$(StorageAccount).blob.core.windows.net/$(AzureVersion) /Dest:$(System.ArtifactsDirectory) /S /SourceKey:$(StorageAccountKey) displayName: Download Azure Artifacts + env: + AZCOPY_SPA_CLIENT_SECRET: $(PowerShellReleaseSPNSecret) - pwsh: | Get-ChildItem $(System.ArtifactsDirectory)\* -recurse | Select-Object -ExpandProperty Name diff --git a/tools/releaseBuild/azureDevOps/templates/signBuildFiles.yml b/tools/releaseBuild/azureDevOps/templates/signBuildFiles.yml index e628f2ca81..8e4d86e3b5 100644 --- a/tools/releaseBuild/azureDevOps/templates/signBuildFiles.yml +++ b/tools/releaseBuild/azureDevOps/templates/signBuildFiles.yml @@ -113,9 +113,17 @@ steps: Write-Verbose -verbose "to be signed:`r`n $($missingSignatures | Out-String)" $filesToSignDirectory = "$(System.ArtifactsDirectory)\thirdPartyToBeSigned" + if (Test-Path $filesToSignDirectory) { + Remove-Item -Path $filesToSignDirectory -Recurse -Force + } + $null = New-Item -ItemType Directory -Path $filesToSignDirectory -Force -Verbose $signedFilesDirectory = "$(System.ArtifactsDirectory)\thirdPartySigned" + if (Test-Path $signedFilesDirectory) { + Remove-Item -Path $signedFilesDirectory -Recurse -Force + } + $null = New-Item -ItemType Directory -Path $signedFilesDirectory -Force -Verbose $missingSignatures | ForEach-Object {