# Release Process Version numbers: - official release: `{major}.{minor}.{patch}` (e.g. `2.2.1`, `3.1.0`, `4.0.0`...) - pre-release: `{major}.{minor}.{patch}.{dev|rc}{devel}` (e.g. `4.0.0.dev7`, `4.0.0rc1`, ...) Steps to cut a new release (from a clean checkout of `master`): 1. Update version in `plover/__init__.py`, and stage the change `git add plover/__init__.py`. 2. Install towncrier (`pip install towncrier`) and update `NEWS.md`: `towncrier`. 3. Review the staged changes, check all news fragments in `news.d` were properly handled (merged into `NEWS.md` and removed by towncrier). 4. Commit: `git commit -m "release $(./setup.py --version)"` 5. Tag the release: `git tag -m "$(git log -1 --pretty='format:%B')" "v$(./setup.py --version)"` 6. Push to Github: `git push --follow-tags origin`