我正在尝试收集覆盖信息并将其发布到我的 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 }}"
请注意,我确实需要同时输出opencover
和json
格式。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 中转义引号,但这里似乎并非如此。