This document describes how to make a release using GitHub Actions. Not all projects use this process. If you were linked to this file from a project without additional instruction it is safe to assume it does.
There are two parts to making a release:
If you're making a major release, there are special considerations, and you should make sure to read that section.
Before making a release, make sure you have these tools installed:
- Git - version > 2.25
- polyglot-release and its dependencies
- changelog
Anyone with permission to push to the main branch can prepare a release.
- Add new information to
CHANGELOG.md. Ideally theCHANGELOG.mdshould be up-to-date, but sometimes there will be accidental omissions when merging PRs.- Use
git log --format=format:"* %s (%an)" --reverse <last-version-tag>..HEADto list all commits since the last release. - Add changelog details under the
## [Unreleased]heading;polyglot-releasewill update this heading when it makes the release
- Use
- Update contributors list (if applicable)
- List recent contributors:
git log --format=format:"%an <%ae>" --reverse <last-version-tag>..HEAD | grep -vEi "(renovate|dependabot|Snyk)" | sort| uniq -i - For JavaScript: Update the contributors list in
package.json(keep alphabetical order)
- List recent contributors:
Only people with permission to push to release/* branches can make releases. Typically these permissions are assigned to the release team.
-
Decide what the next version number should be
- Look at
CHANGELOG.mdto see what has changed since the last relesase - Use semver to decide on a version for the next release
- If you are bumping the
MAJORversion ofcucumber-{jvm,js,ruby}, see the Major release section
- Look at
-
From the root of the polyglot project you are trying to release run:
polyglot-release <new version> -
Wait until the
release-*workflows in GitHub Actions have passed -
Rerun individual workflows if they fail
-
Announce the release
- in the
#commitersDiscord channel
- in the
If you are releasing cucumber-{jvm,js,ruby} and bumping the MAJOR version, make a -rc.N release candidate.
The release candidate should be available for at least a month to give users time to validate that there are no unexpected breaking changes.
If you are releasing a library, then you should not create a release candidate - just release the new major version.
Add entries with code examples to UPGRADING.md to help users migrate to the new major version. If the project doesn't have an UPGRADING.md
file yet, use this template:
# Upgrading
This document describes breaking changes and how to upgrade. For a complete list of changes including minor and patch releases, please refer to the [changelog](CHANGELOG.md).
## MAJOR.0.0
Previously `foo` could be `bar`:
```js
const foo = 'bar'
```
In this release you have to make `bar` be `foo`
```js
const bar = 'foo'
```