Proposal for the lifecycle of API Repositories with Sandbox/Incubated/Graduated/Archived
Prepared by @Herbert Damker for the TSC on 2024-08-22
Referenced within issue: ...
Changes compared to previous proposal
Previous proposal hasn't considered the split between API Repository and CAMARA Sub Projects as introduced with https://github.com/camaraproject/Governance/issues/142
Sandbox / Incubated / Graduated will now be defined for API Repositories, not Sub Projects
Proposed relation of API Repositories and CAMARA Sub Project
Sub Projects are (as currently defined) consisting of one or multiple API repositories
the Maintainers of the Sub Project are the union of the Maintainers of the API repositories belonging to the Sub Project
existing Sub Projects can maintain a mix of API Repositories on different maturity levels and can either propose new API repositories themselves or accept API repositories as part of their Sub Project
NEW: Sandbox API repositories can initially exist independent of a Sub Project
the decision about the inclusion of an API into a Sub Project vs the creation of a new Sub Project to the Incubation, where much more information about the API and already and initial version is available
Sandbox API repositories are encouraged to get accepted by existing Sub Projector to build up the necessary prerequisites to be able to apply for the creation of a new CAMARA Sub Project during Incubation
The maturity level of an API Repository should give the audience a clear indication in which life cycle phase the contained APIs are
Open Point
How to differentiate in CAMARA GitHub the Sandbox API Repositories from more mature API Repositories (Incubated/Graduated)
Proposals are welcome.
Definitions
CAMARA defines four types of API Repositories:
Sandbox API Repository
Incubated API Repository
Graduated API Repository
Archived API Repositories
A Sandbox API Repository is meant for the rapid development of a new API proposal through one or multiple initial API versions (0.x.y) until the first public release of an Initial API Version within and under the guidelines of CAMARA. A Sandbox API Repository can be created independent of a CAMARA Sub Project or in context of an existing CAMARA Sub Project.
An Incubated API Repository is meant for the further evolution of an API which has been implemented and launched already by at least one operator, fits into the CAMARA API portfolio and gained sufficient support within the CAMARA community. An Incubated API Repository is overseen by a CAMARA Sub Project.
A Graduated API Repository maintains a stable CAMARA API which has been widely adopted within the market (e.g. adopted within at least one complete market or #n operators across #m markets - detailed criteria to be defined later). It is overseen by a CAMARA Sub Project and with mature processes to replace Maintainers and Codeowners within the API Repository.
An API Repository can get archived due to inactivity during the Sandbox phase (e.g. never reached an initial release or a release cycle) or the TSC decides that the API(s) can’t be maintained or shouldn’t be used any longer for valid reasons.
NOTE: it should be avoided to host APIs of different maturity within the same API repository. New APIs should be proposed as enhancements and developed within a new (Sandbox) API repository and follow the lifecycle below.
Proposal - Lifecycle
Creation of a new (Sandbox) API Repository
The purpose of a Sandbox API Repository is to describe, develop and define the a proposed API openly within the CAMARA community. The creation of a new Sandbox API Repository will be decided by the API Backlog Working Group, based on either a proposal for a new API development from a CAMARA participant or a enhancement proposal from an existing CAMARA Sub Project. The proposal will be presented in a form as defined by the API Backlog Working Group
The decision of the API Backlog Working Group does only ensure that the API proposal fulfils the minimum criteria for a new Sandbox API Repository:
The scope of the proposed API and initial use cases are described and fit in general into the scope of CAMARA
At least one initial Maintainer and one initial Codeowner (could be the same person) is nominated
The creation of a new Sandbox API Repository does not imply the creation of a new CAMARA Sub Project.
A new Sandbox API Repository based on an enhancement proposal submitted by a Sub Project will get part of the proposing Sub Project.
A Sandbox API Repository for a new API proposal is initially independent, but should aim to either get accepted by an existing CAMARA Sub Project or to build up the necessary prerequisites to be able to apply for the creation of a new CAMARA Sub Project during Incubation.
A Sandbox API Repository which is not part of an existing Sub Project will get a Wiki page (in the Sandbox section), a preliminary mailing list, a Slack channel, and (on request) a Zoom meeting for their communication.
A Sandbox API Repository
can initially be maintained by a single Maintainer and Codeowner but should aim to win active Contributors and Maintainers from participating companies
can work initially without branch protection to allow rapid development (but only Codeowners have write access to the repository, all other contributions have to be done via the Fork and Pull approach)
can create (pre)releases of Initial API versions (0.x). The release should come with all release artefacts as defined by the Release Management, but can be done independent of the CAMARA meta-release cycles
can participate in a CAMARA meta-release cycle, in this case all release artefacts as defined by the Release Management must be provided at the milestones
can release only Initial API versions, but no Stable API versions
must apply again with a changed API proposal in case of scope changes
Incubation of an API Repository
An Incubated API Repositories is meant for the further evolution of an API which has been implemented and launched already by at least one operator, fits into the CAMARA API portfolio and gained sufficient support within the CAMARA community.
A Sandbox API Repository can apply for Incubation during a CAMARA Meta-release cycle, with the prerequisites and steps below. The Incubation of an API Repository will be finally decided by the Technical Steering Committee (TSC) as part of the Meta-release.
Prerequisites:
The Sandbox API Repository has released previously an Initial API version released which is implemented and launched by at least one operator
The Sandbox API Repository has defined their target version and scope for the release cycle for the defined milestone of the release cycle
The Sandbox API Repository has at least three Maintainers (from three different companies) which are actively supporting the development of the API
The Sandbox API Repository has three Codeowners (preferable from different companies), which are ensuring that changes of the API are done according to the CAMARA Governance (based on issues and with reviewed pull requests)
This implies that the branch protection rule is activated within the repository
The Maintainers of the Sandbox API Repository apply for Incubation by opening an issue in the API Backlog Working Group. The API Backlog Working Group will do a pre-check on behalf of the TSC about the above pre-requisites and the fit of the API(s) into the CAMARA API Portfolio early within the release cycle based on the available scope, use cases and user stories, documentation and API definition(s) with the following potential results:
For Sandbox API Repositories which are already part of a Sub Project if there are any needs for change identified
For yet independent Sandbox API Repositories
a recommendation to include the APIs within an existing Sub Project
a recommendation to create a new Sub Project which includes the Sandbox API repository, potentially together with other Sandbox API repositories (especially if they have worked together during the Sandbox phase)
Objections regarding the prerequisites or about the fit into the CAMARA scope and API portfolio
The Maintainers of Sandbox API Repository should follow the recommendation(s), and in case of the recommendation to include within an existing Sub Project ask for the acceptance within the Sub Project. As the final decision about the Incubation is with the TSC, the Maintainers can escalate potential conflicts to the TSC for guidance and resolution.
The TSC will decide about the Incubation of a Sandbox API Repository based on the following criteria:
The Maintainers of the Sandbox followed the recommendations of the API Backlog Working Group
The Sandbox API Repository has participated within the milestones of the Meta-release cycle and passed the M3 milestone successfully (with an approved release candidate API Version)
The target API version can be an Initial or Stable (the Stable API version (1.x.x) should be only used after the Incubation has been decided after the release candidate, for the release candidate still an Initial API version should be used)
This implies that for the API all release artefacts required by the Release Management guidelines have been delivered, and the API is aligned with the Commonalities and Identify and Consent Management (ICM) guidelines and artefacts
The release PR for the public release is available and ready for approval by the TSC.
With the decision to incubate an independent Sandbox API Repositories a new CAMARA Sub Project will be created.
NOTE: an implication of the new creation rule for CAMARA Sub Projects is that a CAMARA Sub Project has at least one Incubated API Repository with the above prerequisites. The TSC has to decide about existing Sub Projects which not fulfil this criteria (yet).
Graduation of an API Repository
A Graduated API Repository maintains a stable CAMARA API which has been widely adopted within the market. The Graduation of an API Repository will be decided by the TSC.
Criteria will be defined later. Potential criteria for Graduation could be:
the API Repository has been participated within two CAMARA release cycles with a Stable API version
the Stable API version has been implemented within at least one complete market or #n operators across #m markets
the Sub Project has mature processes to replace Maintainers and Codeowners within the API Repository based on merits
Archiving of an API Repository
An API Repository can get archived due to inactivity during the Sandbox phase (e.g. never reached an initial release or a release cycle) or the TSC decides that the API(s) can’t be maintained or shouldn’t be used any longer for valid reasons.
Archiving of an API repository will be decided by the TSC based on a review.
The review will be triggered by (not exhaustive):
Inactivity within a new Sandbox API repository
three months (no contributions of documents or API specs)
no release of an Initial API version after six month
Lack of participation of a Sandbox API repository within two consecutive CAMARA release cycles
Lack of participation of an Incubated or Graduated API repository within a CAMARA release cycle if there would be changes necessary to stay aligned with the CAMARA Guidelines
APIs within Archived API Repositories are not considered as CAMARA APIs. An archived API repository can get reactivated through a new API proposal within the API Backlog group (e.g. if the original API proposal owner got inactive). If there were reasons beyond inactivity for the archiving, the new proposal should address them, and the decision for reactivation has to be taken by the TSC.