Releases
Users > Releases describes how our automatic releases are done. There is generally no maintenance activity we need to take for the weekly releases.
However, there are two kinds of releases we infrequently go through that each require manual effort.
Major Releases
Per Users > Releases > Major Releases, we infrequently release major versions with accumulated breaking changes.
1. Pre-Release Preparation
- Create a milestone by the name of the release [example: Milestone 6.0.0].
- If an issue for changes to recommended rule configs doesn't yet exist, create one [example: Changes to the
recommended
sets for 5.0.0]. - Add any breaking changes intended for the release to that milestone.
- Create two new branches off
main
in the project repository (not a personal fork):v${major}
v${major}-canary-auto-release
- Raise a PR from
v${major}-canary-auto-release
tomain
modifying theci.yml
workflow [example: chore: add auto-canary release for v6]:- Under
pushes:
at the beginning of the file, add an- v${major}
list item. - Add a
publish_canary_version_v${major}
step the same aspublish_canary_version
except:- Add the condition:
if: github.ref == 'refs/heads/v${major}'
. - Its publish command should be
npx lerna publish premajor --loglevel=verbose --canary --exact --force-publish --yes --dist-tag rc-v${major}
.
- Add the condition:
- Merge this into
main
once reviewed and rebase thev${major}
branch.
- Under
2. Merging Breaking Changes
- Send a PR from
v${major}
tomain
[example: v6.0.0]. - Change all breaking change PRs to target the
v${major}
branch.- To signify these changes as breaking, the first line of the PR description must read as
BREAKING CHANGE:
, and second line should briefly summarize the changes. - It is important to note that when merged the commit message must also include
BREAKING CHANGE:
as the first line in order for lerna to recognize it as a breaking change in the release notes. If you miss this it just means more manual work when writing the release documentation.
- To signify these changes as breaking, the first line of the PR description must read as
- Wait until all required PRs have been merged
- Let the release wait for at least 1 week to allow time for early adopters to help test it and discuss the changes.
- Promote it on the
@tseslint
twitter to get some additional attention.
- Promote it on the
- Once discussions have settled, rebase merge the PR on top of
main
.
note
Non-breaking changes can be merged to main
or the major branch.
They don't need any special treatment.
3. Releasing the Version
- Discuss with the maintainers to be ready for an out-of-band release. Doing this manually helps ensure someone is on-hand to action any issues that might arise from the major release.
- Prepare the release notes. Lerna will automatically generate the release notes on GitHub, however this will be disorganized and unhelpful for users. We need to reorganize the release notes so that breaking changes are placed at the top to make them most visible. If any migrations are required, we must list the steps to make it easy for users.
- Finally, tweet the release on the
@tseslint
twitter with a link to the GitHub release. Make sure you include additional information about the highlights of the release!
Out-of-Band Releases
Per Users > Releases > Out-of-Band Releases, we may manually trigger a new release for a rare emergency such as a critical regression. If that happens:
- Mention in any relevant issue(s) that you intend to release an out-of-band release
- Post in a private maintenance Discord channel that you're working on it
- Send a pull request resolving the issue(s)
- Waiting up to a day (as reasonable) for approval before merging the PR
- Trigger the private release workflow to cause a new release
- Post back in those same issue(s) with a link to the newly released version(s)