Configurar o SonarCloud para um projeto usando Jest - fga-eps-mds/A-Disciplina-MDS-EPS GitHub Wiki
Data | Versão | Descrição | Revisor |
---|---|---|---|
17/11/2021 | 1.0 | Versão Inicial | Henrique Martins de Messias |
19/11/2021 | 1.1 | Adição do parser | Henrique Martins de Messias |
20/10/2022 | 1.2 | Atualização dos procedimentos | Bruno Carmo Nunes |
- Github Actions
- Node
- SonarCloud
- Jest
Na raiz do projeto, crie um arquivo chamado sonar-project.properties
com o seguinte conteúdo:
sonar.organization=fga-eps-mds-1
sonar.projectKey=fga-eps-mds_<nome_do_repositorio>
sonar.projectName=<nome_do_repositorio>
sonar.sources= src/
sonar.tests= __tests__/
sonar.language=js
sonar.javascript.lcov.reportPaths=coverage/lcov.info
sonar.coverage.exclusions=__tests__/,
sonar.testExecutionReportPaths=coverage/jest-report.xml
Os valores de sonar.organization e sonar.projectKey podem ser encontrados ao acessar o SonarCloud e acessar a área de informação do projeto.
Os valores de sonar.sources e sonar.tests podem variar dependendo do seu projeto.
Não esqueça de dar o commit e enviar o novo arquivo para sua organização no github, caso não mande pode ocorrer problemas na configuração do SonarCloud.
Independentemente da linguagem usada no projeto, é necessário adicionar uma secret chamada SONAR_TOKEN.
Para adicionar a secret no repositório:
- Entre no SonarCloud com sua conta github que tenha vinculado o repositório da disciplina;
- Adicione a análise de um novo projeto no canto superior à direita;
- Selecione a organização EPS/MDS, e escolha o repositório do seu projeto.
- Quando selecionado, escolhe o método de análise sendo o Github Actions.
- Copie o token mostrado no campo 2 (o que vem após Value field);
- Vá para a página do seu projeto no GitHub e clique em Settings e depois clique em Secrets;
- Clique em New repository secret;
- Na parte Name coloque: SONAR_TOKEN;
- Na parte Value cole o código copiado no passo 5;
- Clique em Add secret.
Inclua no seu package.json
as dependências de desenvolvimento:
npm install -D jest
npm install -D jest-config
npm install -D jest-sonar
Na raiz do repositório, crie um arquivo chamado jest.config.js
com o seguinte conteúdo:
module.exports = {
moduleDirectories: ['node_modules', '<rootDir>/'],
moduleFileExtensions: [
'js',
'mjs',
'cjs',
'jsx',
'ts',
'tsx',
'json',
'node',
],
collectCoverage: true,
collectCoverageFrom: ['./src/**'],
coveragePathIgnorePatterns: [
'/src/server.js',
],
testFailureExitCode: 0,
reporters: [
'default',
[
'jest-sonar',
{
outputDirectory: 'coverage/',
outputName: 'jest-report.xml',
reportedFilePath: 'relative',
relativeRootDir: '<rootDir>/../',
},
],
],
testMatch: [
'**/*.test.js',
],
};
module.exports = createJestConfig(customJestConfig)
Esse arquivo serve para escolher o que irá testar e também para gerar as métricas destinadas ao SonarCloud, que irá criar uma pasta coverage e enviar quando a Actions for ativada pelo GitHub.
Crie um arquivo chamado .github/workflows/<nome_do_arquivo>.yml
com o seguinte conteúdo:
on:
push:
branches:
- main
name: SonarCloud
jobs:
sonarcloud:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
fetch-depth: 0
- name: Get main
run: git fetch origin main
- name: Instalar dependencias
run: npm install
- name: Instalar Jest
run: npm install -g jest
- name: Executar testes
run: jest --coverage --runInBand --detectOpenHandles --forceExit
- name: SonarCloud Scan
uses: sonarsource/sonarcloud-github-action@master
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
Obs: o secrets.GITHUB_TOKEN é disponibilizado automaticamente pelo GitHub.
Os passos importantes desse pipeline são Executar testes e SonarCloud Scan. O seu projeto pode configurar o pipeline de maneiras diferentes, mas certifique-se que esses dois passos estejam presentes.
Crie um arquivo chamado .github/workflows/<nome_do_arquivo>.yml
com o seguinte conteúdo:
name: ReleaseMetrics
on:
push:
tags:
- "v*"
jobs:
generate-release:
runs-on: ubuntu-latest
steps:
- name: Get file name
id: name
run: echo "::set-output name=file_name::fga-eps-mds-<nome_do_repositorio>-$(TZ='America/Sao_Paulo' date +'%m-%d-%Y-%H-%M-%S')-${{github.ref_name}}"
- name: Copy repository
uses: actions/checkout@v2
- run: wget $METRICS_URL -O ${{ steps.name.outputs.file_name }}.json
env:
METRICS_URL: ${{ secrets.METRICS_URL }}
- uses: actions/upload-artifact@v2
with:
name: ${{ steps.name.outputs.file_name }}.json
path: ${{ steps.name.outputs.file_name }}.json
- name: Send metrics to docs repo
uses: dmnemec/[email protected]
env:
API_TOKEN_GITHUB: ${{ secrets.API_TOKEN_GITHUB }}
with:
source_file: ${{ steps.name.outputs.file_name }}.json
destination_repo: 'fga-eps-mds/<nome_do_repositorio-de-documentacao>'
destination_folder: 'analytics-raw-data'
user_email: ${{ secrets.GIT_EMAIL}}
user_name: ${{ secrets.GIT_USER }}
commit_message: New metrics from ${{ github.event.repository.name }}
No passo name
, modifique a string com o nome do repositório.
Crie uma secret chamada METRICS_URL, para ser passado as informações das métricas geradas pela API do SonarCloud. Como um link exemplo (12 métricas):
Sendo que em PROJECT_KEY (valor da variável component), é a chave do repositório no SonarCloud. A mesma utilizada no passo 1 na parte de sonar-project.properties
.
O API_TOKEN_GITHUB, é obtido na configuração do usuário, e em configurações de desenvolvedor. Necessitando selecionar todas as configurações do repositório (repo).
Ao gerar o token, copie ele e crie um secret com o nome API_TOKEN_GITHUB.
Na variável destination_repo, coloque o nome do repositório da documentação do seu projeto (O mesmo link que o github utiliza na url).
Crie também dois secrets GIT_EMAIL e GIT_USER, representando as são informações do e-mail e usuário do github usados na seção.
Com isso, o arquivo de extração de métricas está pronto, ele somente irá ser ativado caso o usuário mande uma tag de versão do repositório para o github.
Segue abaixo a quantidade de secrets criadas nessa documentação.
Caso você receba o seguinte erro:
You are running CI analysis while Automatic Analysis is enabled. Please consider disabling one or the other
É necessário desabilitar o scan automático do repositório no SonarCloud. Para isso:
- Vá para a página do seu projeto no SonarCloud;
- Na aba Administration, clique em Analysis Method;
- Na seção SonarCloud Automatic Analysis, clique no botão para desabilitar.