API Release Process

API Release Process

The API Release Process describes the creation of (pre-)releases of API versions throughout the API lifecycle, and for a given meta-release.

For a meta-release, the API Release Process targets the release of public API versions, aligned with the corresponding Commonalities and ICM public versions.

IMPORTANT

API release numbers are decoupled from API version numbers.

API releases are just numbered sequentially, while API versions follow the API versioning guidelines.

 The following sections describe how to create an API release and how to report progress on it during the meta-release process.

Definitions

Term

Definition

Term

Definition

pre-release

A pre-release is a GitHub release of an alpha or release-candidate API version. Note: the term release is also often used here but it should be clear from the context.

NOTE: pre-releases are not meant to be included in a meta-release. All pre-releases are publicly available in the CAMARA GitHub and can be used AT THE USER'S OWN RISK, as changes may happen to such API versions without notice.

release

A release is a GitHub release of a public API version. Releases may be proposed as part of a meta-release.

release of initial public API

Initial public API versions only exists for new APIs. It concerns public APIs versions with x = 0 (0.y.z without version extension).

A public API version is called "initial" to indicate that the API version has not yet reached full maturity, but is considered stable enough to  be proposed for use in applications. However, the user shall be aware that subsequent versions of this API may require code changes to their applications.

Initial public API versions can be

  • released outside the meta-release process in order to allow for rapid evolution.

  • released as part of a meta-release, after which it is expected that in the next meta-release this API version becomes stable.

release of stable public API

Stable public API versions are recommended for use in commercial applications. The user can expect that subsequent public API versions will be backward-compatible with the one they are using, unless explicitly announced otherwise.

meta-release

A meta-release is a set of public API versions published together at a given point in time (Spring and Fall).

All API versions of a given meta-release shall be aligned to the releases of the Commonalities and Identity and Consent Management (ICM) documentation included in that same meta-release.

maintenance release

A maintenance release is the release of a patch update of a public API version.

release tag

A release tag is a GitHub tag placed on the main or a maintenance branch that identifies a release in the API's repository.

release package

A release package is a zip file of the GitHub repository created using the GitHub release mechanism. It contains a snapshot of the full API repository marked with the release tag.

GitHub release

A GitHub release is the combination of a release tag and, optionally, a release package of the GitHub repository (zip file) created using the GitHub release feature. A GitHub release applies to the full API repository. A GitHub release may containing any alpha, release-candidate or public API version(s). A GitHub release shall not include any wip API versions.

release PR

A release PR is created for an API version to prepare its GitHub release. A release PR shall minimally set the version fields in the API yaml file to the exact API version and establish the availability of the API release assets as per the API readiness checklist.

API release tracker

An API release tracker is a LF Confluence wiki page that provides the visibility on the progress of the (pre-)releases of a given API version. For each API version planned for public release (as part of or outside a meta-release), its release tracker shall be created under their API Release Tracking page on the CAMARA Wiki.

API releases - overview

To prepare the release of a public API version, API versions shall be (pre-)released as follows:

  • before M3, release (optionally) one or more alpha API versions as needed

  • to reach M3, release the first release-candidate API version:

    • the release-candidate implements the scope of the target public API version.

    • this pre-release is agreed to be ready for API implementation and functional testing.

    • it is aligned with the alpha release of Commonalities and ICM for the meta-release (M1).

    • it includes all required API release assets as defined in the API Readiness Checklist for release candidate API versions.

  • between M3 and M4, release additional release-candidate API versions as needed

    • to fix bugs reported by the API users

    • to include updates needed to be in-line with the release candidates of Commonalities and ICM (M2)

  • to reach M4, release the public API version:

    • this is the API release for inclusion in the meta-release (if so planned).

    • the public API release must be aligned with the public releases of Commonalities and ICM (M4).

    • it includes all required API release assets as defined in the API Readiness Checklist for public API verions

