Releasing a new Bats version

page md_tests_scripts_bats_docs_releasing

These notes reflect the current process. There’s a lot more we could do, in terms of automation and expanding the number of platforms to which we formally release (see #103).

Update docs/CHANGELOG.md

Create a new entry at the top of docs/CHANGELOG.md that enumerates the significant updates to the new version.

Bumping the version number

Bump the version numbers in the following files:

  • contrib/rpm/bats.spec

  • libexec/bats-core/bats

  • package.json

Commit these changes (including the docs/CHANGELOG.md changes) in a commit with the message Bats <VERSION>, where <VERSION> is the new version number.

Create a new signed, annotated tag with:

$ git tag -a -s <VERSION>

Include the docs/CHANGELOG.md notes corresponding to the new version as the tag annotation, except the first line should be: Bats <VERSION> - YYYY-MM-DD and any Markdown headings should become plain text, e.g.:

### Added

should become:

Added:

Create a GitHub release

Push the new version commit and tag to GitHub via the following:

$ git push --follow-tags

Then visit https://github.com/bats-core/bats-core/releases, and:

  • Click Draft a new release.

  • Select the new version tag.

  • Name the release: Bats <VERSION>.

  • Paste the same notes from the version tag annotation as the description, except change the first line to read: Released: YYYY-MM-DD.

  • Click Publish release.

For more on git push --follow-tags, see:

NPM

npm publish. Pretty easy!

For the paranoid, use npm pack and install the resulting tarball locally with npm install before publishing.

Homebrew

The basic instructions are in the Submit a new version of an existing formula section of the Homebrew docs.

An example using v1.1.0 (notice that this uses the sha256 sum of the tarball):

$ curl -LOv https://github.com/bats-core/bats-core/archive/v1.1.0.tar.gz
$ openssl sha256 v1.1.0.tar.gz
SHA256(v1.1.0.tar.gz)=855d8b8bed466bc505e61123d12885500ef6fcdb317ace1b668087364717ea82

# Add the --dry-run flag to see the individual steps without executing.
$ brew bump-formula-pr \
  --url=https://github.com/bats-core/bats-core/archive/v1.1.0.tar.gz \
  --sha256=855d8b8bed466bc505e61123d12885500ef6fcdb317ace1b668087364717ea82
This resulted in https://github.com/Homebrew/homebrew-core/pull/29864, which was automatically merged once the build passed.

Alpine Linux

An example using v1.1.0 (notice that this uses the sha512 sum of the Zip file):

$ curl -LOv https://github.com/bats-core/bats-core/archive/v1.1.0.zip
$ openssl sha512 v1.1.0.zip
SHA512(v1.1.0.zip)=accd83cfec0025a2be40982b3f9a314c2bbf72f5c85daffa9e9419611904a8d34e376919a5d53e378382e0f3794d2bd781046d810225e2a77812474e427bed9e

After cloning alpinelinux/aports, I used the above information to create: https://github.com/alpinelinux/aports/pull/4696

Note: Currently users must enable the edge branch of the community repo by adding/uncommenting the corresponding entry in /etc/apk/repositories.

Announce

It’s worth making a brief announcement like the v1.1.0 announcement via Gitter:

v1.1.0 is now available via Homebrew and npm:
https://github.com/bats-core/bats-core/releases/tag/v1.1.0

It'll eventually be available in Alpine via the edge branch of the community
repo once alpinelinux/aports#4696 gets merged. (Check /etc/apk/repositories to
ensure this repo is enabled.)