4.7 KiB
Releasing
Guidance for release managers and maintainers. Some of this might move elsewhere later.
Terminology
- “main” / “main branch” =
masterbranch in the main hledger repo (might get renamed in future) - “release” / “release branch” = a release branch in the main hledger
repo (eg
1.22-branch)
Commits
When committing/reviewing:
Follow our commit
conventions: - in the summary, use a
feat:/imp:/fix: prefix (required
for user-visible changes), and/or topic prefixes
(bal:/areg:/test:/doc:/lib:/…)
- add a leading ; to skip wasteful CI builds - add a
! to indicate breaking/incompatible changes - mention any
relevant #issue numbers, usually parenthesised at the end - write the
summary and at least the first part of the body, if any, as clear change
documentation for the intended audience
(users/installers/packagers/developers)
When committing/pushing/merging: - run
tools/commitlint before push, to check recent commits - or,
run it automatically before each commit
(make installcommithook to configure your local repo) - it
also runs in CI on github for pull requests, etc.
Changelogs
Always maintain changelogs in main branch (not in release branches).
At start of release cycle: - add the next release heading, with date “unreleased”, above last release heading:
```
# LATESTHASH
...CHANGES...
# NEXTVER unreleased <- ADD
# LASTVER YYYY-MM-DD
```
Frequently, especially after merging changes, and before cherry picking into release branch:
- dry run:
./Shake changelogs -n - add new changes:
./Shake changelogs - edit
- drop things
- move things
- Add headings: Features, Improved, Fixes
- rewrite things
- format (#ISSUE, AUTHOR) on its own line
- commit:
./Shake changelogs -c
After cherry-picking changes to a release branch: - move the corresponding changelog items under the pending release heading.
At release:
- do final update/edits; check organisation, wording, formatting, issue links
- replace “unreleased” with the date in the pending release heading
- copy the new release sections from main changelogs to release branch changelogs
Pre release
create release branch when needed:
git branch MAJORVER-branch BRANCHPOINT
Sometimes, we make the major release tag (1.22) on master, and create a release branch (1.22-branch) when there’s a followup minor release:
git branch 1.22-branch 1.22update changelogs in main
review changes so far, estimate which packages will be released
cherry pick changes to release
- cherry pick release-worthy commits
- from: magit,
l o X.Y..master,M-x magit-toggle-buffer-lock,C-x D(M-x toggle-window-dedicated) - to: magit,
l o master..X.Y,M-x magit-toggle-buffer-lock,C-x D - ignore commits already seen in previous cherry picking sessions
- ignore changelog commits / other boring commits (“dev: doc: update changelogs”)
- from: magit,
- cherry pick release-worthy commits
in changelogs in main, move corresponding change items under pending release heading
Release
finalise changelogs in main, copy to changelogs in release branch
./Shake.hsto updateShakeand review release tasksm./Shake setversion VER [-c](first without-cto review, then with-cto commit). Alsotouch hledger/Hledger/Cli/Version.hs?./Shake cmdhelp [-c]./Shake mandates./Shake manuals [-c]make tagmake hackageuploadpush tags: magit
P tpush to CI branches to test & generate binaries
- magit
P -f e origin/ci-windows - …
origin/ci-mac - …
origin/ci-linux-static - …
origin/ci-linux-static-arm32
- magit
in site: update
download.mdin site: update
relnotes.md- copy template
- add new changelog sections, omitting hledger-lib
- add summary
- add contributors
update
doc/ANNOUNCE- summary/contributors from release notes
create github release
- tag VER, title VER, body similar to previous release
- at https://ci.hledger.org download each CI branch artifact when ready, to ~/Downloads/hledger-VER/
- drag artifacts into github draft release
- publish release
announce
- send ANNOUNCE to hledger@googlegroups.com, haskell-cafe@googlegroups.com
- link release notes/summary in #hledger:matrix.org, #hledger:libera.chat
- tweet at https://twitter.com/simonkwmichael
- toot at https://fosstodon.org/web/accounts/106304084994827771
Post release
merge/check/update download page changes (docker, homebrew, nix, linux distros..)
support
handle issues
update procedures, tools, docs