An API Sub Project or independent Sandbox team can release as many alpha and release-candidate API verssions as useful for API development and testing. In between (pre-)releases, the API version shall be set to wip (to indicate that this API version should not be used).

 

IMPORTANT

Pre-releases (for alpha or release-candidate API versions) available in the CAMARA GitHub can be freely used, BUT AT THE USER'S OWN RISK.

Public API versions 

Public API versions can have an initial or a stable status.

Please note that initial public API versions can be

  • released at any time outside the meta-release process in order to allow for rapid API evolution.

  • released as part of a meta-release, in which case the milestones defined for the meta-release have to be followed.

A public API version is released only if it provides all required API readiness checklist items (see: API readiness checklist).

For stable public API versions, participation in the meta-release process is mandatory. There are additional API readiness checklist items to be provided for the release of stable API versions.

Only stable public API versions are recommended for use in commercial applications. The user can expect that subsequent public API versions will be backward-compatible with the one they are using, unless explicitly announced otherwise.

Meta-release

To be part of a meta-release, the API Sub Project or independent Sandbox team needs to participate in the meta-release process. For the meta-release, the following needs to be provided:

  • the API release tracker (see API release trackers)

  • the expected (pre-)releases at the respective M3 and M4 milestones

  • minimally an initial public API version

  • the required set of API release assets according to the API readiness checklist (see below).

Once released as part of a meta-release, it is expected that a public API releases an update in the next meta-release to align with applicable updated Commonalities and ICM guidelines.

Example of the use of the API release process

To release a MINOR update of a public API version 1.0.0 (released as r1.3), resulting in the release of public API version 1.1.0:

  • Develop the 1.1.0 updates on the main branch. The first PR shall update the OAS file setting the API version to wip, and the URL to vwip.

  • Once sufficiently stable, create a release PR for the API version 1.1.0-alpha.1.

  • After release PR approval, create the pre-release r2.1 and publish it on the API release tracker.

  • Several alpha API versions 1.1.0-alpha.2..4 may be released, each setting the API version back to "wip" in the first API update PR and evolving the alpha number with each following pre-release (r2.2 - r2.4).

  • When the API version is ready, create a release PR for the API version 1.1.0-rc.1.

  • Several release-candidate API versions 1.1.0-rc.1..3 may be released, each setting the API version back to "wip" in the first API update PR and evolving the continuous rc number across pre-releases (r2.5 - r2.7).

    • Example: 1.1.0-rc.1 / v1rc1 (r2.5) → 1.1.0-rc.2 / v1rc2 (r2.6) → 1.1.0-rc.3 / v1rc3 (r2.7)

  • When the API version is ready for public release, create the release PR that sets the public API version to 1.1.0. NOTE: the public release PR minimally removes the rc extension from the version and URL fields in the API yaml file and assures all API release assets are available and updated as per the API readiness checklist.

  • After release PR approval, create the release r2.8 for the public API version 1.1.0 and update the API release tracker.

  • The approved public API version 1.1.0 (URL version v1) will be included in the meta-release as planned.

To release a PATCH update of this public API version 1.1.1 (choice per API team decision):

  • (on a maintenance branch or on the main branch if no changes have been done on main since the API public release)

  • optionally: create a release candidate API patch version 1.1.1-rc.4 / v1rc4 (r2.9)

  • create the public API patch version 1.1.1 / v1 (r2.10 (or 2.9 if no release-candidate was done))

API release numbering

API release numbers are GitHub tags of the format "rx.y".

IMPORTANT: Release numbers are not related to the API version.

The release numbers shall follow the guidelines described below.

  • Release numbers start with x=1 and y=1: r1.1.

  • y is incremented by 1 at each subsequent (pre-)release (for alpha, release-candidate and public API versions), and for a maintenance release, e.g. rx.y+1.

  • After a meta-release of a public API version release rx.y, the next release number for this API is rx+1.1 (y resets to 1).

  • In case of maintenance of a release rx.y, the next release shall be rx.y+1.

  • A maintenance release replaces the previous release in the meta-release.

The following table illustrates the continuous release numbering of an API version across the API release process.

release type

API version

release number (release tag)

release package

release package label

release type

API version

release number (release tag)

release package

release package label

N/A

work-in-progress

N/A

N/A

N/A

pre-release

alpha

rx.1 ... rx.m

optional

"pre-release"

pre-release

release-candidate

rx.m+1 ... rx.n

mandatory

"pre-release"

release

public

rx.n+1

mandatory

"latest"

maintenance release

public

rx.n+2 ... rx.n+p

mandatory

"latest"

API readiness checklist

To release an API version, an API Sub Project or independent Sandbox team needs to provide the required release assets as specified in the API Readiness Checklist (see description below).

The template for the checklist is the API-Readiness-Checklist.md file located in the CAMARA / ReleaseManagement / documentation repository folder.

For the readiness of the API version(s), an API Sub Project or independent Sandbox team needs to

  • copy the API-Readiness-Checklist.md file for each API to the API repository in the <home>/documentation/API_documentation folder.

  • rename the file to include <API name> (in lower-kebab-case) as prefix plus a dash ("-") e.g. quality-on-demand-API-Readiness-Checklist.md

  • provide each release asset as indicated in the column corresponding to the release type

  • for an available asset

    • update the Status column with "Y" (yes) if the release asset is available or fulfilled in the current release, or "N" (no) otherwise. Example: an intermediate pre-release may not yet provide all mandatory release assets for the release type.

    • update the Reference Information column with the relative link to the asset in the repository (if applicable), and any other additional links or comments as needed (see explanations below).

NOTE: the checklists of a public API version and of its preceding release-candidate API version can be the same.

Checklist explanation

The following table explains each of the release assets expected to be delivered in the API release.

Nr

API release assets

Explanation

1

API definition

This is the OAS API definition file (following the https://spec.openapis.org/oas/v3.0.3 format). It shall be located in the code/API_definitionfolders of the API repository and validated using the linting rules in point 2. 

2

Design guidelines from Commonalities applied

This references the applicable release of the guidelines from the Commonalities repository, in particular the CAMARA-API-Design-Guide.md, and the CAMARA-API-Event-Subscription-and-Notification-Guide.md. See also the example in Commonalities / artefacts / camara-cloudevents / event-subscription-template.yaml.

A subset of these design guidelines have been mapped to corresponding linting rules as described in Commonalities / documentation / Linting-rules.md, which shall be executed against the OAS API definition file once linting is enabled for the API repository.

For the design guidelines that cannot (yet) be verified by linting rules, the API Sub Project team or independent Sandbox shall ensure coverage manually. Ideally, a checklist of such guidelines would be provided by the Commonalities team.  In particular, the API Sub Project or independent Sandbox team shall verify data type alignment with those in the the Commonalities / artifacts / CAMARA_common.yaml file

3

Guidelines from ICM applied

This references the applicable release of the guidelines from the IdentityAndConsentManagement repository, and to the related linting rules provided by ICM (provided to Commonalities) 

Other guidelines that cannot be verified by linting rules shall be covered manually by the API Sub Project or independent Sandbox team. Ideally, a checklist of such guidelines would be provided by the ICM team.

4

API versioning convention applied

This shall be checked through a linting rule added to the Commonalities rule set on the format of the version field in the OAS API definition file. API versioning is described in the Commonalities / documentation / API-design-guidelines.md document.

5

API documentation

The API specification shall include all the documentation needed by the API consumer. It shall include the mandatory authentication and authorization text as defined in the section on security in the API-design-guidelines.md.

Any explanatory API documentation beyond the one embedded in the API definition file, shall be located in the /documentation/API_documentation folder of the API repository.

6

User Stories

User Stories need to be documented by the API Sub Project or independent Sandbox team. It is recommended to have at least 2 different User Stories. User Stories shall follow the template found here: Commonalities / documentation / Userstory-template.md and be located in the /documentation/API_documentation folder of the API repository.

Please note that User Stories shall be provided when an API is first submitted to the CAMARA API backlog / documentation / APIbacklog.md.

7

Basic API test cases & documentation

At least one Gherkin feature file shall be provided for the API in the /code/Test_definitions folder of the API repository covering sunny day scenarios and main error cases (of course you may provide more if available). Guidance can be found in the Commonalities / documentation / API-Testing-Guidelines.md. Basic tests are sufficient for an initial public release.

8

Enhanced API test cases & documentation

Gherkin feature files shall be provided for the API in the /code/Test_definitions folder of the API repository covering sunny and rainy day scenarios.  Details can be found in the Commonalities / documentation / API-Testing-Guidelines.md. Enhanced tests are required for a stable public release.

NOTE: the enhanced test cases can be in the same or different test file(s) as the basic test cases. The choice is up to the API Sub Project or independent Sandbox team.

9

Test result statement

Links to the scope issue (or any other relevant issue) for the API version that contains a statement by at least one of the API Sub Project or independent Sandbox members that the Gherkin feature files have been successfully executed against their (lab) API implementation. 

Example: Test statements for stable APIs quality-on-demand and qos-profiles v1.0.0 · Issue #418 · camaraproject/QualityOnDemand

10

API release numbering conventions applied

This is verified using the information on the API release tracker. The API release numbering is described here: API Release Process - section on API release numbering

11

Change log updated

The changelog needs to be provided following the template which can be copied from here: ReleaseManagement / documentation / CHANGELOG_TEMPLATE.md. A good example usage of the template is the the following: QualityOnDemand/CHANGELOG.md. Please refer to the more recent releases using the release numbering scheme (rx.y).

12

Previous public release was certified

The previous public API version had at least 1 certified implementation. The Reference information section shall reference a note (e.g. "see (1)") under the checklist table to be added that states the certified company(s) as can be found on the following link: GSMA Open Gateway Portal.

 

13

API description (for marketing)

This is the link to the API description used for marketing the API. The API description is a Wiki page located under the home Wiki page of the API repository created from the api-description template (to be defined). Please see here for an example API description.

Note: the addition of a Security review release asset beyond the Commonalities linting rules is for further study.

Readiness checklist per API version

The following table is the API readiness checklist that lists the assets that need to be provided with the API version for it to be ready for its (pre-)release. The required assets depend on 

  • the API version type: alpha, release-candidate or public

  • for public API versions, in addition, depending on its target status: initial or stable

In the table, 

  • "M" indicates a mandatory release asset

  • "O" indicates an optional release asset which may be provided with the release, if available.  

The API-Readiness-Checklist.md is available in the ReleaseManagement / documentation for copying to the API repository’s documentation / API documentation folder. When copying, the file shall be prefixed with the api-name as there shall be one checklist for each API of the API repository to be released (resulting in <api-name>-API-Readiness-Checklist.md).

 

Nr

API release assets

alpha

release- candidate

 initial public (v0.y.z)

stable public (vx.y.z, x>=1)

Status

Reference information

1

API definition

M

M

M

M

 

relative link: /code/API_definitions/apiname.yaml

2

Design guidelines from Commonalities applied

O

M

M

M

 

Comm. release nr

3

Guidelines from ICM applied

O

M

M

M

 

ICM release nr

4

API versioning convention applied

M

M

M

M

 

 

5

API documentation

M

M

M

M

 

relative link: /documentation/API_documentation/apiname-API-Readiness-Checklist.md

6

User Stories

O

O

O

M

 

relative link: /documentation/API_documentation/apiname-Userstory.md

7

Basic API test cases & documentation

O

M

M

M

 

relative link: /code/Test_definitions

8

Enhanced API test cases & documentation

O

O

O

M

 

relative link: /code/Test_definitions

9

Test result statement

O

O

O

M

 

issue link

10

API release numbering convention applied

M

M

M

M

 

 

11

Change log updated

M

M

M

M

 

relative link:

12

Previous public release was certified

O