The CCPP will use community-based repository hosting and code development protocols in order to facilitate community involvement with the CCPP. GitHub and Bitbucket offer similar services, and GitHub (using git) was selected for this project.
The authoritative repository for the CCPP will reside on a community hosted site in GitHub. This central repository will only contain code pertaining to the supported CCPP, that is, a master with the supported suites, and branches for public release candidates (innermost area of the ecosystem). New and ongoing shared development branches will be hosted in development forks of the primary repository. The development forks may be hosted by any Git-based repository hosting service. The development forks may be centralized for an organization (NCAR, ESRL, etc.) or may be created by an individual developer for single or collaborative work, enabling exchanges amongst developers who may want to share and combine their work. All developers (organization or individual) will develop in a server-side copy of the repository, also known as fork of the repository.
The current repository structure for the CCPP includes a collection of repositories organized by function. The physics parameterizations and IPDv4 are currently in one repository
https://github.com/NCAR/ccpp-physics but there is a plan to separate them in the future. The IPD expansion (IPDe) is in another repository (
https://github.com/NCAR/ccpp-framework), and the atmospheric driver). A developer will fork the repository in which they are developing (e.g., physics), but use a stable version (tag) of the other parts of the modeling system. The following workflow description would apply to that repository in which development is needed.
New development will be conducted using forks of the central repository, as described below. When the development is mature, a pull request will be initiated to begin the review process. An organizational fork may implement their own review process for their fork if desired.