Generally, we bump and publish the versions of all crates in this
mono-repository in lockstep.
It does not matter if it's a PATCH
, MINOR
, MAJOR
release.
Reasons for doing it this way:
- Keeps our
RELEASES.md
simple and easy to grasp.
We can still bundle all changes there together and don't have to go to a more fine-grained crate level. - Easier to follow reported issues.
All crates are closely tied together anyway and if someone reports an issue with e.g.3.1
we know what they mean. - Easier to keep the workshop/documentation/playground/user interfaces in sync.
- Easier for users to follow changes.
Those will all be listed in one section of the changelog, bundled together, released at the same time. - Third party tooling like dependabot can easily extract the changelog.
Examples (so anything in the examples/
folder) are a bit of a special case in our
release pipeline since they are considered as ink! internals and not part of the library
per-say.
What this means is that any changes to the examples (breaking or not) should only be
considered a PATCH
level change. Additionally, they should not be published to
crates.io.
- Create a new feature branch of
master
. - Bump the version in all TOML files to the new version.
find . -type f -name *.toml -exec sed -i -e 's/$OLD_VERSION/$NEW_VERSION/g' {} \;
- Make sure you've moved the changes in the
RELEASES.md
from[Unreleased]
into a new section for the release. - Check that all notable PRs since the last release are now in the new release section,
in case the
[Unreleased]
section was incomplete.
Notable changes are changes that affect users in some way. This means that something like a change to our CI pipeline is likely not notable and should not be included. - Make sure you've merged the latest
master
into your branch. - Open a release PR
- Wait for approvals from Core team members
- Ensure the entire CI pipeline is green
- Execute
cargo unleash em-dragons --dry-run
in the ink! repository. - If successful, execute
cargo unleash em-dragons
.
In some versions ofcargo-unleash
there is a bug during publishing. If this is the case you need to do it manually, by executingcargo publish --allow-dirty
for the individual crates. The--allow-dirty
is necessary becausecargo-unleash
will have removed all[dev-dependencies]
. - Merge the PR into
master
if everything went fine. We do this after publishing since the publishing step can fail and we want to ensure that what gets merged intomaster
is what actually got published. - Replace
vX.X.X
with the new version in the following command and then execute it:git checkout master && git pull && git tag vX.X.X && git push origin vX.X.X
- Create a GitHub release for this tag. In the tag overview
you'll see your new tag appear. Click the
…
on the right of the tag and thenCreate release
. - Paste the release notes that appear in the
RELEASES.md
there. The title of the release should bevX.X.X
. - Post an announcement to those Element channels: