From 4ff032a463435b716237055066528ddfe384225a Mon Sep 17 00:00:00 2001 From: Mix Date: Sat, 17 Oct 2026 00:42:27 +0300 Subject: [PATCH] =?UTF-8?q?release:=202.12.0:=20test-email=20-=20a=20test?= =?UTF-8?q?=20message=20from=20Server=20=E2=80=BA=20Health?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cut without asking, as the owner said on 2026-10-15. A global user sends one message from postmaster@ the hostname to an address typed; it opens in the Outbound log, which follows it (the commit before this; mockups e92769f, e3b2501, 8f0ccf9). Reviewed for security, its low findings fixed. go vet, go test (26 packages) and make e2e passed on the test server for that tree. No migration, schema 12. CHANGELOG [2.12.0]; pins in deploy/docker-compose.yml, README and the guide (pin, build, the sample restore message); development's "from pin" and row 38; roadmap row. No tag. Co-Authored-By: Claude Opus 5.5 --- CHANGELOG.md | 4 ++++ README.md | 6 +++--- deploy/docker-compose.yml | 2 +- docs/development.md | 3 ++- docs/guide.md | 8 ++++---- docs/roadmap.md | 2 +- 6 files changed, 15 insertions(+), 10 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 694f754..ec909ad 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,10 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); version ## [Unreleased] +## [2.12.0] - 2026-10-17 + +A test message from Server › Health. No migration; schema 12. + ### Added - **A test message from Server › Health** (test-email): one message to an diff --git a/README.md b/README.md index 3880536..abd00be 100644 --- a/README.md +++ b/README.md @@ -112,8 +112,8 @@ outbound mail will not reach the real internet without DNS, PTR, and port 25. > local image and pulls nothing: > > ```sh -> docker build -f build/Dockerfile --build-arg VERSION=2.11.0 \ -> -t ghcr.io/mixeme/selfpost:2.11.0 . +> docker build -f build/Dockerfile --build-arg VERSION=2.12.0 \ +> -t ghcr.io/mixeme/selfpost:2.12.0 . > ``` ```sh @@ -122,7 +122,7 @@ docker run --rm -d --name selfpost-try \ -e SELFPOST_HOSTNAME=mail.local.test \ -e PANEL_COOKIE_SECURE=false \ -v selfpost-try-data:/data \ - ghcr.io/mixeme/selfpost:2.11.0 + ghcr.io/mixeme/selfpost:2.12.0 ``` **Get the setup URL** (pick one): diff --git a/deploy/docker-compose.yml b/deploy/docker-compose.yml index 27806a3..88ef101 100644 --- a/deploy/docker-compose.yml +++ b/deploy/docker-compose.yml @@ -23,7 +23,7 @@ services: selfpost: - image: ghcr.io/mixeme/selfpost:2.11.0 + image: ghcr.io/mixeme/selfpost:2.12.0 restart: unless-stopped environment: SELFPOST_HOSTNAME: "${SELFPOST_HOSTNAME:?set the mail/panel hostname, e.g. mail.example.com}" diff --git a/docs/development.md b/docs/development.md index 0f528c2..8765979 100644 --- a/docs/development.md +++ b/docs/development.md @@ -107,7 +107,7 @@ than the default «meaningful step» rule in [§ Commits and release build](#com 2. Git tag `vX.Y.Z` and publish the GitHub Release only on explicit request (see [§ Release image](#release-image)). -**Planned version cuts** (from pin `2.11.0`; adjust if semver changes mid-track): +**Planned version cuts** (from pin `2.12.0`; adjust if semver changes mid-track): | Stage | ID | Cut | |---|---|---| @@ -148,6 +148,7 @@ than the default «meaningful step» rule in [§ Commits and release build](#com | 35 | backup-reauth | `2.10.3` (PATCH) | | 36 | origin-strict | `2.10.4` (PATCH) | | 37 | health-setup-checks | `2.11.0` | +| 38 | test-email | `2.12.0` | Docs-only prep (checklists in plans, no product code) uses the same per-step commit rule but **no** version cut until the next product stage ships. diff --git a/docs/guide.md b/docs/guide.md index ba23b66..2ad978a 100644 --- a/docs/guide.md +++ b/docs/guide.md @@ -204,14 +204,14 @@ cat ./data/setup-token #### Fixed image tag `deploy/docker-compose.yml` pins an explicit version (`ghcr.io/mixeme/selfpost:X.Y.Z`), -deliberately never `:latest`. The current pin is `2.11.0`. **No 2.x image is +deliberately never `:latest`. The current pin is `2.12.0`. **No 2.x image is published on ghcr.io yet** (the newest there is `1.3.0`); until one is, build it from the checkout under the pinned name, and Compose uses the local image instead of pulling: ```sh -docker build -f build/Dockerfile --build-arg VERSION=2.11.0 \ - -t ghcr.io/mixeme/selfpost:2.11.0 . +docker build -f build/Dockerfile --build-arg VERSION=2.12.0 \ + -t ghcr.io/mixeme/selfpost:2.12.0 . ``` `VERSION` must equal the tag: it is the version the backup check compares @@ -970,7 +970,7 @@ A version mismatch at step 5 refuses to start and leaves `/data` untouched — the panel exits with a message naming the tag to use, e.g.: ``` -backup: this backup was created by SelfPost 2.10.4 but this image is 2.11.0 — restore into the matching image (selfpost:2.10.4) +backup: this backup was created by SelfPost 2.11.0 but this image is 2.12.0 — restore into the matching image (selfpost:2.11.0) ``` Fix the tag in `docker-compose.yml` (build that tag as under [Fixed image diff --git a/docs/roadmap.md b/docs/roadmap.md index 8741857..ecabad8 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -30,7 +30,7 @@ in `git log` and [CHANGELOG.md](../CHANGELOG.md). |---|---|---|---|---| | inbound-upstream-result | Inbound › Log shows what the upstream answered: sent, deferred, bounced, with its last reply | shipped `2.10.0` | 7/7 | [plans/inbound-upstream-result.md](plans/inbound-upstream-result.md) | | health-setup-checks | Server › Health also checks the certificate's name, Postfix's greeting and the trusted proxy (was preflight) | shipped `2.11.0` | — | — | -| test-email | Send a test message from the panel (was preflight) | done 2026-10-17, unreleased | — | — | +| test-email | Send a test message from the panel (was preflight) | shipped `2.12.0` | — | — | | inbound-antispam-panel | Inbound antispam journal + allow/deny lists | shipped `2.1.0` | 12/12 | [plans/inbound-antispam-panel.md](plans/inbound-antispam-panel.md) | | origin-strict | Refuse a state-changing request that carries neither `Sec-Fetch-Site` nor `Origin` (was csrf-tokens) | shipped `2.10.4` | — | — | | backup-reauth | Ask for the account password before a backup or a domain export is downloaded | shipped `2.10.3` | — | — |