Я настроил CI для решения .NET Core с помощью GitHub Actions. Когда код передается в главную ветвь, создается решение, запускаются модульные тесты и выполняется анализ кода с помощью SonarCloud. Шаг анализа кода фактически выполняется sonarcloud-github-action.
Граница качества в SonarCloud не проходит, потому что процент покрытия составляет 0,0% (как для нового, так и для существующего кода). Я создаю отчеты о покрытии кода с помощью Coverlet. Файл extension.opencover.xml успешно создается после выполнения теста для каждого проекта модульного тестирования. В файле sonar-project.properties я ссылаюсь на эти файлы следующим образом:
sonar.cs.opencover.reportsPaths=**\coverage.opencover.xml
Но очевидно, что отчеты о покрытии кода распознаются, но не обрабатываются сканером SonarCloud. В журнале рабочего процесса GitHub Actions я вижу эти предупреждения:
INFO: Parsing the OpenCover report <path>/coverage.opencover.xml
INFO: Adding this code coverage report to the cache for later reuse: <path>/coverage.opencover.xml
...
WARN: Missing blame information for the following files:
WARN: * <path>/coverage.opencover.xml
WARN: This may lead to missing/broken features in SonarQube
Пытаясь устранить предупреждение «Отсутствует информация об обвинении», я добавил файлы покрытия к исключениям в моем проекте SonarCloud: **/coverage.opencover.xml
, но это не решило проблему. Предупреждение по-прежнему появляется, а покрытие кода по-прежнему составляет 0,0%.
Есть какие-нибудь подсказки, как это сделать?
[редактировать]:
Мой рабочий процесс в GitHub Actions выглядит так:
name: .NET Core
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Setup .NET Core
uses: actions/setup-dotnet@v1
with:
dotnet-version: 2.2.108
- name: Build with dotnet
run: dotnet build src/<solution>.sln --configuration Release
- name: Unit Tests
run: dotnet test src/<solution>.sln /p:CollectCoverage=true /p:CoverletOutputFormat=opencover
- name: SonarCloud Scan
uses: sonarsource/sonarcloud-github-action@master
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
`