Skip to content

Commit

Permalink
Collect code coverage, Stage 1
Browse files Browse the repository at this point in the history
  • Loading branch information
nxtn committed Dec 23, 2019
1 parent e1eb7f7 commit 661d252
Show file tree
Hide file tree
Showing 3 changed files with 120 additions and 4 deletions.
18 changes: 18 additions & 0 deletions .config/dotnet-tools.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"version": 1,
"isRoot": true,
"tools": {
"coverlet.console": {
"version": "1.6.0",
"commands": [
"coverlet"
]
},
"powershell": {
"version": "6.2.3",
"commands": [
"pwsh"
]
}
}
}
91 changes: 90 additions & 1 deletion Directory.Build.targets
Original file line number Diff line number Diff line change
@@ -1,4 +1,93 @@
<?xml version="1.0" encoding="utf-8"?>
<Project>

<PropertyGroup>
<CoverageFormat Condition="'$(CoverageFormat)' == ''">cobertura</CoverageFormat>
</PropertyGroup>

<PropertyGroup>
<CoverletId />
</PropertyGroup>

<Target Name="BeforeCollectCodeCoverage" BeforeTargets="RunTests">
<BeforeCollectCodeCoverageTask TestAssembly="%(TestToRun.Identity)" PipeName="%(TestToRun.Filename)">
<Output TaskParameter="CoverletId" PropertyName="CoverletId" />
</BeforeCollectCodeCoverageTask>
</Target>

<Target Name="AfterCollectCodeCoverage" AfterTargets="RunTests">
<AfterCollectCodeCoverageTask PipeName="%(TestToRun.Filename)" CoverletId="$(CoverletId)" />
</Target>

<UsingTask
TaskName="BeforeCollectCodeCoverageTask"
TaskFactory="RoslynCodeTaskFactory"
AssemblyName="Microsoft.Build.Tasks.Core">

<ParameterGroup>
<TestAssembly ParameterType="System.String" Required="true" />
<PipeName ParameterType="System.String" Required="true" />
<CoverletId ParameterType="System.Int32" Output="true" />
</ParameterGroup>

<Task>
<Using Namespace="System.Diagnostics" />
<Using Namespace="System.IO.Pipes" />
<Code>
Log.LogMessage(MessageImportance.High, PipeName);
Log.LogMessage(MessageImportance.High, "1");
using var coverlet = Process.Start(
@"$(DotNetTool)",
$@"tool run coverlet ""{TestAssembly}"" " +
@"--format $(CoverageFormat) " +
@"--target ""$(DotNetTool)"" " +
@"--targetargs ""tool run pwsh " +
$"$server = [System.IO.Pipes.NamedPipeServerStream]::new('{PipeName}');" +
"$server.WaitForConnection();" +
"$server.Disconnect();" +
"$server.WaitForConnection();" +
"$server.Disconnect();" +
@"""");
CoverletId = coverlet.Id;
Log.LogMessage(MessageImportance.High, "2");

using var client = new NamedPipeClientStream(PipeName);
Log.LogMessage(MessageImportance.High, "3");
client.Connect();
Log.LogMessage(MessageImportance.High, "4");
</Code>
</Task>

</UsingTask>

<UsingTask
TaskName="AfterCollectCodeCoverageTask"
TaskFactory="RoslynCodeTaskFactory"
AssemblyName="Microsoft.Build.Tasks.Core">

<ParameterGroup>
<PipeName ParameterType="System.String" Required="true" />
<CoverletId ParameterType="System.Int32" Required="true" />
</ParameterGroup>

<Task>
<Using Namespace="System.Diagnostics" />
<Using Namespace="System.IO.Pipes" />
<Code>
Log.LogMessage(MessageImportance.High, PipeName);
Log.LogMessage(MessageImportance.High, "5");
using var client = new NamedPipeClientStream(PipeName);
Log.LogMessage(MessageImportance.High, "6");
client.Connect();

Log.LogMessage(MessageImportance.High, "7");
using var coverlet = Process.GetProcessById(CoverletId);
coverlet.WaitForExit();
Log.LogMessage(MessageImportance.High, "8");
</Code>
</Task>

</UsingTask>

<Import Project="Sdk.targets" Sdk="Microsoft.DotNet.Arcade.Sdk" />
</Project>
</Project>
15 changes: 12 additions & 3 deletions azure-pipelines.yml
Original file line number Diff line number Diff line change
Expand Up @@ -57,11 +57,15 @@ jobs:
- task: PublishBuildArtifacts@1
displayName: Publish Packages
inputs:
PathtoPublish: '$(Build.SourcesDirectory)/artifacts/packages/$(_BuildConfig)'
PublishLocation: Container
ArtifactName: Packages_$(Agent.Os)_$(Agent.JobName)
pathtoPublish: '$(Build.SourcesDirectory)/artifacts/packages/$(_BuildConfig)'
artifactName: Packages_$(Agent.Os)_$(Agent.JobName)
continueOnError: true
condition: always()
- task: PublishCodeCoverageResults@1
displayName: Publish Code Coverage
inputs:
codeCoverageTool: cobertura
summaryFileLocation: '$(Build.SourcesDirectory)/src/*/coverage.cobertura.xml'
- job: Linux
pool:
name: NetCorePublic-Pool
Expand All @@ -79,3 +83,8 @@ jobs:
name: Build
displayName: Build
condition: succeeded()
- task: PublishCodeCoverageResults@1
displayName: Publish Code Coverage
inputs:
codeCoverageTool: cobertura
summaryFileLocation: '$(Build.SourcesDirectory)/src/*/coverage.cobertura.xml'

0 comments on commit 661d252

Please sign in to comment.