You're ready to release a new version of Nickel - congrats!
This document explains how to do so step by step while keeping the various crates and dependent repositories (such as the website) in a consistent state.
-
Branch out from
master
to a dedicated branchX.Y.Z-release
:git checkout -b X.Y.Z-release
-
Bump the version number of all the crates of the workspace to
X.Y.Z
:-
Bump the
version
attribute toX.Y.Z
in files./Cargo.toml
,./utilities/Cargo.toml
,lsp/nls/Cargo.toml
and./nickel-wasm-repl/Cargo.toml
. -
Bump the version of the interdependencies of the above crates. For example,
nickel-lang
has the following line in./Cargo.toml
under[dev-dependencies]
:nickel-lang-utilities = {path = "utilities", version = "0.3.0"}
You have to bump the
version
number toX.Y.Z
of such dependencies onnickel-lang
,nickel-lang-utilities
, or any other crate of the workspace as well.
Commit and push your changes.
-
-
Make sure that everything builds: run
nix flake check
at the root of the repository. -
Add the changelog since the last release in RELEASES.md. GitHub is able to automatically generate release notes: refer to this guide. While the output needs to be reworked, it's a useful starting point. Commit and push your changes.
-
Set the
stable
branch to point to your newX.Y.Z-release
. Because thestable
branch usually contains specific fixes, or cherry-picked commits, we'll have to force push. We advise to first save the previous state in a local branch:git checkout stable git branch stable-local-save
If anything goes wrong, you can reset
stable
to its previous state:git checkout stable git reset --hard stable-local-save git push --force-with-lease
Update the
stable
branch:git checkout stable git reset --hard X.Y.Z-release` git push --force-with-lease
-
Remove references to
nickel-lang-utilities
from the[dev-dependencies]
sections of the crates to be published:./Cargo.toml
fornickel-lang
and./lsp/nls/Cargo.toml
fornickel-lang-lsp
(work-around for cargo:#4242.Commit those changes temporarily to please cargo, but they will be dropped later. Do not push.
-
Check that
cargo publish --dry-run
succeeds. For this to work, you will need to be signed in tocrates.io
with a GitHub account that is part of the Nickel Core team, and have acrates.io
API key saved locally on your machine (normally viacargo login
). For help with this, contact the Nickel maintainers. -
Release on crates.io:
cargo publish
-
Ditch the potential changes made to the cargo manifests at step 1. by dropping the corresponding commit.
-
Build the docker image and copy the output somewhere:
nix build .#dockerImage cp ./result nickel-X.Y.Z-docker-image.tar.gz
-
Do the release on GitHub, and include the docker image built in 1. Please look at previous releases for the naming convention of git tags.
-
Checkout the nickel-lang repository.
-
Branch out from
master
and update the Nickel input:git checkout -b release/X.Y.Z nix flake lock --update-input nickel git add flake.lock git commit -m "Update to Nickel vX.Y.Z" git push -u origin @
Open a pull request on the nickel-lang repository. Once the CI is green and the PR is merged, nickel-lang.org will be automatically redeployed with the new version of Nickel used for the playground and the documentation.
- Cherry-pick the following commits into separate PRs to
master
:- Bumping the version numbers done in Preparation 2.
- Updating release notes done in Preparation 5.
- Fixes that you made locally for
nix flake check
,cargo doc
or any other command.
- Profit!