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
bin/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).
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: - in the main branch changelogs, move the corresponding changelog items under a pending release heading, creating that when necessary: ``` # LATESTHASH
...CHANGES ONLY IN MASTER...
# NEXTVER unreleased
...CHANGES CHERRYPICKED INTO RELEASE BRANCH...
# LASTVER YYYY-MM-DD
```
At release:
- do final update/edits; check organisation, wording, formatting, issue links
- replace “unreleased” with the release date
- copy the new 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,
- update changelogs in main (move corresponding change items under pending release heading)
- cherry pick release-worthy commits
Release
finalise changelogs in main, copy to changelogs in release branch
./Shake.hsto updateShakeand review release tasks./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