A separate Windows packaging CI (#14670)

This commit is contained in:
Travis Plunk
2021-02-08 13:25:14 -08:00
committed by GitHub
parent 6d7fbed02b
commit 6c633e7fc2
8 changed files with 165 additions and 33 deletions
+2
View File
@@ -30,6 +30,8 @@ pr:
- .vsts-ci/misc-analysis.yml
- .github/ISSUE_TEMPLATE/*
- .dependabot/config.yml
- .vsts-ci/windows.yml
- .vsts-ci/windows/*
variables:
DOTNET_CLI_TELEMETRY_OPTOUT: 1
+2
View File
@@ -31,6 +31,8 @@ pr:
- .dependabot/config.yml
- tools/releaseBuild/*
- tools/releaseBuild/azureDevOps/templates/*
- /.vsts-ci/windows.yml
- /.vsts-ci/windows/*
variables:
DOTNET_CLI_TELEMETRY_OPTOUT: 1
-8
View File
@@ -73,11 +73,3 @@ stages:
tagSet: Others
- template: templates/verify-xunit.yml
- stage: PackagingWin
displayName: Packaging for Windows
dependsOn: [] # by specifying an empty array, this stage doesn't depend on the stage before it
jobs:
# Unlike daily builds, we do not upload nuget package to MyGet so we do not wait on tests to finish.
- template: templates/windows-packaging.yml
@@ -1,16 +1,18 @@
parameters:
pool: 'Hosted VS2017'
jobName: 'win_packaging'
architecture: 'x64'
channel: 'preview'
parentJobs: []
jobs:
- job: ${{ parameters.jobName }}
- job: ${{ parameters.jobName }}_${{ parameters.channel }}_${{ parameters.architecture }}
dependsOn:
${{ parameters.parentJobs }}
pool:
name: ${{ parameters.pool }}
displayName: Windows Packaging
displayName: Windows Packaging - ${{ parameters.architecture }} - ${{ parameters.channel }}
steps:
- powershell: |
@@ -30,5 +32,5 @@ jobs:
- pwsh: |
Import-Module .\tools\ci.psm1
New-CodeCoverageAndTestPackage
Invoke-CIFinish
Invoke-CIFinish -Runtime win7-${{ parameters.architecture }} -channel ${{ parameters.channel }}
displayName: Build and Test Package
+85
View File
@@ -0,0 +1,85 @@
name: PR-$(System.PullRequest.PullRequestNumber)-$(Date:yyyyMMdd)$(Rev:.rr)
trigger:
# Batch merge builds together while a merge build is running
batch: true
branches:
include:
- master
- release*
- feature*
paths:
include:
- /.vsts-ci/templates/windows-packaging.yml
- /.vsts-ci/windows-packaging.yml
- /global.json
- /src/*
- /tools/ci.psm1
- /tools/packaging/*
- /assets/*
pr:
branches:
include:
- master
- release*
- feature*
paths:
# file extension filters are not supported when this was written.
# This really should be /src/**/*.csproj
include:
- /.vsts-ci/templates/windows-packaging.yml
- /.vsts-ci/windows-packaging.yml
- /global.json
- /src/Microsoft.Management.Infrastructure.CimCmdlets/Microsoft.Management.Infrastructure.CimCmdlets.csproj
- /src/Microsoft.Management.UI.Internal/Microsoft.PowerShell.GraphicalHost.csproj
- /src/Microsoft.PowerShell.Commands.Diagnostics/Microsoft.PowerShell.Commands.Diagnostics.csproj
- /src/Microsoft.PowerShell.Commands.Management/Microsoft.PowerShell.Commands.Management.csproj
- /src/Microsoft.PowerShell.Commands.Utility/Microsoft.PowerShell.Commands.Utility.csproj
- /src/Microsoft.PowerShell.ConsoleHost/Microsoft.PowerShell.ConsoleHost.csproj
- /src/Microsoft.PowerShell.CoreCLR.Eventing/Microsoft.PowerShell.CoreCLR.Eventing.csproj
- /src/Microsoft.PowerShell.GlobalTool.Shim/Microsoft.PowerShell.GlobalTool.Shim.csproj
- /src/Microsoft.PowerShell.LocalAccounts/Microsoft.PowerShell.LocalAccounts.csproj
- /src/Microsoft.PowerShell.MarkdownRender/Microsoft.PowerShell.MarkdownRender.csproj
- /src/Microsoft.PowerShell.SDK/Microsoft.PowerShell.SDK.csproj
- /src/Microsoft.PowerShell.Security/Microsoft.PowerShell.Security.csproj
- /src/Microsoft.WSMan.Management/Microsoft.WSMan.Management.csproj
- /src/Microsoft.WSMan.Runtime/Microsoft.WSMan.Runtime.csproj
- /src/Modules/PSGalleryModules.csproj
- /src/powershell-win-core/powershell-win-core.csproj
- /tools/ci.psm1
- /tools/packaging/*
- /assets/files.wxs
- /assets/Product.wxs
variables:
- name: GIT_CONFIG_PARAMETERS
value: "'core.autocrlf=false'"
- name: DOTNET_CLI_TELEMETRY_OPTOUT
value: 1
- name: POWERSHELL_TELEMETRY_OPTOUT
value: 1
# Avoid expensive initialization of dotnet cli, see: https://donovanbrown.com/post/Stop-wasting-time-during-NET-Core-builds
- name: DOTNET_SKIP_FIRST_TIME_EXPERIENCE
value: 1
- name: __SuppressAnsiEscapeSequences
value: 1
- group: fakeNugetKey
resources:
- repo: self
clean: true
stages:
- stage: PackagingWin
displayName: Packaging for Windows
dependsOn: [] # by specifying an empty array, this stage doesn't depend on the stage before it
jobs:
# Unlike daily builds, we do not upload nuget package to MyGet so we do not wait on tests to finish.
- template: templates/windows-packaging.yml
- template: templates/windows-packaging.yml
parameters:
channel: stable
architecture: x86
- template: templates/windows-packaging.yml
parameters:
channel: preview
architecture: x86
+39 -8
View File
@@ -53,6 +53,8 @@ Describe -Name "Windows MSI" -Fixture {
}
$msiX64Path = $env:PsMsiX64Path
$channel = $env:PSMsiChannel
$runtime = $env:PSMsiRuntime
# Get any existing powershell in the path
$beforePath = @(([System.Environment]::GetEnvironmentVariable('PATH', 'MACHINE')) -split ';' |
@@ -82,12 +84,29 @@ Describe -Name "Windows MSI" -Fixture {
Context "Upgrade code" {
BeforeAll {
$previewUpgladeCode = '39243d76-adaf-42b1-94fb-16ecf83237c8'
Write-Verbose "cr-$channel-$runtime" -Verbose
switch ("$channel-$runtime") {
"preview-win7-x64" {
$msiUpgradeCode = '39243d76-adaf-42b1-94fb-16ecf83237c8'
}
"stable-win7-x64" {
$msiUpgradeCode = '31ab5147-9a97-4452-8443-d9709f0516e1'
}
"preview-win7-x86" {
$msiUpgradeCode = '86abcfbd-1ccc-4a88-b8b2-0facfde29094'
}
"stable-win7-x86" {
$msiUpgradeCode = '1d00683b-0f84-4db8-a64f-2f98ad42fe06'
}
default {
throw "'$_' not a valid channel runtime combination"
}
}
}
It "Preview MSI should not be installed before test" -Skip:(!(Test-Elevated)) {
$result = @(Get-CimInstance -Query "SELECT Value FROM Win32_Property WHERE Property='UpgradeCode' and Value = '{$previewUpgladeCode}'")
$result.Count | Should -Be 0 -Because 'Query should return nothing if preview x64 is not installed'
It "$Channel MSI should not be installed before test" -Skip:(!(Test-Elevated)) {
$result = @(Get-CimInstance -Query "SELECT Value FROM Win32_Property WHERE Property='UpgradeCode' and Value = '{$msiUpgradeCode}'")
$result.Count | Should -Be 0 -Because "Query should return nothing if $channel x64 is not installed"
}
It "MSI should install without error" -Skip:(!(Test-Elevated)) {
@@ -97,8 +116,8 @@ Describe -Name "Windows MSI" -Fixture {
}
It "Upgrade code should be correct" -Skip:(!(Test-Elevated)) {
$result = @(Get-CimInstance -Query "SELECT Value FROM Win32_Property WHERE Property='UpgradeCode' and Value = '{$previewUpgladeCode}'")
$result.Count | Should -Be 1 -Because 'Query should return 1 result if Upgrade code is for x64 preview'
$result = @(Get-CimInstance -Query "SELECT Value FROM Win32_Property WHERE Property='UpgradeCode' and Value = '{$msiUpgradeCode}'")
$result.Count | Should -Be 1 -Because "Query should return 1 result if Upgrade code is for x64 $channel"
}
It "MSI should uninstall without error" -Skip:(!(Test-Elevated)) {
@@ -117,7 +136,7 @@ Describe -Name "Windows MSI" -Fixture {
It "MSI should have not be updated path" -Skip:(!(Test-Elevated)) {
$psPath = ([System.Environment]::GetEnvironmentVariable('PATH', 'MACHINE')) -split ';' |
Where-Object {$_ -like '*files\powershell*' -and $_ -notin $beforePath}
Where-Object { $_ -like '*files\powershell*' -and $_ -notin $beforePath }
$psPath | Should -BeNullOrEmpty
}
@@ -137,8 +156,20 @@ Describe -Name "Windows MSI" -Fixture {
}
It "MSI should have updated path" -Skip:(!(Test-Elevated)) {
if ($channel -eq 'preview') {
$pattern = '*files*\powershell*\preview*'
} else {
$pattern = '*files*\powershell*'
}
$psPath = ([System.Environment]::GetEnvironmentVariable('PATH', 'MACHINE')) -split ';' |
Where-Object {$_ -like '*files\powershell*\preview*' -and $_ -notin $beforePath}
Where-Object { $_ -like $pattern -and $_ -notin $beforePath }
if (!$psPath) {
([System.Environment]::GetEnvironmentVariable('PATH', 'MACHINE')) -split ';' |
Where-Object { $_ -notin $beforePath } |
ForEach-Object { Write-Verbose -Verbose $_ }
}
$psPath | Should -Not -BeNullOrEmpty
}
+31 -14
View File
@@ -437,30 +437,45 @@ function Get-ReleaseTag
# Implements CI 'on_finish' step
function Invoke-CIFinish
{
param(
[string] $Runtime = 'win7-x64',
[string] $Channel = 'preview'
)
if($PSEdition -eq 'Core' -and ($IsLinux -or $IsMacOS))
{
return New-LinuxPackage
}
try {
$releaseTag = Get-ReleaseTag
$previewVersion = $releaseTag.Split('-')
$previewPrefix = $previewVersion[0]
$previewLabel = $previewVersion[1].replace('.','')
if(Test-DailyBuild)
if($Channel -eq 'preview')
{
$previewLabel= "daily{0}" -f $previewLabel
$releaseTag = Get-ReleaseTag
$previewVersion = $releaseTag.Split('-')
$previewPrefix = $previewVersion[0]
$previewLabel = $previewVersion[1].replace('.','')
if(Test-DailyBuild)
{
$previewLabel= "daily{0}" -f $previewLabel
}
$preReleaseVersion = "$previewPrefix-$previewLabel.$env:BUILD_BUILDID"
# Build clean before backing to remove files from testing
Start-PSBuild -CrossGen -PSModuleRestore -Configuration 'Release' -ReleaseTag $preReleaseVersion -Clean -Runtime $Runtime
}
else {
$releaseTag = Get-ReleaseTag
$releaseTagParts = $releaseTag.split('.')
$preReleaseVersion = $releaseTagParts[0]+ ".9.9"
Write-Verbose "newPSReleaseTag: $preReleaseVersion" -Verbose
Start-PSBuild -CrossGen -PSModuleRestore -Configuration 'Release' -ReleaseTag $preReleaseVersion -Clean -Runtime $Runtime
}
$preReleaseVersion = "$previewPrefix-$previewLabel.$env:BUILD_BUILDID"
# Build clean before backing to remove files from testing
Start-PSBuild -CrossGen -PSModuleRestore -Configuration 'Release' -ReleaseTag $preReleaseVersion -Clean
# Build packages
$packages = Start-PSPackage -Type msi,nupkg,zip,zip-pdb -ReleaseTag $preReleaseVersion -SkipReleaseChecks
# Build packages $preReleaseVersion = "$previewPrefix-$previewLabel.$env:BUILD_BUILDID"
$packages = Start-PSPackage -Type msi,nupkg,zip,zip-pdb -ReleaseTag $preReleaseVersion -SkipReleaseChecks -WindowsRuntime $Runtime
$artifacts = New-Object System.Collections.ArrayList
foreach ($package in $packages) {
@@ -486,6 +501,8 @@ function Invoke-CIFinish
# the packaging tests find the MSI package using env:PSMsiX64Path
$env:PSMsiX64Path = $artifacts | Where-Object { $_.EndsWith(".msi")}
$env:PSMsiChannel = $Channel
$env:PSMsiRuntime = $Runtime
# Install the latest Pester and import it
$maximumPesterVersion = '4.99'
+1
View File
@@ -336,6 +336,7 @@ function Start-PSPackage {
if ($Runtime -match "-x86") {
$TargetArchitecture = "x86"
}
Write-Verbose "TargetArchitecture = $TargetArchitecture" -Verbose
$Arguments = @{
ProductNameSuffix = $NameSuffix