Version 27.1.0-rc.1: one workspace version, series and RC releases #223

Merged
jcoffey-dev merged 4 commits from release/version-27.1-rc.1 into main 2026-10-28 16:11:34 +00:00
4 Commits
Author SHA1 Message Date
jcoffey-dev d81d22d46b Release version tests: skip the Cargo check where nothing is cached
ci / fork-checks (pull_request) Skipped
ci / build (pull_request) Skipped
github/ci (branch) GitHub Actions
ci / github (pull_request) Successful in 9m46s
2026-10-28 09:01:29 -07:00
jcoffey-dev 7e98420e89 Retire the upstream release watch; keep the spam-rules watch
ci / fork-checks (pull_request) Skipped
ci / build (pull_request) Skipped
github/ci (branch) GitHub Actions
ci / github (pull_request) Failing after 8m6s
0.16.27 was the last import, so the daily "Import upstream vX" issues
would only ever be noise. The same workflow also watched spam-filter,
whose rules the server bundles; that half stays, as spam-rules-watch.yml.
2026-10-28 08:38:45 -07:00
jcoffey-dev 0d610ac3af Release workflows: series, patches and release candidates
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'.
2026-10-28 08:38:45 -07:00
jcoffey-dev 3a2836ef24 One version for the workspace: 27.1.0-rc.1, shown as 27.1-rc.1
The version is set once, in [workspace.package] in Cargo.toml, and every
member inherits it. brand_version! now comes from it through a small proc
macro (proc_macros::display_version) that names it the way tags and images
will: 27.1.0 is "27.1", 27.1.3 is "27.1.3", 27.1.0-rc.1 is "27.1-rc.1".
Anything else, including the old dated scheme, fails the build.

brand_version_full! is gone, and with it the "(upstream 0.16.27)" suffix
in --version, the startup banner, the data-store console, telemetry, the
JMAP session's "implementation" field and IMAP ID. 0.16.27 was the last
import, so there is no upstream version left to show.

Semver's parser skips a pre-release or build suffix, so Semver::current()
can't panic on an RC. It has no callers today; it gets a test anyway.
2026-10-28 08:38:45 -07:00