Skip to content

Release Process

Matthew Dzaman edited this page Feb 19, 2020 · 6 revisions

Goals

Support Semantic Versioning including alpha, beta, and rc

erector will be released initially as 0.1.0 and will follow semver right-shifted (0.major.minor) until the API is stabilized as 1.0.0. Alpha, beta, and rc branches will be used when developing new major versions. (While the tooling can support arbitrary versioning, deviating will require a work-around and may have unknown adverse effects.)

An alternative would be to initially release as 1.0.0-alpha and increment through beta and rc.

Support patch fixes for prior releases

If 1.3.0 has a bug that 2.0.0 lacks, and it can be solved in a backwards-compatible way, then 1.3 should be patched to 1.3.1 and users should not be forced to upgrade across breaking changes.

Use CI to orchestrate release

Either the CI should automatically create tags and bump versions based on commit messages or when it sees a new tag it should bump versions. If irreversible actions (e.g. releasing to npm) are automatic, they should be individually gated by a manual approval.

1:1 relationship for git tags and npm releases

Major versions will each have their own branch, and when merged to should bump the minor version or patch version and update documentation for the corresponding major version. It should be possible to skip a release/version bump if the build output is equivalent (e.g. just comments were touched) or if a release is otherwise undesirable.

An alternative would be to only release when a new tag is expressly created.

Automatically generate changelogs

Changelogs should be generated automatically based on commit messages, but ideally they would also support a handwritten summary of changes.

Update documentation

Documentation should be built and pushed to the major-version documentation directory. Until 2.x this can be ignored, as 0.x documentation merges to 1.0 documentation rather than living on.

Tools

semantic-release is the most popular tool, but the philosophy behind it may be incongruous with the goals.

Resources

Decision

semantic-release because it is the most popular solution by a wide margin, it satisfies all stated goals, and its opinionated philosophy of making versioning unromantic and unsentimental is compelling.

Prior to 1.0.0

The package will progress through pre-alpha, alpha, and beta