ONOS runs a continuous integration (CI) job whenever a change set is merged into the master branch and whenever a gerrit review request or rebase is done.  The CI job will do a build from scratch, run all of the unit tests and run static analysis tools to check that the submitted change follows the ONOS coding standards.

Continuous Integration Tool Chain

Jenkins

ONOS uses the Jenkins system for running and monitoring continuous integration (CI) jobs. When a change is made, Jenkins starts a job to build and test the source tree. Jenkins also launches a nightly build for SonarQube. You can monitor the status of Jenkins jobs using the Jenkins console at jenkins.onosproject.org.

Checkstyle

Checkstyle is a static analysis tool that scans java source code and checks it for compliance with a set of coding standards. It checks for things like white space usage, naming, placement of braces and other code style issues.  Checkstyle is run as part of every maven build of ONOS, and checkstyle violations will fail the build.

SonarQube

SonarQube integrates a set of java code quality analysis tools with a web-base UI to allow easy identification of code problems. Once a day, Jenkins runs a build that triggers SonarQube to generate quality information about the ONOS source.  SonarQube keeps track of runs over time, so we can track the quality of the ONOS code base as it evolves. You can view the ONOS SonarQube web console to see how we are doing.

SonarQube integrates the following tools:

JaCoCo

JaCoCo is a coverage analysis tool.  SonarQube runs coverage analyses on all of the unit tests in the ONOS tree and publishes them in a clickable drill down web UI.  Percentages are given for the branch and line coverage of each class in ONOS.