From caede6fe9915d02a3e1e1fd69faa448ee2633b3b Mon Sep 17 00:00:00 2001 From: Travis Plunk Date: Tue, 7 Feb 2023 14:05:45 -0800 Subject: [PATCH] Add test for framework dependent package in release pipeline (#18506) (#19114) --- 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 5cbfc3c94d..86cab7b917 100644 --- a/build.psm1 +++ b/build.psm1 @@ -2295,7 +2295,11 @@ function Start-ResGen } } -function Find-Dotnet() { +function Find-Dotnet { + param ( + [switch] $SetDotnetRoot + ) + Write-Verbose -Verbose "In Find-DotNet" $originalPath = $env:PATH @@ -2322,6 +2326,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 e1334f9320..b1f7e926a0 100644 --- a/tools/releaseBuild/azureDevOps/releasePipeline.yml +++ b/tools/releaseBuild/azureDevOps/releasePipeline.yml @@ -105,6 +105,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 c0e71d4dd9..9cf313a772 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 5419cab157..f8a252da21 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 {