tools/release/version.py reads the workspace version, maps it the way the
server does (the same test cases), checks a tag against it, lists a
version's image tags and bumps Cargo.toml with Cargo.lock.
publish (GitHub and Gitea): the tag must be v<shown version>, read from
Cargo.toml instead of branding.rs. A release moves :<version>, the
series tag and :latest; a release candidate moves :<version> and
:<series>-rc, never :latest, and its Release is a pre-release.
weekly-release: cuts the next patch of the current series (27.1 ->
27.1.1) and commits Cargo.toml and Cargo.lock together. While main is on
a release candidate it says so and stops: a series and its candidates
are cut by hand.
CI runs the helper's tests next to the fork tools'.