Continuous integration (CI) and continuous delivery (CD), collectively referred to as the CI/CD pipeline, together comprise a software engineering technique to perform automated tasks in response to code changes.
Benefits
SciJava projects including ImageJ2 and Fiji use CI/CD in several ways, including:
- Building the code. A CI job deploys
SNAPSHOT
builds to the SciJava Maven repository in response to pushes to each code repository’s mainline branch (e.g.main
ormaster
). So any downstream projects depending on a version ofLATEST
for a given component will match the last successful CI build—i.e., the latest code on the mainline branch. - Run associated unit tests. CI is instrumental in early detection of new bugs introduced to the codebase.
- Making releases. A CI job deploys release builds to the appropriate Maven repository—typically either the SciJava Maven repository or OSS Sonatype.
- Keeping resources up-to-date.
- Keeping web resources such as the javadoc up to date.
Deploying your library to a Maven repository makes it available for other developers. It is also a contribution requirement for the Fiji project.
Platforms
There are several popular options for performing CI builds in the cloud, or on your own self-hosted infrastructure:
- GitHub Actions - Used by most SciJava projects for builds, testing, and deployment.
- AppVeyor - Used by a few SciJava projects for builds on the Windows platform.
- Travis CI - Used by SciJava projects from 2017 until 2021.
- Jenkins - Used by SciJava projects from 2010 until 2019.
Just to name a few that are or were used within the ImageJ community.