Precisava, rápido, de um relatório de cobertura de testes para um projeto meu.
Um projeto simples feito em .NET, com alguns testes unitários, e que, a cada pull request na branch main
, fosse gerado um relatório de forma que eu pudesse divulgar entre minha equipe (no caso eu mesmo e meus pensamentos).
Um detalhe importante: meu repositório no GitHub é privado, e se eu quiser usar o GitHub Pages, preciso torná-lo público, o que está fora de questão.
Por que usar o Coverlet?
Vamos gerar o relatório de cobertura de testes com o Coverlet, porque:
- Funciona com os principais frameworks de teste: xUnit, NUnit e MSTest
- É open source, leve e amplamente adotado pela comunidade .NET
🔗 https://github.com/coverlet-coverage/coverlet
E para transformar os dados brutos de cobertura em relatórios legíveis:
Por que usar o ReportGenerator?
- Converte os arquivos de cobertura (como o
coverage.xml
gerado pelo Coverlet) em relatórios HTML interativos e fáceis de visualizar - É leve, rápido e gratuito
Criando um workflow no GitHub Actions
name: Code Coverage
on:
push:
branches: [main]
pull_request:
branches: [main]
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: Checkout repo
uses: actions/checkout@v3
- name: Setup .NET
uses: actions/setup-dotnet@v4
with:
dotnet-version: '9.0.x'
- name: Restore dependencies
run: dotnet restore
- name: Run tests with coverage
run: |
dotnet test ./tests/MeuProjetoDe.Tests/Domain.Tests.csproj \
--collect:"XPlat Code Coverage"
- name: Install ReportGenerator
run: dotnet tool install --global dotnet-reportgenerator-globaltool
- name: Generate HTML report
run: |
reportgenerator \
-reports:"**/coverage.cobertura.xml" \
-targetdir:"coveragereport" \
-reporttypes:Html
- name: Upload coverage report artifact
uses: actions/upload-artifact@v4
with:
name: coverage-report
path: coveragereport
Esse workflow vai:
- Configurar o ambiente .NET
- Restaurar dependências
- Executar os testes com o
--collect:"XPlat Code Coverage"
, que ativa o data collector do Coverlet - Instalar o ReportGenerator
- Gerar o relatório HTML
- Fazer upload do resultado como artefato
Depois de rodar o workflow, o relatório já estará disponível nos artefatos:
Como publicar o relatório no GitHub Pages
Como meu repositório original é privado e pretendo mantê-lo assim, criei um segundo repositório público apenas para servir o relatório via GitHub Pages:
1. Criando um token de acesso
Acesse Developer Settings no GitHub e crie um token com as permissões adequadas:
Guarde esse token, pois ele será necessário para a próxima etapa do workflow.
2. Adicionando o deploy no final do workflow
Adicione o trecho abaixo no final do seu workflow para publicar o conteúdo no branch gh-pages
do repositório público:
- name: Deploy coverage report to MeuProjeto.Coverage repo
run: |
git config --global user.name "seu nome"
git config --global user.email "seu email"
cd coveragereport
git init
git checkout -b gh-pages
git remote add origin https://x-access-token:${{ secrets.COVERAGE_PUBLISH_TOKEN }}@github.com/{seu-usuario}/{repositorio-publico}.git
git add .
git commit -m "feat: atualização automática de cobertura"
git push --force origin gh-pages
3. Criando e adicionando o token no GitHub
Vá em https://github.com/settings/tokens
Crie um token com permissão de escrita no repositório de destino
Copie o token e adicione no repositório privado (Generioc) em
Settings > Secrets and variables > Actions, como:
COVERAGE_PUBLISH_TOKEN
Pronto. O GitHub Actions agora pode fazer o deploy automaticamente no Pages. ✅
Top comments (0)