engineering

Ably Engineering Team: Guidance on Releases

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.

Release Process

  1. Merge all pull requests containing changes intended for this release to main branch
  2. Prepare a Release Branch and a corresponding pull request, obtain approval from reviewers and then merge to main branch
  3. Trigger the Publish Workflow
  4. If the publish fails then fix the state of the main branch, via one or more approved pull requests, with focussed changes that aim to fix the problem and then try step 3 again
  5. Push Git Version Tag
  6. Create GitHub release

Release Branch

Should:

Publish Workflow

Should:

Version Bump

Should:

For 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:

Version Tag

Should:

Additional Notes: