diff --git a/tools/appveyor.psm1 b/tools/appveyor.psm1 index 7e68346018..ecb6a30a6e 100644 --- a/tools/appveyor.psm1 +++ b/tools/appveyor.psm1 @@ -445,6 +445,7 @@ function Get-ReleaseTag # Implements AppVeyor 'on_finish' step function Invoke-AppveyorFinish { + $exitCode = 0 try { $releaseTag = Get-ReleaseTag @@ -474,6 +475,19 @@ function Invoke-AppveyorFinish $preReleaseVersion = "$previewPrefix-$previewLabel.$env:APPVEYOR_BUILD_NUMBER" } + # Smoke Test MSI installer + Write-Verbose "Smoke-Testing MSI installer" -Verbose + $msi = $artifacts | Where-Object { $_.EndsWith(".msi") } + $msiLog = Join-Path (Get-Location) 'msilog.txt' + $msiExecProcess = Start-Process msiexec.exe -Wait -ArgumentList "/I $msi /quiet /l*vx $msiLog" -NoNewWindow -PassThru + if ($msiExecProcess.ExitCode -ne 0) + { + Push-AppveyorArtifact msiLog.txt + $exitCode = $msiExecProcess.ExitCode + throw "MSI installer failed and returned error code $exitCode. MSI Log was uploaded as artifact." + } + Write-Verbose "MSI smoke test was successful" -Verbose + # only publish assembly nuget packages if it is a daily build and tests passed if((Test-DailyBuild) -and $env:TestPassed -eq 'True') { @@ -527,4 +541,13 @@ function Invoke-AppveyorFinish catch { Write-Host -Foreground Red $_ } + finally { + # A throw statement would not make the build fail. This function is AppVeyor specific + # and is the only command executed in 'on_finish' phase, so it's safe that we request + # the current runspace to exit with the specified exit code. If the exit code is non-zero, + # AppVeyor will fail the build. + # See this link for details: + # https://help.appveyor.com/discussions/problems/4498-powershell-exception-in-test_script-does-not-fail-build + $host.SetShouldExit($exitCode) + } }