Skip to content

Instantly share code, notes, and snippets.

@alexvictoor
Last active October 4, 2017 14:41
Show Gist options
  • Save alexvictoor/4e357d9045c9f1afeeac to your computer and use it in GitHub Desktop.
Save alexvictoor/4e357d9045c9f1afeeac to your computer and use it in GitHub Desktop.
Coverage report & sonarqube analysis msbuild script
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<!--
msbuild build.xml => compile and run unit tests
msbuild build.xml /t:CoverageReport => compile, test and generate coverage report
msbuild build.xml /t:Sonar => run sonarqube analysis
-->
<PropertyGroup>
<!--
You need to install following nuget packages in your solution first:
Nunit.Runners
OpenCover
ReportGenerator
versions may change
-->
<NUnit-ToolPath>packages\NUnit.Runners.2.6.4\tools\</NUnit-ToolPath>
<OpenCover-ToolPath>packages\OpenCover.4.6.166\tools\</OpenCover-ToolPath>
<ReportGenerator-ToolPath>packages\ReportGenerator.2.3.2.0\tools\</ReportGenerator-ToolPath>
<!-- your app sln file -->
<SolutionFile>MY_SOLUTION.sln</SolutionFile>
<!-- assembly filter for opencover -->
<OpenCover-AssemblyFilter>+[MyAssemblyPrefix*]*</OpenCover-AssemblyFilter>
<!-- patterns may change depending of your solution layout -->
<CoverageFilesPattern>.build\*.coverage.xml</CoverageFilesPattern>
<TestAssembliesPattern>$(MSBuildProjectDirectory)\*\bin\debug\*.Tests.dll</TestAssembliesPattern>
<!--
SonarQube stuff for your solution. You need to have MSBuild.SonarQube.Runner.exe
installed and availlable in your PATH
-->
<SonarKey>MySolution</SonarKey>
<SonarName>MySolution</SonarName>
<SonarVersion>1.0.0.0-Latest</SonarVersion>
</PropertyGroup>
<UsingTask TaskName="ReportGenerator" AssemblyFile="$(ReportGenerator-ToolPath)\ReportGenerator.exe" />
<ItemGroup>
<SourceDirectories Include="$(MSBuildProjectDirectory)" />
</ItemGroup>
<Target Name="Clean">
<MSBuild Projects="$(SolutionFile)" Targets="Clean" />
</Target>
<Target Name="Compile">
<MSBuild Projects="$(SolutionFile)" Targets="Build" />
</Target>
<Target Name="Test" DependsOnTargets="Clean;Compile">
<ItemGroup>
<TestAssemblies Include="$(TestAssembliesPattern)" />
</ItemGroup>
<MakeDir Directories=".build" />
<Exec Command="$(NUnit-ToolPath)nunit-console-x86.exe %(TestAssemblies.Identity) /nologo /noshadow /domain=single /xml=.build\%(TestAssemblies.filename)-test-results.xml" />
</Target>
<Target Name="Build" DependsOnTargets="Test" />
<Target Name="Coverage" DependsOnTargets="Clean;Compile">
<ItemGroup>
<TestAssemblies Include="$(TestAssembliesPattern)" />
</ItemGroup>
<MakeDir Directories=".build" />
<Delete Files=".build\*.coverage.xml" />
<Delete Files=".build\TestResult.xml" />
<!-- /domain=single is not support by the NUnit msbuild task, and it is required for OpenCover coverage test -->
<Exec Command="$(OpenCover-ToolPath)OpenCover.Console.exe -register:user -target:&quot;$(NUnit-ToolPath)nunit-console-x86.exe&quot; -targetargs:&quot;/noshadow %(TestAssemblies.Identity) /domain:single&quot; -filter:&quot;$(OpenCover-AssemblyFilter)&quot; -output:.build\%(TestAssemblies.FileName).coverage.xml" />
</Target>
<!--
Run ReportGenerator - local coverage history
-->
<Target Name="CoverageReport" DependsOnTargets="Coverage">
<ItemGroup>
<CoverageFiles Include="$(CoverageFilesPattern)" />
</ItemGroup>
<ReportGenerator ReportFiles="@(CoverageFiles)" TargetDirectory="report" ReportTypes="Html" SourceDirectories="@(SourceDirectories)" HistoryDirectory=".coverageHistory" />
<Message Text="Coverage report has been generated: $(MSBuildProjectDirectory)\report\index.htm" />
</Target>
<Target Name="SonarEnd">
<Exec Command="MSBuild.SonarQube.Runner.exe end" />
</Target>
<!--
Run a sonarqube analysis - coverage included
Compile must need to be run first (bug if DependsOnTargets="Compile")
-->
<Target Name="Sonar" >
<ItemGroup>
<TestAssemblies Include="$(TestAssembliesPattern)" />
</ItemGroup>
<PropertyGroup>
<ReportPaths>@(TestAssemblies -> '$(MSBuildProjectDirectory)\.build\%(filename).coverage.xml',',')</ReportPaths>
</PropertyGroup>
<Exec Command="MSBuild.SonarQube.Runner.exe begin /d:sonar.verbose=true /k:&quot;$(SonarKey)&quot; /n:&quot;$(SonarName)&quot; /v:&quot;$(SonarVersion)&quot; /d:sonar.cs.opencover.reportsPaths=&quot;$(ReportPaths)&quot;" />
<MSBuild Projects="$(SolutionFile)" Targets="rebuild" />
<CallTarget Targets="Coverage"/>
<CallTarget Targets="SonarEnd"/>
</Target>
</Project>
@kandoeniko
Copy link

Hello!

Do you know it is possible to feed to sonarqube the generated report xml (done by Report Generator)?

Thanks in advance,

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment