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.
- Building the code. A CI job deploys
SNAPSHOTbuilds to the SciJava Maven repository in response to pushes to each code repository’s mainline branch (e.g.
master). So any downstream projects depending on a version of
LATESTfor 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.
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.