just playing with tangled
1# How to do a release
2
3## Update changelog and Cargo versions
4
5Send a PR similar to https://github.com/jj-vcs/jj/pull/5215. Feel free to
6copy-edit the changelog in order to:
7
8* Populate "Release highlights" if relevant
9* Put more important items first so the reader doesn't miss them
10* Make items consistent when it comes to language and formatting
11
12Producing the list of contributors is a bit annoying. The current suggestion is
13to run something like this:
14
15```shell
16root=v0.25.0
17for i in $(seq 5); do
18 gh api "/repos/jj-vcs/jj/compare/$root...main?per_page=100;page=$i"
19done | jq -r '.commits[] | "* " + .commit.author.name + " (@" + .author.login + ")"' | sort -fu
20```
21
22https://docs.github.com/en/rest/commits/commits?apiVersion=2022-11-28#compare-two-commits
23
24Alternatively, the list can be produced locally:
25
26```shell
27jj log --no-graph -r 'heads(tags())..main' -T '"* " ++ author ++ "\n"' | sort -fu
28```
29
30Then try to find the right GitHub username for each person and copy their name
31and username from the GitHub page for the person
32(e.g. https://github.com/martinvonz).
33
34Get the PR through review and get it merged as usual.
35
36## Create a tag and a GitHub release
37
381. Go to https://github.com/jj-vcs/jj/releases and click "Draft a new release"
392. Click "Choose a tag" and enter "v0.\<number\>.0" (e.g. "v0.26.0") to create a
40 new tag
413. Click "Target", then "Recent commits", and select the commit from your merged
42 PR
434. Use the name (e.g. "v0.26.0") as "Release title". Paste the changelog entries
44 into the message body
455. Check "Create a discussion for this release"
466. Click "Publish release"
47
48## Publish the crates to crates.io
49
50Go to a terminal and create a new clone of the repo [^1]:
51
52```shell
53cd $(mktemp -d)
54jj git clone https://github.com/jj-vcs/jj
55cd jj
56jj new v0.<number>.0
57```
58
59Publish each crate:
60
61```shell
62(cd lib/proc-macros && cargo publish)
63(cd lib && cargo publish)
64(cd cli && cargo publish)
65```
66
67
68[^1]: We recommend publishing from a new clone because `cargo publish` will
69 archive ignored files if they match the patterns in `[include]`
70 ([example](https://github.com/jj-vcs/jj/blob/b95628c398c6c3d11f41bdf53d0aef11f92ee96d/lib/Cargo.toml#L15-L22)),
71 so it's a security risk to run it an existing clone where you may have
72 left sensitive content in an ignored file.