Skip to content

rrourke/diff-coverage-maven-plugin

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

69 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

diff-coverage-maven-plugin

Release Maven Central codecov

Diff coverage maven plugin builds JaCoCo compatible code coverage report of new and modified code based on a provided diff.

The plugin is able to check and fail a build if code coverage rules are not met.

How it works

Diff coverage works in tandem with JaCoCo and requires JaCoCo to be applied to a project as well. The plugin does the next steps:

  • analyzes coverage data('.exec' files generated by JaCoCo)
  • cuts off all code coverage data that wasn't modified
  • checks violation rules if any are set up
  • builds diff coverage HTML report. See HTML report example

Install plugin

<build>
    <plugins>
        <plugin> <!-- Make sure JaCoCo plugin is applied -->
            <groupId>org.jacoco</groupId>
            <artifactId>jacoco-maven-plugin</artifactId>
            <version>0.8.7</version>
        </plugin>
        <plugin>
            <groupId>com.github.surpsg</groupId>
            <artifactId>diff-coverage-maven-plugin</artifactId>
            <version>0.2.1</version>
            <configuration>
                <!-- Required. diff content source. only one of file, URL or Git is allowed -->
                <diffSource>
                    <!-- path to diff file -->
                    <file>path/to/diffFile</file>
                    
                    <!-- branch, revision or tag -->
                    <git>HEAD</git> <!-- compares current HEAD and all uncommited with this <git> -->
                
                    <!-- URL to get diff content by. Used GET method -->
                    <url>http://url.com</url>
                </diffSource>
                
                <!-- Optional -->
                <violations> 
                    <!-- Default 'false'. Fail build if violation rules weren't met  -->
                    <failOnViolation>true</failOnViolation>

                    <!-- Sets min coverage rule for: instructions, lines, branches -->
                    <minCoverage>0.7</minCoverage>
                    
                    <!-- Each rule could be configured separately -->
                    <!-- Default '0.0'. If value is '0.0' then the rule is disabled -->
                    <minLines>0.1</minLines>
                    <minBranches>0.7</minBranches>
                    <minInstructions>1.0</minInstructions>
                </violations>

                <!-- Optional. Exec files include pattern. By default 'build/jacoco.exec' file is used -->
                <dataFileIncludes>**/custom/exec/location/*.exec</dataFileIncludes>
                
                <!-- Optional. Exec files exclude pattern -->
                <dataFileExcludes>**/custom/**/exclude/*.exec</dataFileExcludes>
                
                <!-- Optional. Ant patterns by which we include classes for coverage report. -->
                <includes>
                    <include>**/package/**</include>
                    <include>**/ClassNamePrefix*</include>
                </includes>
                <!-- Optional. Ant patterns by which we exclude classes from coverage report. -->
                <excludes>
                    <exclude>**/exclude/**/ClassName.class</exclude>
                </excludes>
                <!-- If neither <includes> nor <excludes> are specified then we pass all classes for coverage report -->
                
            </configuration>
            <executions>
                <execution>
                    <goals>
                        <goal>diffCoverage</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Maven goal description

Diff Coverage Maven plugin has a single goal diffCoverage that is bind to verify phase

# run tests and build diff coverage report
mvn clean verify

# Invoke the goal explicitly.
# It depends on `test` phase, make sure it's called when coverage data(*.exec files) already generated.  
mvn clean test diff-coverage:diffCoverage

Report example

Maven output on failed violation rules:

[INFO] File src/main/kotlin/org/example/Hello.kt has 5 modified lines
[INFO] New violation: Rule violated for bundle untitled: instructions covered ratio is 0.4, but expected minimum is 0.7
[INFO] New violation: Rule violated for bundle untitled: lines covered ratio is 0.6, but expected minimum is 0.7
[WARNING] Fail on violations: true. Found violations: 2.
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  9.919 s
[INFO] Finished at: 2020-07-06T00:56:33+03:00
[INFO] ------------------------------------------------------------------------
[ERROR] Rule violated for bundle TestProj: instructions covered ratio is 0.4, but expected minimum is 0.7
[ERROR] Rule violated for bundle TestProj: lines covered ratio is 0.6, but expected minimum is 0.7

The plugin creates JaCoCo like HTML, XML and CSV reports in directory target/site/diffCoverage/.

DiffCoverage HTML report

JaCoCo HTML report JaCoCo HTML report

About

Maven plugin for computing code coverage on modified code

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Kotlin 64.9%
  • Java 35.1%