Created
February 27, 2018 22:56
-
-
Save alastairtree/c12cc9c3e696eeb06ada2b513dd8175f to your computer and use it in GitHub Desktop.
AppVeyor dotnet core CLI build script - restore, compile, test, upload test results and publish artifacts/nupkgs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Set-StrictMode -Version latest | |
$ErrorActionPreference = "Stop" | |
# Taken from psake https://github.com/psake/psake | |
<# | |
.SYNOPSIS | |
This is a helper function that runs a scriptblock and checks the PS variable $lastexitcode | |
to see if an error occcured. If an error is detected then an exception is thrown. | |
This function allows you to run command-line programs without having to | |
explicitly check the $lastexitcode variable. | |
.EXAMPLE | |
exec { svn info $repository_trunk } "Error executing SVN. Please verify SVN command-line client is installed" | |
#> | |
function Exec | |
{ | |
[CmdletBinding()] | |
param( | |
[Parameter(Position=0,Mandatory=1)][scriptblock]$cmd, | |
[Parameter(Position=1,Mandatory=0)][string]$errorMessage = ("Error executing command {0}" -f $cmd) | |
) | |
& $cmd | |
if ($lastexitcode -ne 0) { | |
throw ("Exec: " + $errorMessage) | |
} | |
} | |
$config = "release" | |
Try { | |
# Get dependencies from nuget and compile | |
Exec { dotnet restore } | |
Exec { dotnet build --configuration $config --no-restore } | |
# Find each test project and run tests. upload results to AppVeyor | |
Get-ChildItem .\**\*.csproj -Recurse | | |
Where-Object { $_.Name -match ".*Test(s)?.csproj$"} | # e.g. MyApp.UnitTests.csproj | |
ForEach-Object { | |
# Run dotnet test and output to a trx/mstest xml file | |
Exec { dotnet test $_.FullName --configuration $config --no-build --no-restore --logger "trx;LogFileName=..\..\test-result.trx" } | |
# if on build server upload results to AppVeyor | |
if ("${ENV:APPVEYOR_JOB_ID}" -ne "") { | |
$wc = New-Object 'System.Net.WebClient' | |
$wc.UploadFile("https://ci.appveyor.com/api/testresults/mstest/$($env:APPVEYOR_JOB_ID)", (Resolve-Path .\test-result.trx)) | |
} | |
# make sure each test proj has a new file to upload | |
Remove-Item .\test-result.trx -ErrorAction SilentlyContinue | |
} | |
# Publish the nupkg artifacts | |
if (Get-Command "Push-AppveyorArtifact" -errorAction SilentlyContinue) | |
{ | |
Get-ChildItem .\*\bin\$config\*.nupkg -Recurse | ForEach-Object { Push-AppveyorArtifact $_.FullName -FileName $_.Name } | |
} | |
} Catch { | |
$host.SetShouldExit(-1) | |
throw | |
} Finally { | |
Remove-Item .\test-result.trx -ErrorAction SilentlyContinue | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment