;doc: RELEASING update
This commit is contained in:
parent
d8cce23b3f
commit
39ed693d2b
160
RELEASING.md
160
RELEASING.md
@ -1,17 +1,19 @@
|
|||||||
# Releasing
|
# Releasing
|
||||||
|
|
||||||
<div class=pagetoc>
|
<div class=pagetoc>
|
||||||
<!-- toc -->
|
<!-- toc -->
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
Notes for hledger release managers and maintainers.
|
Notes for hledger release managers and maintainers.
|
||||||
|
|
||||||
## Current goals
|
## Goals
|
||||||
### 2022Q1
|
|
||||||
|
### 2022
|
||||||
- Update/consolidate release process docs
|
- Update/consolidate release process docs
|
||||||
- Establish routine monthly release cadence
|
- Establish routine monthly release cadence
|
||||||
- Make releasing easy
|
- Make releasing easy
|
||||||
|
|
||||||
## Release types
|
## Release types
|
||||||
|
|
||||||
| | Major release<br>A.B | Bugfix release<br>A.B.C | Fixup release<br>A.B.C.D | Preview release<br>A.B.99.D |
|
| | Major release<br>A.B | Bugfix release<br>A.B.C | Fixup release<br>A.B.C.D | Preview release<br>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 |
|
| **Contains:** | New features, breaking changes | Only bug fixes | Trivial packaging fixes, no software changes | Early snapshot of the next major release |
|
||||||
@ -77,16 +79,39 @@ Here are some definitions, useful eg when executing or automating release proced
|
|||||||
| *release branch* | Branches named `MA.JOR-branch` in the hledger repo, eg `1.25-branch`. Releases and release previews are always made from a release branch. |
|
| *release branch* | Branches named `MA.JOR-branch` in the hledger repo, eg `1.25-branch`. Releases and release previews are always made from a release branch. |
|
||||||
|
|
||||||
## Procedures
|
## Procedures
|
||||||
### Preview release
|
|
||||||
- check prerequisites
|
|
||||||
- prepare release branch (`tools/release prep A.B.99.D`)
|
|
||||||
- make binaries (`tools/release bin`, get all platforms built on the same commit, download binaries)
|
|
||||||
- tag the release (`make tag`) (major release: make announcement first)
|
|
||||||
- push to github (`git push origin MA.JOR-branch && git push --tags` or magit `P p`, `P t`)
|
|
||||||
- make github preview release
|
|
||||||
- update master after release
|
|
||||||
|
|
||||||
#### Check prerequisites
|
### 0. General tips
|
||||||
|
- Release (or practice releasing) often.
|
||||||
|
- Release responsibilities include:
|
||||||
|
- **Software** - selecting changes, packages, release dates; coordinating contributions; ensuring release readiness
|
||||||
|
- **Branch Management** - coordinating main and release branch, local and remote repos, CI branches
|
||||||
|
- **Version Bumping** - choosing and applying new version numbers and related things like tags, github releases, urls, ghc and dep versions, stackage resolvers, everywhere needed
|
||||||
|
- **Docs** - command help, manuals, changelogs, release notes, github release notes, install page, install scripts, announcements, process docs
|
||||||
|
- **Testing** - local testing, CI testing, extra release-specific testing
|
||||||
|
- **Artifacts** - generating binaries, zip files, github releases etc.
|
||||||
|
- **Publishing** - uploading, pushing, making visible, finalising
|
||||||
|
- **Announcing** - various announcement stages and channels
|
||||||
|
- These have complex interdependencies and sequencing constraints. Chunk, separate, routinise, document and automate them as far as possible.
|
||||||
|
- Don't document in too much detail prematurely.
|
||||||
|
- Follow RELEASING.md's procedures when helpful, ignore them when not.
|
||||||
|
- As step 1, save it as RELEASING2.md and make changes there until after release.
|
||||||
|
- Make things a little better each time through: simpler, more reliable, better documented, more automated, easier, faster, cheaper, higher quality.
|
||||||
|
- Update [CHANGELOGS](CHANGELOGS.html) early and often, eg during/after a PR, to spread the work.
|
||||||
|
- Make releases from a release branch, not from master.
|
||||||
|
- Before making binaries:
|
||||||
|
- Try to do all possible pre-release-tag steps. (Binaries will show their source's git hash in --version, and it should match the release tag.)
|
||||||
|
- Ensure the last commit does not begin with a semicolon. (So that the linux-x64-test workflow will generate a binary, in case it is needed.)
|
||||||
|
- Before tagging: make binaries for all platforms, from the same commit.
|
||||||
|
|
||||||
|
### 1. Preview release
|
||||||
|
- [check release readiness](#check-release-readiness)
|
||||||
|
- [prepare release branch](#prepare-release-branch)
|
||||||
|
- [make binaries](#make-binaries)
|
||||||
|
- [tag the release](#tag-the-release)
|
||||||
|
- [push to github](#push-to-github)
|
||||||
|
- [make github release](#make-github-release)
|
||||||
|
|
||||||
|
#### Check release readiness
|
||||||
- master's changelogs are up to date (see [CHANGELOGS](CHANGELOGS.html))
|
- master's changelogs are up to date (see [CHANGELOGS](CHANGELOGS.html))
|
||||||
- master or release branch is ready for release
|
- master or release branch is ready for release
|
||||||
- clean and synced working copy
|
- clean and synced working copy
|
||||||
@ -100,7 +125,8 @@ Here are some definitions, useful eg when executing or automating release proced
|
|||||||
- appropriate timing, release manager availability
|
- appropriate timing, release manager availability
|
||||||
|
|
||||||
#### Prepare release branch
|
#### Prepare release branch
|
||||||
- `tools/release prep OLDMA.JOR.99.PREVIEWNUM` (eg 1.24.99.1 for 1.25 preview 1)
|
- `PAUSE=1 ECHO=1 tools/release prep MA.JOR[.99.PREVIEWNUM]` (eg 1.24.99.1 for 1.25 preview 1)
|
||||||
|
(XXX seems to go wrong without PAUSE`)
|
||||||
- cherry pick changes from master
|
- cherry pick changes from master
|
||||||
- list changes in three side-by-side magit windows
|
- 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`)
|
- 1. NEW IN MASTER: `l o MAJORVER-branch..master`, `M-x magit-toggle-buffer-lock`, `M-x toggle-window-dedicated` (`C-c D`)
|
||||||
@ -113,43 +139,47 @@ Here are some definitions, useful eg when executing or automating release proced
|
|||||||
- `./Shake manuals -c`
|
- `./Shake manuals -c`
|
||||||
- update release changelogs (see [CHANGELOGS](CHANGELOGS.html))
|
- update release changelogs (see [CHANGELOGS](CHANGELOGS.html))
|
||||||
- release branch testing
|
- release branch testing
|
||||||
- `stack test --fast`
|
- `stack build --test`
|
||||||
- `make functest`
|
- `make functest`
|
||||||
- `stack exec -- hledger --version`, check version
|
- `stack exec -- hledger --version`, check version
|
||||||
- `stack exec -- hledger help | tail`, check version & date
|
- `stack exec -- hledger help | tail`, check version & date
|
||||||
|
|
||||||
#### Make github preview release
|
#### Make binaries
|
||||||
|
- `tools/release bin`
|
||||||
|
- get all platforms built on the same commit
|
||||||
|
- download binary artifact zip files
|
||||||
|
|
||||||
- review previous similar release, eg https://github.com/simonmichael/hledger/releases/edit/1.24.99.1
|
#### Tag the release
|
||||||
|
- `make tag`
|
||||||
|
|
||||||
|
#### Push to github
|
||||||
|
- `git push origin MA.JOR-branch && git push --tags`
|
||||||
|
- or in magit: `P p`, `P t`
|
||||||
|
|
||||||
|
#### Make github release
|
||||||
|
- copy text from previous similar release, https://github.com/simonmichael/hledger/releases
|
||||||
- create new release, https://github.com/simonmichael/hledger/releases/new
|
- create new release, https://github.com/simonmichael/hledger/releases/new
|
||||||
- set tag
|
- select release tag (MA.JOR[...])
|
||||||
- set title
|
- set title (MA.JOR[...])
|
||||||
- copy/paste preamble
|
- paste & replace with new release notes
|
||||||
- copy/paste cli/ui/web/lib changelogs
|
|
||||||
- deepen headings 2 steps and add package names
|
|
||||||
- upload CI binaries
|
- upload CI binaries
|
||||||
- save as draft
|
- save as draft
|
||||||
- preview release testing
|
- github release testing (preview)
|
||||||
- publish
|
- publish
|
||||||
|
|
||||||
#### Update master after release
|
### 2. Major release
|
||||||
- switch back to master
|
- [make release notes](#make-release-notes)
|
||||||
- update master changelogs, merging final release changelog entries (see [CHANGELOGS](CHANGELOGS.html))
|
- [make announcement](#make-announcement)
|
||||||
- after a major release: bump master to new dev version (`./Shake setversion -c A.B.99`)
|
- [update hledger-install](#update-hledger-install)
|
||||||
|
- prepare as for [preview release](#1-preview-release)
|
||||||
|
- [update install page](#update-install-page)
|
||||||
|
- [add manuals to website](#add-manuals-to-website)
|
||||||
|
- [announce major release](#announce-major-release)
|
||||||
|
|
||||||
### Major release
|
|
||||||
- prepare as for preview release
|
|
||||||
- make release notes
|
|
||||||
- make announcement
|
|
||||||
- update hledger-install
|
|
||||||
- update install page
|
|
||||||
- add manuals to website
|
|
||||||
- announce major release
|
|
||||||
#### Make release notes
|
#### Make release notes
|
||||||
|
|
||||||
In site repo:
|
In site repo:
|
||||||
|
|
||||||
- update `release-notes.md`
|
- update `src/release-notes.md`
|
||||||
- copy template, uncomment
|
- copy template, uncomment
|
||||||
- replace date
|
- replace date
|
||||||
- replace XX with NEW
|
- replace XX with NEW
|
||||||
@ -161,30 +191,23 @@ In site repo:
|
|||||||
- commit: `relnotes: NEW`
|
- commit: `relnotes: NEW`
|
||||||
|
|
||||||
#### Make announcement
|
#### Make announcement
|
||||||
|
In release branch:
|
||||||
In release branch (?):
|
|
||||||
|
|
||||||
- update `doc/ANNOUNCE` (major release)
|
- update `doc/ANNOUNCE` (major release)
|
||||||
- summary, contributors from release notes
|
- summary, contributors from release notes
|
||||||
- any other edits
|
- any other edits
|
||||||
- commit: `;doc: ANNOUNCE`
|
- commit: `;doc: announce`
|
||||||
|
|
||||||
In master (?):
|
|
||||||
|
|
||||||
- cherry pick useful release branch changes
|
|
||||||
- `;doc: ANNOUNCE`
|
|
||||||
|
|
||||||
#### Update hledger-install script
|
|
||||||
|
|
||||||
|
#### Update hledger-install
|
||||||
- update `hledger-install/hledger-install.sh`
|
- update `hledger-install/hledger-install.sh`
|
||||||
- HLEDGER_INSTALL_VERSION
|
- HLEDGER_INSTALL_VERSION
|
||||||
- RESOLVER
|
- RESOLVER
|
||||||
- HLEDGER_*_VERSION
|
- HLEDGER_*_VERSION
|
||||||
- EXTRA_DEPS
|
- EXTRA_DEPS
|
||||||
- test ? (`cd; bash \~/src/hledger/hledger-install/hledger-install.sh`)
|
- test ? `cd; bash ~/src/hledger/hledger-install/hledger-install.sh`
|
||||||
|
- commit: `install: NEW`
|
||||||
|
|
||||||
#### Update install page
|
#### Update install page
|
||||||
|
|
||||||
In site repo:
|
In site repo:
|
||||||
|
|
||||||
- update `install.md`
|
- update `install.md`
|
||||||
@ -202,7 +225,6 @@ In site repo:
|
|||||||
- commit: `download: NEW`
|
- commit: `download: NEW`
|
||||||
|
|
||||||
#### Add manuals to website
|
#### Add manuals to website
|
||||||
|
|
||||||
In site:
|
In site:
|
||||||
|
|
||||||
- js/site.js: add NEW, update currentrelease
|
- js/site.js: add NEW, update currentrelease
|
||||||
@ -237,16 +259,18 @@ On hledger.org:
|
|||||||
- tweet at https://twitter.com/simonkwmichael ?
|
- tweet at https://twitter.com/simonkwmichael ?
|
||||||
- toot at https://fosstodon.org/web/accounts/106304084994827771 ?
|
- toot at https://fosstodon.org/web/accounts/106304084994827771 ?
|
||||||
|
|
||||||
### Bugfix release
|
### 3. Fixup release
|
||||||
- switch to release branch
|
|
||||||
- cherry pick changes from master
|
|
||||||
- proceed as above, with MA.JOR.MINOR
|
|
||||||
### Fixup release
|
|
||||||
- switch to release branch
|
- switch to release branch
|
||||||
- cherry pick changes from master
|
- cherry pick changes from master
|
||||||
- proceed as above, with MA.JOR.MINOR.FIXUP
|
- proceed as above, with MA.JOR.MINOR.FIXUP
|
||||||
|
|
||||||
### After a release
|
### 4. Bugfix release
|
||||||
|
- switch to release branch
|
||||||
|
- cherry pick changes from master
|
||||||
|
- proceed as above, with MA.JOR.MINOR
|
||||||
|
|
||||||
|
### 5. After a release
|
||||||
|
- [update master after release](#update-master-after-release)
|
||||||
- monitor packaging status, update install page
|
- monitor packaging status, update install page
|
||||||
- docker - expect/merge PR
|
- docker - expect/merge PR
|
||||||
- homebrew - expect badge to update soon
|
- homebrew - expect badge to update soon
|
||||||
@ -256,7 +280,14 @@ On hledger.org:
|
|||||||
- prepare followup releases if needed
|
- prepare followup releases if needed
|
||||||
- update process docs and tools
|
- update process docs and tools
|
||||||
|
|
||||||
|
#### Update master after release
|
||||||
|
- switch back to master
|
||||||
|
- update master changelogs, merging final release changelog entries (see [CHANGELOGS](CHANGELOGS.html))
|
||||||
|
- cherry-pick other useful changes, such as `;doc: ANNOUNCE`
|
||||||
|
- after a major release: bump master to new dev version (`./Shake setversion -c A.B.99`)
|
||||||
|
|
||||||
### Packaging
|
### Packaging
|
||||||
|
|
||||||
#### Update homebrew formula
|
#### Update homebrew formula
|
||||||
|
|
||||||
1. ref
|
1. ref
|
||||||
@ -379,22 +410,3 @@ On hledger.org:
|
|||||||
2. monitor for new package versions in nightly: check
|
2. monitor for new package versions in nightly: check
|
||||||
<https://www.stackage.org/package/hledger>
|
<https://www.stackage.org/package/hledger>
|
||||||
|
|
||||||
### General tips
|
|
||||||
- Follow the RELEASING.md procedures when helpful, ignore them when not.
|
|
||||||
- Don't update RELEASING.md while releasing, it's too distracting. Do update it after the release is complete.
|
|
||||||
- Don't try to document, let alone automate, every little thing; it's too much and too unstable.
|
|
||||||
- Make things a little better each time through: simpler, more reliable, more automated, easier, faster, cheaper, higher quality.
|
|
||||||
- Release (or practice releasing) often.
|
|
||||||
- Releases should always be made from a release branch, not from master.
|
|
||||||
- Don't tag until CI binaries have been produced for all platforms from the same commit.
|
|
||||||
- Update [CHANGELOGS](CHANGELOGS.html) early and often, eg during or after a PR, to spread the work.
|
|
||||||
- Release tasks have complex interdependencies and sequencing constraints.
|
|
||||||
Chunk and separate them as far as possible. Eg
|
|
||||||
- **Software** - selecting changes, packages, release dates; coordinating contributions; ensuring release readiness
|
|
||||||
- **Branch Management** - coordinating main and release branch, local and remote repos, CI branches
|
|
||||||
- **Version Bumping** - choosing and applying new version numbers and related things like tags, github releases, urls, ghc and dep versions, stackage resolvers, everywhere needed
|
|
||||||
- **Docs** - command help, manuals, changelogs, release notes, github release notes, install page, install scripts, announcements, process docs
|
|
||||||
- **Testing** - local testing, CI testing, extra release-specific testing
|
|
||||||
- **Artifacts** - generating binaries, zip files, github releases etc.
|
|
||||||
- **Publishing** - uploading, pushing, making visible, finalising
|
|
||||||
- **Announcing** - various announcement stages and channels
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user