Skip to content

Commit

Permalink
Merge code coverage from all test runs and agents (#9)
Browse files Browse the repository at this point in the history
  • Loading branch information
AArnott committed Jun 21, 2019
1 parent 1668c50 commit fc34ef4
Show file tree
Hide file tree
Showing 3 changed files with 61 additions and 12 deletions.
11 changes: 11 additions & 0 deletions azure-pipelines.yml
Expand Up @@ -61,3 +61,14 @@ jobs:
- template: azure-pipelines/dotnet.yml
- template: azure-pipelines/collect-logs.yml
- template: azure-pipelines/expand-template.yml

- job: MergeCoverage
dependsOn:
- Windows
- Linux
- macOS
pool:
vmImage: Ubuntu 16.04
steps:
- template: azure-pipelines/install-dependencies.yml
- template: azure-pipelines/publish-codecoverage.yml
28 changes: 16 additions & 12 deletions azure-pipelines/dotnet.yml
Expand Up @@ -44,11 +44,23 @@ steps:
testRunTitle: netcoreapp2.2-$(Agent.JobName)
workingDirectory: src

- task: CopyFiles@1
inputs:
Contents: |
bin/**/coverage.cobertura.xml
obj/**/*.cs
TargetFolder: $(Build.ArtifactStagingDirectory)/coverageResults
displayName: Collecting coverage.cobertura.xml artifacts
condition: succeededOrFailed()

- powershell: |
dotnet tool install --tool-path obj dotnet-reportgenerator-globaltool
$Inputs = [string]::join(';', (Get-ChildItem bin/coverage.cobertura.xml -Recurse |% { Resolve-Path -Relative $_ }))
obj/reportgenerator -reports:"$Inputs" -targetdir:"$(Build.ArtifactStagingDirectory)/coverageResults" -reporttypes:Cobertura
displayName: Merge code coverage results
Write-Host "Substituting $(System.DefaultWorkingDirectory) with {reporoot}"
$reports = Get-ChildItem "$(Build.ArtifactStagingDirectory)/coverageResults/coverage.cobertura.xml" -Recurse
$reports |% {
$content = Get-Content -Path $_ |% { $_ -Replace [regex]::Escape("$(System.DefaultWorkingDirectory)"), "{reporoot}" }
Set-Content -Path $_ -Value $content -Encoding UTF8
}
displayName: Preparing code coverage reports for merging on another machine

- task: PublishBuildArtifacts@1
inputs:
Expand All @@ -58,14 +70,6 @@ steps:
displayName: Publish coverageResults artifacts
condition: succeededOrFailed()

- task: PublishCodeCoverageResults@1
displayName: Publish code coverage results to Azure DevOps
inputs:
codeCoverageTool: cobertura
summaryFileLocation: $(Build.ArtifactStagingDirectory)/coverageResults/Cobertura.xml
failIfCoverageEmpty: true
condition: eq(variables['Agent.OS'], 'Windows_NT') # We have to pick just one agent to publish the code coverage summary file (https://github.com/tonerdo/coverlet/issues/474#issuecomment-504446150)

- bash: bash <(curl -s https://codecov.io/bash)
displayName: Publish code coverage results to codecov.io
condition: ne(variables['codecov_token'], '')
Expand Down
34 changes: 34 additions & 0 deletions azure-pipelines/publish-codecoverage.yml
@@ -0,0 +1,34 @@
steps:
- task: DownloadBuildArtifacts@0
displayName: Download Windows code coverage results
inputs:
artifactName: coverageResults-Windows
downloadPath: $(System.DefaultWorkingDirectory)/bin
- task: DownloadBuildArtifacts@0
displayName: Download Linux code coverage results
inputs:
artifactName: coverageResults-Linux
downloadPath: $(System.DefaultWorkingDirectory)/bin
- task: DownloadBuildArtifacts@0
displayName: Download macOS code coverage results
inputs:
artifactName: coverageResults-macOS
downloadPath: $(System.DefaultWorkingDirectory)/bin
- powershell: |
dotnet tool install --tool-path obj dotnet-reportgenerator-globaltool --version 4.2.2
Copy-Item -Recurse $(System.DefaultWorkingDirectory)/bin/coverageResults-Windows/obj/* $(System.DefaultWorkingDirectory)/obj
Write-Host "Substituting {reporoot} with $(System.DefaultWorkingDirectory)"
$reports = Get-ChildItem -Recurse "$(System.DefaultWorkingDirectory)/bin/coverage.cobertura.xml"
$reports |% {
$content = Get-Content -Path $_ |% { $_.Replace("{reporoot}", "$(System.DefaultWorkingDirectory)") }
Set-Content -Path $_ -Value $content -Encoding UTF8
}
$Inputs = [string]::join(';', ($reports |% { Resolve-Path -relative $_ }))
obj/reportgenerator -reports:"$Inputs" -targetdir:coveragereport -reporttypes:Cobertura
displayName: Merge coverage
- task: PublishCodeCoverageResults@1
displayName: Publish code coverage results to Azure DevOps
inputs:
codeCoverageTool: cobertura
summaryFileLocation: 'coveragereport/Cobertura.xml'
failIfCoverageEmpty: true

0 comments on commit fc34ef4

Please sign in to comment.