release: 1.1.0

Close CHANGELOG [Unreleased] as 1.1.0; remove erroneous DMARC entries
retroactively copied into older sections; bump the compose pin and image
references.

Co-Authored-By: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-08-10 23:30:46 +03:00
parent 155b721438
commit e34d81498e
6 changed files with 12 additions and 41 deletions
+7 -36
View File
@@ -5,6 +5,13 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); version
## [Unreleased] ## [Unreleased]
## [1.1.0] - 2026-08-10
The first MINOR after 1.0.0: send-only DMARC guidance in the panel, AGPL
packaging on every page, and an internal split of `internal/web` ahead of
domain-admin work. Upgrading runs one SQLite migration (empty defaults;
existing DNS guidance is unchanged until you set a report address).
### Changed ### Changed
- `internal/web` split into subpackages (`web/view`, `web/auth`, `web/validate`, - `internal/web` split into subpackages (`web/view`, `web/auth`, `web/validate`,
@@ -40,12 +47,6 @@ database, or the on-disk layout. Upgrading is a tag bump.
### Added ### Added
- panel: DMARC guidance for send-only relays — the suggested `_dmarc` record
is now `p=none` without `rua=` by default; *Settings* and each domain page
let you configure an optional aggregate-report address (profile default plus
per-domain inherit / none / custom). When `rua=` targets another domain, the
panel shows and DNS-checks the hub's `_report._dmarc` authorisation record.
Domain export/import carries per-domain overrides.
- `SECURITY.md` — how to report a vulnerability privately (GitHub private - `SECURITY.md` — how to report a vulnerability privately (GitHub private
vulnerability reporting, `public@mixeme.ru` as fallback), which releases get vulnerability reporting, `public@mixeme.ru` as fallback), which releases get
fixes, and what is in and out of scope for a relay. No response time is fixes, and what is in and out of scope for a relay. No response time is
@@ -112,12 +113,6 @@ database, or the on-disk layout. Upgrading is a tag bump.
### Added ### Added
- panel: DMARC guidance for send-only relays — the suggested `_dmarc` record
is now `p=none` without `rua=` by default; *Settings* and each domain page
let you configure an optional aggregate-report address (profile default plus
per-domain inherit / none / custom). When `rua=` targets another domain, the
panel shows and DNS-checks the hub's `_report._dmarc` authorisation record.
Domain export/import carries per-domain overrides.
- A **Delivery log** on each delivery's page (`/deliveries/{id}`): the - A **Delivery log** on each delivery's page (`/deliveries/{id}`): the
`mail.log` lines Postfix wrote about that message, oldest first — the `mail.log` lines Postfix wrote about that message, oldest first — the
connection to the receiving server, its reply, and the status that reply was connection to the receiving server, its reply, and the status that reply was
@@ -239,12 +234,6 @@ database, or the on-disk layout. Upgrading is a tag bump.
### Added ### Added
- panel: DMARC guidance for send-only relays — the suggested `_dmarc` record
is now `p=none` without `rua=` by default; *Settings* and each domain page
let you configure an optional aggregate-report address (profile default plus
per-domain inherit / none / custom). When `rua=` targets another domain, the
panel shows and DNS-checks the hub's `_report._dmarc` authorisation record.
Domain export/import carries per-domain overrides.
- A page per delivery (`/deliveries/{id}`), reached from the *Details* link on - A page per delivery (`/deliveries/{id}`), reached from the *Details* link on
every send-log row. It carries what the log itself no longer shows — the every send-log row. It carries what the log itself no longer shows — the
sending domain, the application the message was submitted under, the Postfix sending domain, the application the message was submitted under, the Postfix
@@ -460,12 +449,6 @@ database, or the on-disk layout. Upgrading is a tag bump.
### Added ### Added
- panel: DMARC guidance for send-only relays — the suggested `_dmarc` record
is now `p=none` without `rua=` by default; *Settings* and each domain page
let you configure an optional aggregate-report address (profile default plus
per-domain inherit / none / custom). When `rua=` targets another domain, the
panel shows and DNS-checks the hub's `_report._dmarc` authorisation record.
Domain export/import carries per-domain overrides.
- Optional password encryption for the two secret-bearing downloads (plan - Optional password encryption for the two secret-bearing downloads (plan
phase 1.5, `docs/code-review.md`): an *Encrypt with a password* checkbox on phase 1.5, `docs/code-review.md`): an *Encrypt with a password* checkbox on
the full-backup and domain-export forms writes a `.spbk` / `.spde` envelope the full-backup and domain-export forms writes a `.spbk` / `.spde` envelope
@@ -567,12 +550,6 @@ database, or the on-disk layout. Upgrading is a tag bump.
### Added ### Added
- panel: DMARC guidance for send-only relays — the suggested `_dmarc` record
is now `p=none` without `rua=` by default; *Settings* and each domain page
let you configure an optional aggregate-report address (profile default plus
per-domain inherit / none / custom). When `rua=` targets another domain, the
panel shows and DNS-checks the hub's `_report._dmarc` authorisation record.
Domain export/import carries per-domain overrides.
- The project's mark is now in use rather than only on file. The README opens - The project's mark is now in use rather than only on file. The README opens
with the full stamp; the panel carries the compact one at the left of its with the full stamp; the panel carries the compact one at the left of its
navigation bar, linking to the status page, and the full one above the card navigation bar, linking to the status page, and the full one above the card
@@ -805,12 +782,6 @@ of `docs/implementation-plan.md`).
### Added ### Added
- panel: DMARC guidance for send-only relays — the suggested `_dmarc` record
is now `p=none` without `rua=` by default; *Settings* and each domain page
let you configure an optional aggregate-report address (profile default plus
per-domain inherit / none / custom). When `rua=` targets another domain, the
panel shows and DNS-checks the hub's `_report._dmarc` authorisation record.
Domain export/import carries per-domain overrides.
- Panel (Go, single static binary) with SQLite persistence, one-time - Panel (Go, single static binary) with SQLite persistence, one-time
crypto-random setup link, bcrypt admin auth, session cookies. crypto-random setup link, bcrypt admin auth, session cookies.
- Domain management with per-domain DKIM (RSA-2048, generated in pure Go) and - Domain management with per-domain DKIM (RSA-2048, generated in pure Go) and
+1 -1
View File
@@ -95,7 +95,7 @@ docker run --rm -d --name selfpost-try \
-e SELFPOST_HOSTNAME=mail.local.test \ -e SELFPOST_HOSTNAME=mail.local.test \
-e PANEL_COOKIE_SECURE=false \ -e PANEL_COOKIE_SECURE=false \
-v selfpost-try-data:/data \ -v selfpost-try-data:/data \
ghcr.io/mixeme/selfpost:1.0.1 ghcr.io/mixeme/selfpost:1.1.0
``` ```
**Get the setup URL** (pick one): **Get the setup URL** (pick one):
+1 -1
View File
@@ -22,7 +22,7 @@
services: services:
selfpost: selfpost:
image: ghcr.io/mixeme/selfpost:1.0.1 image: ghcr.io/mixeme/selfpost:1.1.0
restart: unless-stopped restart: unless-stopped
environment: environment:
SELFPOST_HOSTNAME: "${SELFPOST_HOSTNAME:?set the mail/panel hostname, e.g. mail.example.com}" SELFPOST_HOSTNAME: "${SELFPOST_HOSTNAME:?set the mail/panel hostname, e.g. mail.example.com}"
+1 -1
View File
@@ -141,7 +141,7 @@ Requires Go 1.26+ and `CGO_ENABLED=0`.
```sh ```sh
make build # bin/panel, bin/selfpost-backup (VERSION=dev by default) make build # bin/panel, bin/selfpost-backup (VERSION=dev by default)
make build VERSION=1.0.1 make build VERSION=1.1.0
``` ```
Or directly: Or directly:
+1 -1
View File
@@ -381,7 +381,7 @@ but it can look like an open port in external scans.
## Fixed image tag ## Fixed image tag
`deploy/docker-compose.yml` pins an explicit version (`ghcr.io/mixeme/selfpost:X.Y.Z`), `deploy/docker-compose.yml` pins an explicit version (`ghcr.io/mixeme/selfpost:X.Y.Z`),
deliberately never `:latest`. The current pin is `1.0.1`. Intermediate deliberately never `:latest`. The current pin is `1.1.0`. Intermediate
CHANGELOG sections (`0.2.0``0.6.0`) record development cuts from before that CHANGELOG sections (`0.2.0``0.6.0`) record development cuts from before that
image was published. Pinning matters because of the backup version check above: image was published. Pinning matters because of the backup version check above:
the panel binary's embedded version and the image tag that produced it are the the panel binary's embedded version and the image tag that produced it are the
+1 -1
View File
@@ -1,6 +1,6 @@
# Plan: web-split (splitting `internal/web`) # Plan: web-split (splitting `internal/web`)
**Status:** done (see [CHANGELOG](../CHANGELOG.md) `[Unreleased]`) **Status:** done (see [CHANGELOG](../CHANGELOG.md) `[1.1.0]`)
**Version:** `1.x`; an internal refactor, it does not force a break on its own. **Version:** `1.x`; an internal refactor, it does not force a break on its own.
--- ---