2

我正在尝试收集覆盖信息并将其发布到我的 C# 项目的 SonarCloud,使用 GitHub Actions 作为我的 CI 管道。执行很简单,基本上是尝试对所有项目执行测试,合并所有覆盖文件:

run: |
  .\.sonar\scanner\dotnet-sonarscanner begin /k:"LanguageDev_Yoakke" /o:"languagedev" /d:sonar.login="${{ secrets.SONAR_TOKEN }}" /d:sonar.host.url="https://sonarcloud.io" /d:sonar.cs.opencover.reportsPaths="CoverageResults/coverage.opencover.xml" /d:"sonar.verbose=true"
  dotnet build
  dotnet test /p:CollectCoverage=true /p:CoverletOutput="../CoverageResults/" /p:MergeWith="../CoverageResults/coverage.json" /p:CoverletOutputFormat=\"opencover,json\" /maxcpucount:1
  .\.sonar\scanner\dotnet-sonarscanner end /d:sonar.login="${{ secrets.SONAR_TOKEN }}"

请注意,我确实需要同时输出opencoverjson格式。coverlet似乎只有正确合并是json输出格式之一,因此它可以opencover最终将其转换为。

问题是,这不会在 CI 上生成覆盖信息 - 下载工件显示没有生成的文件夹或文件。但是,如果只是 pass /p:CoverletOutputFormat=opencover,则所有覆盖信息都会在 CI 上生成 - 但由于没有json输出而无法正确合并。

在本地,命令

dotnet test /p:CollectCoverage=true /p:CoverletOutput="../CoverageResults/" /p:MergeWith="../CoverageResults/coverage.json" /p:CoverletOutputFormat=\"opencover,json\" /maxcpucount:1

正常工作并生成正确的覆盖 XML 文件。

可能是什么问题,为什么它不适用于为 CI 指定的两种覆盖格式?最初我以为我不知道在 YAML 中转义引号,但这里似乎并非如此。

4

0 回答 0