To create a new release for smesh, perform the following steps:
- Make sure that all PRs and changes that you want to go into the release are merged to
main
and that the latest commit onmain
has passed all CI tests. - Determine the currently released version of Smesh.jl, e.g., on the
release page. For this manual,
we will assume that the latest release was
v0.2.3
. - Decide on the next version number. We follow semantic versioning,
thus each version is of the form
vX.Y.Z
whereX
is the major version,Y
the minor version, andZ
the patch version. In this manual, we assume that the major version is always0
, thus the decision process on the new version is as follows:- If the new release contains breaking changes (i.e., user code might not work as
before without modifications), increase the minor version by one and set the
patch version to zero. In our example, the new version should thus be
v0.3.0
. - If the new release only contains minor modifications and/or bug fixes, the minor
version is kept as-is and the patch version is increased by one. In our example, the
new version should thus be
v0.2.4
.
- If the new release contains breaking changes (i.e., user code might not work as
before without modifications), increase the minor version by one and set the
patch version to zero. In our example, the new version should thus be
- Edit the string in the
VERSION
and set it to the new version. Push/merge this change tomain
. - Go to GitHub and create a new release, either by going to the
release page and clicking on "Draft
a new release" or by directly following
this link.
- Click on "Choose a tag", enter the new version (e.g.,
v0.2.4
, including thev
prefix), and select "Create a new tag". - Click on "Generate release notes".
- Click on "Publish release".
- Click on "Choose a tag", enter the new version (e.g.,
- The new release is immediately usable and visible on the release page \o/
- To make sure people do not mistake the latest state of
main
as the latest release, we set the version in theVERSION
file to a development version. The development version should be the latest released version, with the patch version incremented by one, and the-dev
suffix added. For example, if you just releasedv0.3.0
, the new development version should bev0.3.1-dev
. If you just releasedv0.2.4
, the new development version should bev0.2.5-dev
.
Among other uses, smesh is the backend for the Julia package Smesh.jl. For this purpose, it is automatically built and distributed as a Julia JLL package. Therefore, after each release of smesh, you should also update the corresponding build recipe in the Yggdrasil repository:
- If not yet done, create a fork of the Yggdrasil repository, which contains all build recipes for registered JLL packages.
- Create a new branch in your Yggdrasil fork and modify the
build_tarballs.jl
file for smesh:- Change the existing version number in
build_tarballs.jl
to the version you just released (e.g., here the existing smesh version isv0.1.0
) - Get the commit hash of the current smesh release, e.g., by going to the latest release and then clicking on the short commit hash, then copying it from the browser URL.
- Change the existing commit hash in
build_tarballs.jl
to the commit hash you just obtained (e.g., here the hash wasdb69bf884d10c52577aee6795202136cfcf77178
)
- Change the existing version number in
- Commit and push the changes to your fork.
- Create a pull request from your fork's branch to Yggdrasil's
master
branch and name it appropriately (e.g.,[smesh] update to version v0.2.4
) - Wait for all tests in Yggdrasil to pass. If they don't, find the error and fix it.
- Wait for the Yggdrasil PR to be merged to
master
. After an appropriate waiting period (1-2 business days), you can ask nicely in the#binarybuilder
on the Julia Slack if someone could merge your PR. - Once the Yggdrasil CI has built the new artifacts from its updated
master
branch, it will upload them to the smesh_jll.jl package repository and create a PR to Julia's general registry with the new version. Once all checks pass there and a grace period of 15 minutes has passed, the new release will be available.