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
Owner

The server side of the 27.1 rc.1 gate. 2026.x continues on release/2026 (cut at 3645987, "Version 2026.10.28"), security fixes only.

  • One version. [workspace.package] version = "27.1.0-rc.1" in Cargo.toml; every member inherits it. brand_version! shows it the way tags and images name it (27.1, 27.1.3, 27.1-rc.1) through a small proc macro; anything else fails the build. The "(upstream 0.16.27)" suffix is gone from --version, the banner, telemetry, the JMAP session and IMAP ID.
  • Release workflows. tools/release/version.py reads, maps, checks and bumps the version (Cargo.toml + Cargo.lock). publish: the tag must be v<shown version>; a release moves :<version>, :<series> and :latest; a release candidate moves :<version> and :<series>-rc, never :latest, and its Release is a pre-release. weekly-release: next patch of the series; does nothing while main is on an RC.
  • upstream-watch retired. 0.16.27 was the last import. The spam-filter half stays as spam-rules-watch.yml.

Checked: inbuxa --version prints 27.1-rc.1; jmap and imap suites pass; the weekly script stops cleanly on an RC; version.py round-trips Cargo.toml/Cargo.lock and Cargo accepts the result with --locked; fork checks and fmt pass.

Not tagged yet: rc.1 waits for the rest of the suite to move to the same number.

The server side of the 27.1 rc.1 gate. 2026.x continues on `release/2026` (cut at 3645987, "Version 2026.10.28"), security fixes only. - **One version.** `[workspace.package] version = "27.1.0-rc.1"` in Cargo.toml; every member inherits it. `brand_version!` shows it the way tags and images name it (`27.1`, `27.1.3`, `27.1-rc.1`) through a small proc macro; anything else fails the build. The "(upstream 0.16.27)" suffix is gone from --version, the banner, telemetry, the JMAP session and IMAP ID. - **Release workflows.** `tools/release/version.py` reads, maps, checks and bumps the version (Cargo.toml + Cargo.lock). publish: the tag must be `v<shown version>`; a release moves `:<version>`, `:<series>` and `:latest`; a release candidate moves `:<version>` and `:<series>-rc`, never `:latest`, and its Release is a pre-release. weekly-release: next patch of the series; does nothing while main is on an RC. - **upstream-watch retired.** 0.16.27 was the last import. The spam-filter half stays as `spam-rules-watch.yml`. Checked: `inbuxa --version` prints `27.1-rc.1`; jmap and imap suites pass; the weekly script stops cleanly on an RC; `version.py` round-trips Cargo.toml/Cargo.lock and Cargo accepts the result with `--locked`; fork checks and fmt pass. Not tagged yet: rc.1 waits for the rest of the suite to move to the same number.
jcoffey-dev added 3 commits 2026-10-28 15:52:48 +00:00
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.
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'.
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
7e98420e89
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.
jcoffey-dev added 1 commit 2026-10-28 16:01:32 +00:00
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
d81d22d46b
jcoffey-dev merged commit 90a83d094a into main 2026-10-28 16:11:34 +00:00
jcoffey-dev deleted branch release/version-27.1-rc.1 2026-10-28 16:11:34 +00:00
Sign in to join this conversation.