All public releases are cut from a release branch, the current release branch is 23.0.x, and all releases have even version numbering. Development (non-public) releases are cut from the trunk, and have odd version numbering. All odd releases should be considered unstable, and not for GA. With the migration to git, we now also sign all release tags, for example
For every released artifact, a tag should be created off the appropriate release branch. These tags should be named exactly the same as the version number released, e.g. "2.0.0-alpha" or "2.1.0". The release package should be made from the tag, not from the release branch. With the migration to git, all release tags should be signed with your release GPG key. For example:
$ git tag -s 3.1.2
You will be prompted for a commit message, and (probably) the gpg passphrase. If you need to specify a specific signing key, you can configure that in git (signkey) or specify it with the -u option to git tag.
CHANGES and STATUS file
Before cutting a release, please make sure the CHANGES and STATUS files are up to date. In particular, make sure that the CHANGES file on trunk is in sync with the release branches (currently only 2.0.x). The CHANGES should include major feature changes or bug fixes for a release.