Integrate test coverage reporting into the psake build script (#66)
* Integrate coverage reporting into psake script * Fix versioning bug in build script
This commit is contained in:
Родитель
b9efa88925
Коммит
1d58b9f75f
|
@ -50,8 +50,8 @@ Task Clean.PublishFolder {
|
||||||
Task Generate.Version {
|
Task Generate.Version {
|
||||||
|
|
||||||
$script:versionBase = get-content $baseDir\version.txt -ErrorAction SilentlyContinue
|
$script:versionBase = get-content $baseDir\version.txt -ErrorAction SilentlyContinue
|
||||||
if ($version -eq $null) {
|
if ($versionBase -eq $null) {
|
||||||
throw "Unable to load .\version.txt"
|
throw "Unable to load $baseDir\version.txt"
|
||||||
}
|
}
|
||||||
$versionLastUpdated = git rev-list -1 HEAD $baseDir\version.txt
|
$versionLastUpdated = git rev-list -1 HEAD $baseDir\version.txt
|
||||||
$script:patchVersion = git rev-list "$versionLastUpdated..HEAD" --count
|
$script:patchVersion = git rev-list "$versionLastUpdated..HEAD" --count
|
||||||
|
@ -92,6 +92,24 @@ Task Unit.Tests -Depends Requires.DotNetExe, Build.SesTest {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Task Cover.Tests -Depends Requires.Opencover, Requires.ReportGenerator, Requires.OutDir, Build.SesTest {
|
||||||
|
$filter = "+[*]* -[xunit.*]* -[Fluent*]* -[*.Tests]*"
|
||||||
|
$logLevel = "info"
|
||||||
|
|
||||||
|
foreach ($project in (resolve-path $testsDir\*\*.csproj)){
|
||||||
|
$projectName = split-path $project -Leaf
|
||||||
|
Write-SubtaskName $projectName
|
||||||
|
|
||||||
|
exec {
|
||||||
|
& $openCoverExe -oldStyle "-target:$dotnetExe" "-targetargs:test $project" -register:user "-filter:$filter" -log:$loglevel -output:$outDir\$projectName.cover.xml
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-SubtaskName "Generating Coverage Report"
|
||||||
|
|
||||||
|
& $reportGeneratorExe "-reports:$outDir\*.cover.xml" "-targetdir:$outDir\cover\"
|
||||||
|
}
|
||||||
|
|
||||||
Task Publish.SesTest.Win64 -Depends Requires.DotNetExe, Restore.NuGetPackages {
|
Task Publish.SesTest.Win64 -Depends Requires.DotNetExe, Restore.NuGetPackages {
|
||||||
exec {
|
exec {
|
||||||
& $dotnetExe publish $srcDir\sestest\sestest.csproj --self-contained --output $publishDir\sestest\win10-x64 --runtime win10-x64 /p:Version=$semanticVersion
|
& $dotnetExe publish $srcDir\sestest\sestest.csproj --self-contained --output $publishDir\sestest\win10-x64 --runtime win10-x64 /p:Version=$semanticVersion
|
||||||
|
@ -156,13 +174,11 @@ Task Requires.Configuration {
|
||||||
Task Requires.DotNetExe {
|
Task Requires.DotNetExe {
|
||||||
$script:dotnetExe = (get-command dotnet).Path
|
$script:dotnetExe = (get-command dotnet).Path
|
||||||
|
|
||||||
if ($dotnetExe -eq $null)
|
if ($dotnetExe -eq $null) {
|
||||||
{
|
|
||||||
$script:dotnetExe = resolve-path $env:ProgramFiles\dotnet\dotnet.exe -ErrorAction SilentlyContinue
|
$script:dotnetExe = resolve-path $env:ProgramFiles\dotnet\dotnet.exe -ErrorAction SilentlyContinue
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($dotnetExe -eq $null)
|
if ($dotnetExe -eq $null) {
|
||||||
{
|
|
||||||
throw "Failed to find dotnet.exe"
|
throw "Failed to find dotnet.exe"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -173,19 +189,40 @@ Task Requires.MsBuild {
|
||||||
# prefer MSBuild from VS2017 if its there
|
# prefer MSBuild from VS2017 if its there
|
||||||
$script:msbuildExe = resolve-path "${env:ProgramFiles(x86)}\Microsoft Visual Studio\2017\*\MSBuild\*\Bin\MSBuild.exe" -ErrorAction SilentlyContinue
|
$script:msbuildExe = resolve-path "${env:ProgramFiles(x86)}\Microsoft Visual Studio\2017\*\MSBuild\*\Bin\MSBuild.exe" -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
if ($msbuildExe -eq $null)
|
if ($msbuildExe -eq $null) {
|
||||||
{
|
|
||||||
$script:msbuildExe = (get-command msbuild).Path
|
$script:msbuildExe = (get-command msbuild).Path
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($msbuildExe -eq $null)
|
if ($msbuildExe -eq $null) {
|
||||||
{
|
|
||||||
throw "Failed to find msbuild.exe"
|
throw "Failed to find msbuild.exe"
|
||||||
}
|
}
|
||||||
|
|
||||||
Write-Host "MSBuild executable: $msbuildExe"
|
Write-Host "MSBuild executable: $msbuildExe"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Task Requires.OpenCover {
|
||||||
|
|
||||||
|
$script:openCoverExe = resolve-path $env:userprofile\.nuget\packages\OpenCover\*\tools\OpenCover.Console.exe -ErrorAction SilentlyContinue
|
||||||
|
|
||||||
|
if ($openCoverExe -eq $null) {
|
||||||
|
throw "Failed to find OpenCover.Console.exe"
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Output "Opencover executable: $openCoverExe"
|
||||||
|
}
|
||||||
|
|
||||||
|
Task Requires.OutDir {
|
||||||
|
if (!(test-path $outDir)) {
|
||||||
|
mkdir $outDir -ErrorAction SilentlyContinue | Out-Null
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(test-path $outDir)) {
|
||||||
|
throw "Output folder does not exist"
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Host "Output folder is $outDir"
|
||||||
|
}
|
||||||
|
|
||||||
Task Requires.Platform {
|
Task Requires.Platform {
|
||||||
|
|
||||||
if ($targetPlatform -eq $null) {
|
if ($targetPlatform -eq $null) {
|
||||||
|
@ -195,6 +232,19 @@ Task Requires.Platform {
|
||||||
Write-Host "Target platform is $targetPlatform"
|
Write-Host "Target platform is $targetPlatform"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Task Requires.ReportGenerator {
|
||||||
|
|
||||||
|
$script:reportGeneratorExe = resolve-path $env:userprofile\.nuget\packages\reportgenerator\*\tools\ReportGenerator.exe -ErrorAction SilentlyContinue |
|
||||||
|
Sort-Object -Property "Name" |
|
||||||
|
select-object -last 1
|
||||||
|
|
||||||
|
if ($reportGeneratorExe -eq $null) {
|
||||||
|
throw "Failed to find ReportGenerator.exe"
|
||||||
|
}
|
||||||
|
|
||||||
|
Write-Output "Report Generator executable: $reportGeneratorExe"
|
||||||
|
}
|
||||||
|
|
||||||
## --------------------------------------------------------------------------------
|
## --------------------------------------------------------------------------------
|
||||||
## Support Functions
|
## Support Functions
|
||||||
## --------------------------------------------------------------------------------
|
## --------------------------------------------------------------------------------
|
||||||
|
|
|
@ -1,37 +1,5 @@
|
||||||
#
|
#
|
||||||
# Run unit tests and generate a coverage report
|
# Run unit tests and generate a coverage report
|
||||||
#
|
#
|
||||||
|
. .\scripts\bootstrap.ps1
|
||||||
. $PSScriptRoot\scripts\includes.ps1
|
invoke-psake -buildFile .\scripts\psake-build.ps1 -taskList Cover.Tests
|
||||||
|
|
||||||
Write-Divider
|
|
||||||
$dotnetExe = (get-command dotnet).Path
|
|
||||||
Write-Output "Dotnet executable: $dotnetExe"
|
|
||||||
|
|
||||||
$openCoverExe = resolve-path $env:userprofile\.nuget\packages\OpenCover\*\tools\OpenCover.Console.exe
|
|
||||||
Write-Output "Opencover executable: $openCoverExe"
|
|
||||||
|
|
||||||
$reportGeneratorExe = resolve-path $env:userprofile\.nuget\packages\reportgenerator\*\tools\ReportGenerator.exe
|
|
||||||
Write-Output "Report Generator executable: $reportGeneratorExe"
|
|
||||||
Write-Divider
|
|
||||||
|
|
||||||
$commonTests = resolve-path .\tests\Microsoft.Azure.Batch.SoftwareEntitlement.Common.Tests\*.csproj
|
|
||||||
$sesTests = resolve-path .\tests\Microsoft.Azure.Batch.SoftwareEntitlement.Tests\*.csproj
|
|
||||||
$logLevel = "info"
|
|
||||||
|
|
||||||
$filter = "+[*]* -[xunit.*]* -[Fluent*]* -[*.Tests]*"
|
|
||||||
|
|
||||||
Write-Header "Running tests for: $commonTests"
|
|
||||||
& $openCoverExe -oldStyle "-target:$dotnetExe" "-targetargs:test $commonTests" -register:user "-filter:$filter" -log:$loglevel -output:.\out\Common.cover.xml
|
|
||||||
|
|
||||||
Write-Header "Running tests for $sesTests"
|
|
||||||
& $openCoverExe -oldStyle "-target:$dotnetExe" "-targetargs:test $sesTests" -register:user "-filter:$filter" -log:$loglevel -output:.\out\Ses.cover.xml
|
|
||||||
|
|
||||||
Write-Header "Generating Report"
|
|
||||||
& $reportGeneratorExe "-reports:.\out\Common.cover.xml;.\out\Ses.cover.xml" "-targetdir:.\out\cover\"
|
|
||||||
|
|
||||||
$reportIndex = resolve-path .\out\cover\index.htm
|
|
||||||
Write-Divider
|
|
||||||
Write-Output "Test coverage report file: $reportIndex"
|
|
||||||
|
|
||||||
& $reportIndex
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче