diff --git a/assets/wix/files.wxs b/assets/wix/files.wxs index 13e38dbdd6..78b21b8d64 100644 --- a/assets/wix/files.wxs +++ b/assets/wix/files.wxs @@ -3137,6 +3137,9 @@ + + + @@ -4170,6 +4173,7 @@ + diff --git a/build.psm1 b/build.psm1 index 9e9da60596..d3bfb96866 100644 --- a/build.psm1 +++ b/build.psm1 @@ -439,10 +439,9 @@ Fix steps: # Add --self-contained due to "warning NETSDK1179: One of '--self-contained' or '--no-self-contained' options are required when '--runtime' is used." if ($Options.Runtime -like 'fxdependent*') { $Arguments += "--no-self-contained" - # The UseAppHost = false property avoids creating ".exe" for the fxdependent packages. - # The ".exe" is not a cross-platform executable, but specific to the platform that it was built on. - # We do not need to ship that. - $Arguments += "/property:UseAppHost=false" + # The UseAppHost = true property creates ".exe" for the fxdependent packages. + # We need this in the package as Start-Job needs it. + $Arguments += "/property:UseAppHost=true" } else { $Arguments += "--self-contained" diff --git a/tools/releaseBuild/azureDevOps/releasePipeline.yml b/tools/releaseBuild/azureDevOps/releasePipeline.yml index d68f7bbb62..5916043610 100644 --- a/tools/releaseBuild/azureDevOps/releasePipeline.yml +++ b/tools/releaseBuild/azureDevOps/releasePipeline.yml @@ -78,6 +78,31 @@ stages: globalToolExeName: 'pwsh' globalToolPackageName: 'PowerShell.Linux.x64' +- stage: ValidateFxdPackage + displayName: Validate Fxd Package + dependsOn: [] + jobs: + - template: templates/release-ValidateFxdPackage.yml + parameters: + jobName: WinFxdPackage + displayName: Fxd Package Test Win + imageName: windows-latest + packageNamePattern: '**/*win-fxdependent.zip' + + - template: templates/release-ValidateFxdPackage.yml + parameters: + jobName: FxdPackageWindDesktop + displayName: Fxd Package Test WinDesktop + imageName: windows-latest + packageNamePattern: '**/*win-fxdependentWinDesktop.zip' + + - template: templates/release-ValidateFxdPackage.yml + parameters: + jobName: FxdPackageLinux + displayName: Fxd Package Test Linux + imageName: ubuntu-latest + packageNamePattern: '**/*fxdependent.tar.gz' + - stage: StaticPkgValidation dependsOn: [] displayName: Static package validation @@ -142,6 +167,8 @@ stages: - StartDocker - ManualValidation - ReleaseAutomation + - ValidateFxdPackage + - ValidateGlobalTool # The environment here is used for approval. jobs: diff --git a/tools/releaseBuild/azureDevOps/templates/release-ValidateFxdPackage.yml b/tools/releaseBuild/azureDevOps/templates/release-ValidateFxdPackage.yml new file mode 100644 index 0000000000..687b9d526d --- /dev/null +++ b/tools/releaseBuild/azureDevOps/templates/release-ValidateFxdPackage.yml @@ -0,0 +1,62 @@ +parameters: + jobName: "" + displayName: "" + imageName: "" + packageNamePattern: "" + +jobs: +- job: ${{ parameters.jobName }} + displayName: ${{ parameters.displayName }} + pool: + vmImage: ${{ parameters.imageName }} + steps: + - checkout: self + clean: true + + - task: DownloadPipelineArtifact@2 + inputs: + source: specific + project: PowerShellCore + pipeline: '696' + preferTriggeringPipeline: true + runVersion: latestFromBranch + runBranch: '$(Build.SourceBranch)' + artifact: finalResults + patterns: '${{ parameters.packageNamePattern }}' + path: '$(Pipeline.Workspace)/releasePipeline/finalResults' + + - pwsh: | + Get-ChildItem -Path '$(Pipeline.Workspace)/releasePipeline/finalResults' -Recurse + displayName: Capture downloaded package + + - pwsh: | + $destPath = New-Item '$(Pipeline.Workspace)/releasePipeline/finalResults/fxd' -ItemType Directory + $packageNameFilter = '${{ parameters.packageNamePattern }}' + + if ($packageNameFilter.EndsWith('tar.gz')) { + $package = @(Get-ChildItem -Path '$(Pipeline.Workspace)/releasePipeline/finalResults/*.tar.gz') + Write-Verbose -Verbose "Package: $package" + if ($package.Count -ne 1) { + throw 'Only 1 package was expected.' + } + tar -xvf $package.FullName -C $destPath + } + else { + $package = @(Get-ChildItem -Path '$(Pipeline.Workspace)/releasePipeline/finalResults/*.zip') + Write-Verbose -Verbose "Package: $package" + if ($package.Count -ne 1) { + throw 'Only 1 package was expected.' + } + Expand-Archive -Path $package.FullName -Destination "$destPath" -Verbose + } + displayName: Expand fxd package + + - pwsh: | + $packageNameFilter = '${{ parameters.packageNamePattern }}' + $pwshExeName = if ($packageNameFilter.EndsWith('tar.gz')) { 'pwsh' } else { 'pwsh.exe' } + $actualOutput = & $pwshExeName -c 'Start-Job -ScriptBlock { "1" } | Wait-Job | Receive-Job' + Write-Verbose -Verbose "Actual output: $actualOutput" + if ($actualOutput -ne 1) { + throw "Actual output is not as expected" + } + displayName: Test package diff --git a/tools/releaseBuild/azureDevOps/templates/windows-packaging.yml b/tools/releaseBuild/azureDevOps/templates/windows-packaging.yml index 03ecebaf0c..f2b0e091f0 100644 --- a/tools/releaseBuild/azureDevOps/templates/windows-packaging.yml +++ b/tools/releaseBuild/azureDevOps/templates/windows-packaging.yml @@ -129,6 +129,7 @@ jobs: "$($fullSymbolsFolder)\Modules\PSDiagnostics\PSDiagnostics.ps?1" = "Modules\PSDiagnostics" "$($fullSymbolsFolder)\pwsh.dll" = "" "$($fullSymbolsFolder)\System.Management.Automation.dll" = "" + "$($fullSymbolsFolder)\pwsh.exe" = "" } $itemsToExclude = @( @@ -136,11 +137,6 @@ jobs: "$($fullSymbolsFolder)\Microsoft.PowerShell.MarkdownRender.dll" ) - if ("$env:Architecture" -notlike 'fxdependent*') - { - $itemsToCopy += @{"$($fullSymbolsFolder)\pwsh.exe" = ""} - } - Write-Verbose -verbose "recusively copying $($itemsToCopyWithRecurse | out-string) to $filesToSignDirectory" Copy-Item -Path $itemsToCopyWithRecurse -Destination $filesToSignDirectory -Recurse -verbose -exclude $itemsToExclude