CI: check the app's own requests against real Stalwart 0.16.27 and 1.0.0 #63

Merged
jcoffey-dev merged 1 commits from test/stalwart-compat into main 2026-10-27 06:57:20 +00:00
Owner

Stacked on #62: merge that first. This branch carries its commit, and on 1.0 the new job fails without it.

Item 2 of the queued "Stalwart 1.0 ready" release.

  • web/src/jmap/__tests__/stalwart-compat.test.ts: sends the reader's real property lists (FULL_PROPS, LIST_PROPS, MAILBOX_PROPS, BODY_PROPS, calendar and address-book props), the reads the app makes for a user and for an administrator, and a send, each with the using the app builds (usingFor, now exported), to a real, empty Stalwart. Skipped unless STALWART_COMPAT_URL is set, so npm test is unchanged. Two refusals are allowed as server policy: Principal/query (directory queries off by default) and x:Metric/query (Enterprise).
  • New stalwart job in .github/workflows/ci.yml: one run per supported version, images pinned by digest, a recovery administrator made up per run, and a config file so the server skips bootstrap mode. It is in the report to Gitea.

Checked locally: 4/4 pass on fresh 0.16.27 and 1.0.0 containers. With main's old property list swapped in, it fails on 1.0 with the server's own error (Invalid property ... List-Unsubscribe ... form: Text).

Not added to .gitea/workflows/ci.yml: the fallback there runs jobs in containers on ci-net, and reaching a sibling Stalwart container from it needs testing on that runner. Say if you want it.

**Stacked on #62: merge that first.** This branch carries its commit, and on 1.0 the new job fails without it. Item 2 of the queued "Stalwart 1.0 ready" release. - `web/src/jmap/__tests__/stalwart-compat.test.ts`: sends the reader's real property lists (`FULL_PROPS`, `LIST_PROPS`, `MAILBOX_PROPS`, `BODY_PROPS`, calendar and address-book props), the reads the app makes for a user and for an administrator, and a send, each with the `using` the app builds (`usingFor`, now exported), to a real, empty Stalwart. Skipped unless `STALWART_COMPAT_URL` is set, so `npm test` is unchanged. Two refusals are allowed as server policy: `Principal/query` (directory queries off by default) and `x:Metric/query` (Enterprise). - New `stalwart` job in `.github/workflows/ci.yml`: one run per supported version, images pinned by digest, a recovery administrator made up per run, and a config file so the server skips bootstrap mode. It is in the report to Gitea. Checked locally: 4/4 pass on fresh 0.16.27 and 1.0.0 containers. With main's old property list swapped in, it fails on 1.0 with the server's own error (`Invalid property ... List-Unsubscribe ... form: Text`). Not added to `.gitea/workflows/ci.yml`: the fallback there runs jobs in containers on `ci-net`, and reaching a sibling Stalwart container from it needs testing on that runner. Say if you want it.
jcoffey-dev added 2 commits 2026-10-27 06:47:49 +00:00
Fetch List-Unsubscribe as URLs, the form RFC 8621 gives it
ci / node (pull_request) Skipped
ci / version (pull_request) Skipped
ci / docker-build (pull_request) Skipped
ci / publish (pull_request) Skipped
github/ci (branch) GitHub Actions
ci / github (pull_request) Successful in 2m45s
94ab1ffed3
List-Unsubscribe is an RFC 2369 header, and RFC 8621 4.1.2.3 allows the
Text form only for headers outside RFC 5322 and RFC 2369. Stalwart 0.16
answered it anyway; Stalwart 1.0 refuses the whole Email/get with
invalidArguments, so no message could be opened. asURLs returns the list the
reader was extracting by hand, on both versions.

Also drops the unused Return-Path and Received asText typings, which 1.0
refuses for the same reason.
CI: check the app's own requests against real Stalwart 0.16.27 and 1.0.0
ci / node (pull_request) Skipped
ci / version (pull_request) Skipped
ci / docker-build (pull_request) Skipped
ci / publish (pull_request) Skipped
github/ci (branch) GitHub Actions
ci / github (pull_request) Successful in 3m6s
b67889d57e
A test that sends the reader's property lists, the reads the app makes for
a user and for an administrator, and a send, each with the `using` the app
builds, to a real, empty Stalwart. Skipped unless STALWART_COMPAT_URL is
set; a new CI job sets it once per supported version, from images pinned by
digest.

The probe that cleared Stalwart 1.0 kept its own copy of the requests and
missed List-Unsubscribe:asText; this test fails on that with the server's
own error, and passes on both versions with it fixed.
jcoffey-dev merged commit 7823b4f32d into main 2026-10-27 06:57:20 +00:00
jcoffey-dev deleted branch test/stalwart-compat 2026-10-27 06:57:20 +00:00
Sign in to join this conversation.