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.md
should 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>..HEAD
to list all commits since the last release. - Add changelog details under the
## [Unreleased]
heading;polyglot-release
will 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.md
to see what has changed since the last relesase - Use semver to decide on a version for the next release
- If you are bumping the
MAJOR
version 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
#commiters
Discord 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'
```