Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 5598b62e4e | |||
| 32f5085c48 |
+21
-5
@@ -5,6 +5,13 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); version
|
|||||||
|
|
||||||
## [Unreleased]
|
## [Unreleased]
|
||||||
|
|
||||||
|
## [1.3.0] - 2026-08-14
|
||||||
|
|
||||||
|
Security and quality after 1.2.5: domain-admin send-log authorization,
|
||||||
|
fail-closed sign-in and application delete, level-2 rate-limit race fix,
|
||||||
|
restore Resync, expanded tests, operator docs, release CI, and OFL for IBM
|
||||||
|
Plex. Upgrading from 1.2.x is a tag bump; no migration.
|
||||||
|
|
||||||
### Added
|
### Added
|
||||||
|
|
||||||
- licence: the SIL Open Font License 1.1 text now travels with the IBM Plex
|
- licence: the SIL Open Font License 1.1 text now travels with the IBM Plex
|
||||||
@@ -121,14 +128,23 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); version
|
|||||||
|
|
||||||
- licence: [NOTICE](NOTICE) tells modifiers to update `SourceURL` in
|
- licence: [NOTICE](NOTICE) tells modifiers to update `SourceURL` in
|
||||||
`internal/legal/legal.go` (the value the panel footer actually injects), not
|
`internal/legal/legal.go` (the value the panel footer actually injects), not
|
||||||
`layout.html`. `release.yml` refuses a `workflow_dispatch` whose version is
|
`layout.html`. Per-file `SPDX-License-Identifier` headers on the two command
|
||||||
not SemVer `X.Y.Z`, so a run from `main` cannot publish `ghcr.io/...:main`.
|
packages were dropped so the tree is consistent; AGPL-3.0 does not require
|
||||||
Per-file `SPDX-License-Identifier` headers on the two command packages were
|
them ([development.md](docs/development.md) § External libraries). Deleted the
|
||||||
dropped so the tree is consistent; AGPL-3.0 does not require them
|
|
||||||
([development.md](docs/development.md) § External libraries). Deleted the
|
|
||||||
completed `docs/plans/logrotate-mode.md` (history in git and
|
completed `docs/plans/logrotate-mode.md` (history in git and
|
||||||
[1.2.3](#123---2026-08-12)).
|
[1.2.3](#123---2026-08-12)).
|
||||||
|
|
||||||
|
- ci: the release image is published only for a **published** GitHub Release
|
||||||
|
(`vX.Y.Z`) or a manual `workflow_dispatch` with an explicit SemVer version — a
|
||||||
|
bare git tag push no longer starts the build. `release.yml` listens for
|
||||||
|
`release: published`, checks out that tag (not `main` HEAD), e2e-gates each
|
||||||
|
native arch build, merges `X.Y.Z-amd64` and `X.Y.Z-arm64` into one manifest,
|
||||||
|
then removes the per-arch tags from GHCR so operators see only
|
||||||
|
`ghcr.io/mixeme/selfpost:X.Y.Z` (what `deploy/docker-compose.yml` pins). A
|
||||||
|
dispatch whose version input is missing or not `X.Y.Z` fails in `prepare`.
|
||||||
|
[development.md](docs/development.md) documents draft vs published releases
|
||||||
|
and why deleting a release tag converts it back to draft.
|
||||||
|
|
||||||
- test: the authorization and sign-in surfaces that had no tests now have them.
|
- test: the authorization and sign-in surfaces that had no tests now have them.
|
||||||
The login limiter is covered for its ceiling, its per-address scope, the reset
|
The login limiter is covered for its ceiling, its per-address scope, the reset
|
||||||
at the end of a window and the sweep that keeps finished buckets out of
|
at the end of a window and the sweep that keeps finished buckets out of
|
||||||
|
|||||||
@@ -96,7 +96,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.2.5
|
ghcr.io/mixeme/selfpost:1.3.0
|
||||||
```
|
```
|
||||||
|
|
||||||
**Get the setup URL** (pick one):
|
**Get the setup URL** (pick one):
|
||||||
|
|||||||
@@ -22,7 +22,7 @@
|
|||||||
|
|
||||||
services:
|
services:
|
||||||
selfpost:
|
selfpost:
|
||||||
image: ghcr.io/mixeme/selfpost:1.2.5
|
image: ghcr.io/mixeme/selfpost:1.3.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}"
|
||||||
|
|||||||
+2
-2
@@ -165,7 +165,7 @@ cat ./data/setup-token
|
|||||||
#### 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.2.5`. Intermediate
|
deliberately never `:latest`. The current pin is `1.3.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 (see
|
image was published. Pinning matters because of the backup version check (see
|
||||||
[Full backup and restore](#full-backup-and-restore)): the panel binary's
|
[Full backup and restore](#full-backup-and-restore)): the panel binary's
|
||||||
@@ -466,7 +466,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.:
|
the panel exits with a message naming the tag to use, e.g.:
|
||||||
|
|
||||||
```
|
```
|
||||||
backup: this backup was created by SelfPost 1.2.3 but this image is 1.2.5 — restore into the matching image (selfpost:1.2.3)
|
backup: this backup was created by SelfPost 1.2.3 but this image is 1.3.0 — restore into the matching image (selfpost:1.2.3)
|
||||||
```
|
```
|
||||||
|
|
||||||
Fix the tag in `docker-compose.yml`, `docker compose pull && docker compose up
|
Fix the tag in `docker-compose.yml`, `docker compose pull && docker compose up
|
||||||
|
|||||||
Reference in New Issue
Block a user