Skip to content

fix: correct SonarCloud opencover glob pattern for coverlet.MTP output - #60

Merged
Malcolmnixon merged 1 commit into
mainfrom
fix/sonarcloud-opencover-glob-pattern
Aug 28, 2026
Merged

fix: correct SonarCloud opencover glob pattern for coverlet.MTP output#60
Malcolmnixon merged 1 commit into
mainfrom
fix/sonarcloud-opencover-glob-pattern

Conversation

@Malcolmnixon

Copy link
Copy Markdown
Member

CI's Sonar scan explicitly logged:
WARNING: Could not find any coverage report file matching the
pattern '**/*.opencover.xml'.

coverlet.MTP (the Microsoft.Testing.Platform-native coverage extension used here, since coverlet.collector's VSTest-only integration doesn't run under the MTP 'dotnet test' mode required by xunit.v3 4.0.0) names its output files coverage.opencover..xml, e.g. coverage.opencover.280826051706281.xml - not coverage.opencover.xml.

The glob **/*.opencover.xml only matches files whose name literally ends in the two dot-segments "opencover.xml"; the numeric session-id segment coverlet.MTP inserts breaks that match, so sonar.cs.opencover.reportsPaths never found any file and SonarCloud always reported 0% new-code coverage, regardless of actual test coverage.

Changed the glob to **/coverage.opencover.*.xml, which matches coverlet.MTP's actual output naming.

Verified locally: dotnet test --coverlet --coverlet-output-format opencover (matching CI's exact Test step) produces
coverage.opencover..xml files under each test project's results folder; the new glob pattern matches all of them.

CI's Sonar scan explicitly logged:
  WARNING: Could not find any coverage report file matching the
  pattern '**/*.opencover.xml'.

coverlet.MTP (the Microsoft.Testing.Platform-native coverage extension
used here, since coverlet.collector's VSTest-only integration doesn't
run under the MTP 'dotnet test' mode required by xunit.v3 4.0.0) names
its output files coverage.opencover.<session-id>.xml, e.g.
coverage.opencover.280826051706281.xml - not coverage.opencover.xml.

The glob **/*.opencover.xml only matches files whose name literally
ends in the two dot-segments "opencover.xml"; the numeric session-id
segment coverlet.MTP inserts breaks that match, so sonar.cs.opencover.reportsPaths
never found any file and SonarCloud always reported 0% new-code
coverage, regardless of actual test coverage.

Changed the glob to **/coverage.opencover.*.xml, which matches
coverlet.MTP's actual output naming.

Verified locally: dotnet test --coverlet --coverlet-output-format opencover
(matching CI's exact Test step) produces
coverage.opencover.<session-id>.xml files under each test project's
results folder; the new glob pattern matches all of them.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
@Malcolmnixon
Malcolmnixon merged commit 24fea94 into main Aug 28, 2026
9 checks passed
@Malcolmnixon
Malcolmnixon deleted the fix/sonarcloud-opencover-glob-pattern branch August 28, 2026 13:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant