This document outlines our ideal requirements for SDK releases.
There will be some SDK repositories:
Where technically possible, SDK repository release processes which claim to adhere to this guidance must follow these ideal requirements closely.
main
branchmain
branchmain
branch, via one or more approved pull requests, with focussed changes that aim to fix the problem and then try step 3 againShould:
main
branchmain
branch, once approvedrelease/<version>
Should:
workflow_dispatch
eventref
with a commit SHA supplied as an input to the triggering event, where that SHA will generally be HEAD
of the main
branch, at the point the Release Branch was mergedShould:
major
, minor
, patch
or the nature of the pre-release suffix (see Product Lifecycle); orFor clarity, conforming to semantic versioning, here are example version updates for each possible bump scenario:
Bump | Example Before | Example After | Trigger | SemVer Description | Notes |
---|---|---|---|---|---|
Increment major |
1.2.3 |
2.0.0 |
Includes at least one change labelled breaking |
if any backwards incompatible changes are introduced to the public API | Users may need to change their code if they are using the affected APIs. |
Increment minor |
1.2.3 |
1.3.0 |
Includes at least one change labelled enhancement , and no changes labelled breaking |
if new, backwards compatible functionality is introduced to the public API | Also include enhancements which don’t change the public API but do add or improve functionality (e.g. performance improvement). |
Increment patch |
1.2.3 |
1.2.4 |
Does not include any changes labelled either enhancement or breaking or both |
if only backwards compatible bug fixes are introduced | |
Increment major , as pre-release |
1.2.3 |
2.0.0-rc.1 |
Includes at least one change labelled breaking |
if any backwards incompatible changes are introduced to the public API | Users may need to change their code if they are using the affected APIs. |
Increment minor , as pre-release |
1.2.3 |
1.3.0-rc.1 |
Includes at least one change labelled enhancement , and no changes labelled breaking |
if new, backwards compatible functionality is introduced to the public API | Also include enhancements which don’t change the public API but do add or improve functionality (e.g. performance improvement). |
Increment patch , as pre-release |
1.2.3 |
1.2.4-rc.1 |
Does not include any changes labelled either enhancement or breaking or both |
if only backwards compatible bug fixes are introduced | |
Increment nature of pre-release suffix | 2.0.0-beta.2 |
2.0.0-rc.1 |
We want to remain in pre-release, but our level of confidence has increased so we’re upgrading the phase. | ||
Increment ‘build’ numeric component of pre-release suffix | 2.0.0-rc.1 |
2.0.0-rc.2 |
We want to remain in pre-release and our level of confidence remains the same, we’ve just iterated/improved. | ||
Remove pre-release suffix | 2.0.0-rc.2 |
2.0.0 |
We’re ready to move to GA for this release. | Has implications for scope of changelog entry. See this comment. |
“Trigger” analysis must include labels assigned to pull requests. It should also include labels assigned to issues linked to those pull requests.
“Public API” only refers to the interfaces that users code against to use our SDKs.
Therefore, SDK changes to the Ably REST or Realtime protocol implementation do not always necessitate a major
version bump - that is, those changes may not need to be labelled breaking
, unless they also change the user-facing APIs offered by the SDK in a backwards incompatible manner.
See also:
Should:
v
prefix - e.g. v1.2.3
for the release of version 1.2.3
Additional Notes:
v1
) and minor (e.g. v1.2
) releases which are used by some ecosystems (e.g. GitHub Actions), but we don’t use those conventions or moveable tags for our SDK releases, therefore they’re not in scope of this document.v
prefix.
Where possible, these repositories should be migrated to conform to the format specified here, including the v
prefix.
Any such migration should:
v
prefixv
prefix is required