As an open-source project, it is incredibly important that we have a well-defined release policy. This document defines said policy.
Once a release has been made it is immutable. The release should only ever be edited to mark it as broken. Nothing else should ever be changed.
Releases of these libraries are versioned using
semantic versioning. Where
a.b.c-tag is the version
a is the major version,
b, is the minor version,
c is the patch
tag is additional metadata, the following hold:
- Breaking changes to the public API will result in a major version increase.
- Addition of functionality in a backwards-compatible manner will result in a minor version increase.
- Backwards-compatible bug fixes will result in a patch version increase.
- The tag will indicate pre-release or beta versions, and will increase when any pre-release change is made. These are not intended to be stable.
Releases are made from the
main branch in this repository, and each release to
crates.io must correspond to a tag on the
Cutting a release for these libraries works as follows:
- PR your changes against
main, ensuring that the modified libraries have a bumped version number.
- Once the PR lands on
main, create a tag for each library you are releasing, named as described below in tag naming.
- Release each of these libraries to
crates.io. If you are a member of the Enso team and do not have the required permissions, please ask.
If a change to a library (e.g. prelude) is not required in the downstream libraries in this repo and additionally does not cause breakage of said downstream libraries, it is not necessary to release new versions of the downstream libraries too.
As the crates in this repository are interdependent, you will need to release
them in the following order as
cargo does not yet have support for
interdependent releases, and the
cargo publish-all project doesn’t seem to
The actionables for this section are:
- Record the release order here.
Releases are made for the individual libraries in this repository and are made
available on crates.io. Each release must correspond to a
tag in the repository using the following format:
libnameis the name of the library (as it is imported).
versionis the version string using the semver version scheme.