diff --git a/doc/RELEASING.md b/doc/RELEASING.md index 7d7d8bd0b..96fa0dec4 100644 --- a/doc/RELEASING.md +++ b/doc/RELEASING.md @@ -17,22 +17,22 @@ Notes for hledger release managers and maintainers. - [ ] Make releasing easy ## Release types -| | Major release
A.B | Bugfix release
A.B.C | Fixup release
A.B.C.D | Preview release
A.B.99.D | -|-----------------------|--------------------------------|------------------------------|----------------------------------------------|------------------------------------------| -| **Contains:** | New features, breaking changes | Only bug fixes | Trivial packaging fixes, no software changes | Early snapshot of the next major release | -| **When:** | Third month of quarter: March, June, September, December | When needed | Never | First & second months of quarter | -| | | | | | -| **Deliverables:** | | | | | -| Changelogs | ✓ | ✓ | ✓ | ✓ | -| Github release | ✓ | ✓ | ✓ | ✓ | -| Binaries | ✓ | ✓ | ✓ | ✓ | -| Hackage release | ✓ | ✓ | ✓ | | -| Install page | ✓ | ✓ | ✓ | | -| hledger-install | ✓ | ✓ | ✓ | | -| [Regression bounty] | ✓ | ✓ | ✓ | | -| Release notes | ✓ | ✓ | | | -| Web manuals | ✓ | | | | -| Announcements | ✓ | | | | +| | Major release
A.B | Bugfix release
A.B.C | Fixup release
A.B.C.D | Preview release
A.B.99.D | +|---------------------|----------------------------------------------------------|------------------------------|----------------------------------------------|------------------------------------------| +| **Contains:** | New features, breaking changes | Only bug fixes | Trivial packaging fixes, no software changes | Early snapshot of the next major release | +| **When:** | Third month of quarter: March, June, September, December | When needed | Never | First & second months of quarter | +| | | | | | +| **Deliverables:** | | | | | +| Changelogs | ✓ | ✓ | ✓ | ✓ | +| Github release | ✓ | ✓ | ✓ | ✓ | +| Binaries | ✓ | ✓ | ✓ | ✓ | +| Hackage release | ✓ | ✓ | ✓ | | +| Install page | ✓ | ✓ | ✓ | | +| hledger-install | ✓ | ✓ | ✓ | | +| [Regression bounty] | ✓ | ✓ | ✓ | | +| Release notes | ✓ | ✓ | | | +| Web manuals | ✓ | | | | +| Announcements | ✓ | | | | [Regression bounty]: http://hledger.org/regressionbounty @@ -103,8 +103,7 @@ These have complex interdependencies and sequencing constraints. Chunk, separate ### Map Here's a map of the value flows/artifacts/dependencies in a hledger release (arrows mean "depends on"). -To do a release, start at the bottom of the diagram and work up -(and work down through the procedures described below). +To do a release, start at the bottom of the diagram and work up / start at the top of the procedures described below and work down. [![release diagram](RELEASING.png)](RELEASING.png) @@ -121,27 +120,22 @@ To do a release, start at the bottom of the diagram and work up - Do releases from a release branch, not from master. - All platform binaries should be built from the same commit, the one with the release tags. - Binaries' --version shows their git hash and build date; these should match the release tag and release date. -### Procedures to achieve... - ### STATE 1 - STABLE #### Check dev readiness -- open issues (bugs), https://bugs.hledger.org -- open PRs, https://prs.hledger.org -- project boards, https://github.com/simonmichael/hledger/projects?query=is%3Aopen -- https://hledger.org/ROADMAP.html, https://hledger.org/BACKLOG.html -- personal notes & backlogs +- Any blocking open issues ? https://bugs.hledger.org +- Any blocking open PRs ? https://prs.hledger.org +- Any blocking tasks on project boards ? https://github.com/simonmichael/hledger/projects?query=is%3Aopen +- Any blocking items on https://hledger.org/ROADMAP.html, https://hledger.org/BACKLOG.html ? +- Any blocking items in personal notes & backlogs ? ### STATE 2 - DOCUMENTED AND TESTED -Shake it. - #### Up-to-date tools -- ./Shake is up to date - - Shake.hs uses same resolver/extra deps as stack.yaml, hledger-install.sh - - Shake binary is up to date (`./Shake.hs`) - - commit any changes (message: "tools: shake") +- Shake.hs uses same resolver, extra deps as stack.yaml, hledger-install.sh +- Shake binary is up to date (`./Shake.hs`) +- commit any changes (message: "tools: shake") #### Up-to-date cabal files - `./Shake cabalfiles` @@ -163,48 +157,42 @@ In main repo, master branch: - `./Shake changelogs -c` See [CHANGELOGS](CHANGELOGS.md). -#### Passing tests and CI -- local tests, mimicking CI - - `make test` - - `make doctest` - - `make haddocktest` -- single-platform CI tests in github main repo master - (if needed; not easy for a release branch, multi-platform CI tests will come later) - - push to a PR, wait for green - - or push to `simon` branch, wait for green at http://ci.hledger.org - - or `tools/push` (pushes to `simon`, then to `master`) +#### Local tests passing +- `make test` +- `make doctest` +- `make haddocktest` +#### Regular CI tests passing: +- push to a PR, wait for green +- or push to `simon` branch, wait for green at http://ci.hledger.org +- or `tools/push` (pushes to `simon`, then to `master`) ### STATE 3 - RELEASE DOCUMENTED #### Release branch and version number -- Bake it: `./bake prep NEW +Create release branch if needed, update all package versions, help, manuals, changelogs (preferred): +- `./bake prep NEW` - NEW is `MA.JOR[.MINOR|.99.PREVIEWNUM]` (eg 1.24.99.1 for 1.25 preview 1) - - creates release branch if needed - - sets version numbers (Shake setversion) - - partly finalises changelogs (Shake changelogs) - - for troubleshooting can use bash -x PAUSE=1 ECHO=1 ... - - "avoid possible bug with being in master instead" (?) - - "seems to go wrong without PAUSE" (?) + - for troubleshooting: bash -x PAUSE=1 ECHO=1 bake ... + + -### Select commits for release +Or, bump version of a subset of packages in an existing release branch (not ideal): +- `git switch MA.JOR-branch` (magit: `b b MA.JOR-branch`) +- `./Shake setversion NEW PKGS -c` + +#### Select commits for release - cherry pick desirable commits from master (if needed) - - eg fancy workflow: - - list changes in three side-by-side magit windows - - 1. NEW IN MASTER: `l o MAJORVER-branch..master`, `M-x magit-toggle-buffer-lock`, `M-x toggle-window-dedicated` (`C-c D`) - - 2. HEAD: regular magit status view - - 3. RELEASE BRANCH: `l o MAJORVER-branch`, `M-x magit-toggle-buffer-lock`, `M-x toggle-window-dedicated` - - in master window, working from bottom upward, cherry-pick all non-conflicting changes - - skip changes already in release branch - - skip changelog, command help, and manuals updates -- do release branch testing ? - - `stack build --test` - - `make functest` + - eg fancy workflow: three magit windows: + - NEW IN MASTER: `l o MAJOR-branch..master`, `M-x magit-toggle-buffer-lock`, `M-x toggle-window-dedicated` (`C-c D`) + - HEAD: regular magit status view + - RELEASE BRANCH: `l o MAJOR-branch`, `M-x magit-toggle-buffer-lock`, `M-x toggle-window-dedicated` + - in master window, working from bottom upward, cherry-pick all non-conflicting changes, skipping already-picked/help/manuals/changelog changes #### Release changelogs - see also [CHANGELOGS](CHANGELOGS.md) - open all changelogs and release notes in emacs - maybe run ./Shake changelogs again -- manually clean up changelogs +- manually clean up/finalise changelogs - manually add release version/date headings (or fix `bake prep`) #### Release notes @@ -217,26 +205,24 @@ In site repo, update `src/release-notes.md`: - clean up - commit: `relnotes: NEW` +#### Release branch tests passing +- `make test` +- `stack exec -- hledger --version`, check version, hash, release date, no '+' +- `stack exec -- hledger help | tail`, check version, month matches release + ### STATE 4 - RELEASE READY -#### Release build tests - - touch/change Version.hs to encourage recompilation (?) - - `stack build` - - `stack exec -- hledger --version`, check version, hash, release date, no '+' - - `stack exec -- hledger help | tail`, check version, month matches release +#### Multi-platform CI tests passing -#### Platform CI tests -Multi-platform CI tests: - `./bake bin` (push to `github/binaries`) - wait for green on all platforms, resolve failures #### Release binaries -Once all platform CI tests are green: -- in local downloads dir, delete any zip files from last release -- in each successful platform job: right click, Download linked file +With all platform CI tests green on same commit: +- save native local binaries from that same commit: `make install-as-NEW` +- clear out any old zip files/binaries from local Downloads dir +- in each successful platform job: right click the artifact, Download linked file - unpack the github binaries for the local platform -- build native binaries for the local platform (on that same commit): - - `make install-as-VERSION` #### hledger-install script (major/bugfix/fixup release) @@ -252,10 +238,10 @@ Once all platform CI tests are green: ### STATE 5 - RELEASED #### Pre-release pause -- stop, go afk, take a break +- stop, afk, take a break - review time, energy, availability, decide go/no-go -#### Pre-release tests +#### Pre-release tests passing Sanity checks: - appropriate dates/versions in changelogs and release notes (if late in day, watch for time zone issues) - hledger-install script @@ -273,7 +259,6 @@ Sanity checks: #### Release tag - ensure new version has been set first with Shake or bake - ensure no new commits have been made since push to `github/binaries` -- don't run this in an attempt to make editor tags files - in the release branch (?): `make tag` #### Github release