How to do a release¶
Update changelog and Cargo versions¶
Send a PR similar to https://github.com/jj-vcs/jj/pull/5215. Feel free to copy-edit the changelog in order to:
- Populate "Release highlights" if relevant
- Put more important items first so the reader doesn't miss them
- Make items consistent when it comes to language and formatting
Producing the list of contributors is a bit annoying. The current suggestion is to run something like this:
root=v0.25.0
for i in $(seq 5); do
gh api "/repos/jj-vcs/jj/compare/$root...main?per_page=100;page=$i"
done | jq -r '.commits[] | "* " + .commit.author.name + " (@" + .author.login + ")"' | sort -fu
https://docs.github.com/en/rest/commits/commits?apiVersion=2022-11-28#compare-two-commits
Alternatively, the list can be produced locally:
jj log --no-graph -r 'heads(tags())..main' -T '"* " ++ author ++ "\n"' | sort -fu
Then try to find the right GitHub username for each person and copy their name and username from the GitHub page for the person (e.g. https://github.com/martinvonz).
Get the PR through review and get it merged as usual.
Create a tag and a GitHub release¶
- Go to https://github.com/jj-vcs/jj/releases and click "Draft a new release"
- Click "Choose a tag" and enter "v0.\<number>.0" (e.g. "v0.26.0") to create a new tag
- Click "Target", then "Recent commits", and select the commit from your merged PR
- Use the name (e.g. "v0.26.0") as "Release title". Paste the changelog entries into the message body
- Check "Create a discussion for this release"
- Click "Publish release"
Publish the crates to crates.io¶
Go to a terminal and create a new clone of the repo 1:
cd $(mktemp -d)
jj git clone https://github.com/jj-vcs/jj
cd jj
jj new v0.<number>.0
Publish each crate:
(cd lib/proc-macros && cargo publish)
(cd lib && cargo publish)
(cd cli && cargo publish)