Skip to content

Commit d477fe9

Browse files
committed
feat: Adicionado a análise de código do sonar.
1 parent 68da904 commit d477fe9

File tree

5 files changed

+172
-21
lines changed

5 files changed

+172
-21
lines changed

README.md

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ Os testes são executados normalmente quando construído para **produção** e n
5353

5454
É utilizado o [EclEmma Jacoco](https://www.eclemma.org/jacoco/) para verificação de cobertura de código. Para executar a cobertura:
5555
```
56-
mvn clean test -Ptest jacoco:report
56+
mvn clean test verify -Ptest jacoco:report
5757
```
5858
Na pasta target, é gerado um "site" mostrando toda a cobertura de código. Este projeto utiliza o _Action_ para os testes e build da aplicação. Ao final do teste, é enviado para [codecov.io](https://codecov.io) todo o relatório. Para verificar a cobertura de teste deste código, acesse [codecov.io/gh/danielso2007]([codecov.io](https://codecov.io/gh/danielso2007/virtualLibraryAPI)).
5959

@@ -67,6 +67,29 @@ Para "rodar" a imagem, execute:
6767
docker run -p 8080:8080 --name swapi virtualLibraryAPI:<project.version>
6868
```
6969

70+
### Code quality
71+
72+
O sonar é usado para analisar a qualidade do código. Você pode iniciar um servidor Sonar local (acessível em http: // localhost: 9001) com:
73+
74+
```
75+
docker-compose -f src/main/docker/sonar.yml up -d
76+
```
77+
78+
Você pode executar uma análise do Sonar usando o scanner de sonar ou usando o plugin maven.
79+
80+
Em seguida, execute uma análise do sonar:
81+
82+
```
83+
mvn -Ptest clean verify jacoco:report sonar:sonar
84+
```
85+
86+
Se você precisar executar novamente a fase do Sonar, especifique pelo menos a fase de inicialização, já que as propriedades do Sonar são carregadas do arquivo sonar-project.properties.
87+
88+
```
89+
mvn clean test verify -Ptest jacoco:report
90+
mvn initialize sonar:sonar
91+
```
92+
7093
### Documentação da API - swagger (OpenAPI 3):
7194

7295
A aplicação usa o swagger para a exibição da documentação da API. Para verificar, acesse os links [swagger-ui](http://localhost:8080/swagger-ui.html) e [api-docs](http://localhost:8080/api-docs). Documentação [swagger.io](https://swagger.io/docs/open-source-tools/swagger-ui/usage/configuration/) e [springdoc.org](https://springdoc.org/).

pom.xml

Lines changed: 68 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,11 @@
4444

4545
<docker.networks>vlapi</docker.networks>
4646
<docker.data.base.name>mongodb</docker.data.base.name>
47+
48+
<project.testresult.directory>${project.build.directory}/test-results</project.testresult.directory>
49+
<jacoco.utReportFolder>${project.build.directory}/jacoco/test</jacoco.utReportFolder>
50+
<jacoco.utReportFile>${jacoco.utReportFolder}/test.exec</jacoco.utReportFile>
51+
<junit.utReportFolder>${project.testresult.directory}/test</junit.utReportFolder>
4752
</properties>
4853

4954
<dependencies>
@@ -187,28 +192,13 @@
187192
<target>${maven.compiler.target}</target>
188193
</configuration>
189194
</plugin>
190-
<plugin>
191-
<groupId>org.springframework.boot</groupId>
192-
<artifactId>spring-boot-maven-plugin</artifactId>
193-
<executions>
194-
<execution>
195-
<id>pre-integration-test</id>
196-
<goals>
197-
<goal>start</goal>
198-
</goals>
199-
</execution>
200-
<execution>
201-
<id>post-integration-test</id>
202-
<goals>
203-
<goal>stop</goal>
204-
</goals>
205-
</execution>
206-
</executions>
207-
</plugin>
208195
<plugin>
209196
<groupId>org.apache.maven.plugins</groupId>
210197
<artifactId>maven-surefire-plugin</artifactId>
211198
<configuration>
199+
<!-- Force alphabetical order to have a reproducible build -->
200+
<runOrder>alphabetical</runOrder>
201+
<reportsDirectory>${junit.utReportFolder}</reportsDirectory>
212202
<skipTests>${skip-tests}</skipTests>
213203
<workingDirectory>${project.build.directory}</workingDirectory>
214204
<trimStackTrace>false</trimStackTrace>
@@ -229,19 +219,24 @@
229219
<version>0.8.5</version>
230220
<executions>
231221
<execution>
232-
<id>prepare-agent</id>
222+
<id>pre-unit-tests</id>
233223
<goals>
234224
<goal>prepare-agent</goal>
235225
</goals>
226+
<configuration>
227+
<!-- Sets the path to the file which contains the execution data. -->
228+
<destFile>${jacoco.utReportFile}</destFile>
229+
</configuration>
236230
</execution>
237231
<execution>
238232
<id>post-unit-test</id>
239233
<phase>test</phase>
240234
<goals>
241235
<goal>report</goal>
242-
<goal>check</goal>
243236
</goals>
244237
<configuration>
238+
<dataFile>${jacoco.utReportFile}</dataFile>
239+
<outputDirectory>${jacoco.utReportFolder}</outputDirectory>
245240
<excludes>
246241
<exclude>**/*VirtualLibraryApiApplication.*</exclude>
247242
<exclude>br/com/virtuallibrary/commons/**/*</exclude>
@@ -267,6 +262,36 @@
267262
</execution>
268263
</executions>
269264
</plugin>
265+
<plugin>
266+
<groupId>org.apache.maven.plugins</groupId>
267+
<artifactId>maven-failsafe-plugin</artifactId>
268+
<configuration>
269+
<!-- Due to spring-boot repackage, without adding this property test
270+
classes are not found See https://github.com/spring-projects/spring-boot/issues/6254 -->
271+
<classesDirectory>${project.build.outputDirectory}</classesDirectory>
272+
<!-- Force alphabetical order to have a reproducible build -->
273+
<runOrder>alphabetical</runOrder>
274+
<reportsDirectory>${junit.itReportFolder}</reportsDirectory>
275+
<includes>
276+
<include>**/*IT*</include>
277+
<include>**/*IntTest*</include>
278+
</includes>
279+
</configuration>
280+
<executions>
281+
<execution>
282+
<id>integration-test</id>
283+
<goals>
284+
<goal>integration-test</goal>
285+
</goals>
286+
</execution>
287+
<execution>
288+
<id>verify</id>
289+
<goals>
290+
<goal>verify</goal>
291+
</goals>
292+
</execution>
293+
</executions>
294+
</plugin>
270295
<plugin>
271296
<groupId>org.apache.maven.plugins</groupId>
272297
<artifactId>maven-resources-plugin</artifactId>
@@ -319,6 +344,29 @@
319344
<outputDir>${project.build.directory}</outputDir>
320345
</configuration>
321346
</plugin>
347+
<plugin>
348+
<groupId>org.sonarsource.scanner.maven</groupId>
349+
<artifactId>sonar-maven-plugin</artifactId>
350+
<version>3.7.0.1746</version>
351+
</plugin>
352+
<plugin>
353+
<groupId>org.codehaus.mojo</groupId>
354+
<artifactId>properties-maven-plugin</artifactId>
355+
<version>1.0.0</version>
356+
<executions>
357+
<execution>
358+
<phase>initialize</phase>
359+
<goals>
360+
<goal>read-project-properties</goal>
361+
</goals>
362+
<configuration>
363+
<files>
364+
<file>sonar-project.properties</file>
365+
</files>
366+
</configuration>
367+
</execution>
368+
</executions>
369+
</plugin>
322370
</plugins>
323371
</build>
324372

sonar-project.properties

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
sonar.projectKey=danielso2007_virtualLibraryAPI
2+
sonar.projectName=VirtualLibraryAPI
3+
sonar.organization=danielso2007
4+
sonar.projectVersion=0.5.0
5+
6+
sonar.sources=src/main/
7+
sonar.host.url=https://sonarcloud.io
8+
9+
sonar.tests=src/test/
10+
sonar.coverage.jacoco.xmlReportPaths=target/jacoco/test/jacoco.xml
11+
sonar.java.codeCoveragePlugin=jacoco
12+
sonar.junit.reportPaths=target/test-results/test,target/test-results/integrationTest
13+
14+
sonar.sourceEncoding=UTF-8
15+
sonar.exclusions=src/main/webapp/content/**/*.*, src/main/webapp/i18n/*.js, target/classes/static/**/*.*
16+
17+
sonar.issue.ignore.multicriteria=S3437,S4502,S4684,UndocumentedApi
18+
# Rule https://sonarcloud.io/coding_rules?open=squid%3AS3437&rule_key=squid%3AS3437 is ignored, as a JPA-managed field cannot be transient
19+
sonar.issue.ignore.multicriteria.S3437.resourceKey=src/main/java/**/*
20+
sonar.issue.ignore.multicriteria.S3437.ruleKey=squid:S3437
21+
# Rule https://sonarcloud.io/coding_rules?open=squid%3AUndocumentedApi&rule_key=squid%3AUndocumentedApi is ignored, as we want to follow "clean code" guidelines and classes, methods and arguments names should be self-explanatory
22+
sonar.issue.ignore.multicriteria.UndocumentedApi.resourceKey=src/main/java/**/*
23+
sonar.issue.ignore.multicriteria.UndocumentedApi.ruleKey=squid:UndocumentedApi
24+
# Rule https://sonarcloud.io/coding_rules?open=squid%3AS4502&rule_key=squid%3AS4502 is ignored, as for JWT tokens we are not subject to CSRF attack
25+
sonar.issue.ignore.multicriteria.S4502.resourceKey=src/main/java/**/*
26+
sonar.issue.ignore.multicriteria.S4502.ruleKey=squid:S4502
27+
# Rule https://sonarcloud.io/coding_rules?open=squid%3AS4684&rule_key=squid%3AS4684
28+
sonar.issue.ignore.multicriteria.S4684.resourceKey=src/main/java/**/*
29+
sonar.issue.ignore.multicriteria.S4684.ruleKey=squid:S4684

sonar_local.sh

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
#!/bin/bash
2+
RED='\033[1;31m'
3+
BLACK='\033[0;30m'
4+
DARK_GRAY='\033[1;30m'
5+
LIGHT_RED='\033[0;31m'
6+
GREEN='\033[0;32m'
7+
LIGHT_GREEN='\033[1;32m'
8+
BROWN_ORANGE='\033[0;33m'
9+
YELLOW='\033[1;33m'
10+
BLUE='\033[0;34m'
11+
LIGHT_BLUE='\033[1;34m'
12+
PURPLE='\033[0;35m'
13+
LIGHT_PURPLE='\033[1;35m'
14+
CYAN='\033[0;36m'
15+
LIGHT_CYAN='\033[1;36m'
16+
LIGHT_GRAY='\033[0;37m'
17+
WHITE='\033[1;37m'
18+
NC='\033[0m' # No Color
19+
20+
# echo -e "${YELLOW}Starting the sonar container...${NC}"
21+
# docker-compose -f src/main/docker/sonar.yml up -d
22+
23+
echo -e "${YELLOW}Starting scan...${NC}"
24+
mvn -Ptest clean test jacoco:report sonar:sonar

src/main/docker/sonar.yml

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
version: '3.7'
2+
services:
3+
virtuallibraryapi-sonar:
4+
container_name: virtuallibraryapi-sonar
5+
image: sonarqube:8.2-community
6+
# https://hub.docker.com/r/bitnami/sonarqube#configuration
7+
environment:
8+
- SONARQUBE_USERNAME=admin
9+
- SONARQUBE_PASSWORD=admin
10+
- SONARQUBE_START_TIMEOUT=300
11+
volumes:
12+
- "sonardata:/opt/sonarqube/data"
13+
- "sonarlogs:/opt/sonarqube/log"
14+
- "sonarextensions:/opt/sonarqube/extensions"
15+
ports:
16+
- 9001:9000
17+
- 9092:9092
18+
logging:
19+
driver: json-file
20+
volumes:
21+
sonardata:
22+
sonarlogs:
23+
sonarextensions:
24+
25+
networks:
26+
vlapi:
27+
driver: bridge

0 commit comments

Comments
 (0)