Commit Graph
58 Commits
Author SHA1 Message Date
jcoffey-dev db76a1044f export: bring matched items up to date on every run
ci / test (pull_request) Skipped
github/ci (branch) GitHub Actions
ci / github (pull_request) Successful in 2m32s
ci / announce (pull_request) Skipped
Export matched each item against the target and then skipped it, so a second
run -- the usual final pass of a cutover -- never carried anything that had
changed at the source since the first: read and flagged state, moves between
folders, edited contacts, events and Sieve scripts. It reported them as
skipped and exited 0, while the usage guide said matched items were updated.

Matched items are now updated, with one batched /set per type:

- Email: keywords are set to the archive's, added and removed, compared
  case-insensitively. Memberships of folders this run migrated are added and
  removed to match; folders that exist only on the target are left alone,
  and a message is never left in no folder. Properties the server did not
  report are not touched.
- Contacts and events: when both copies carry `updated`, the archive's is
  written only if it is newer; otherwise each property the archive writes is
  compared, and those that differ are sent whole.
- Sieve scripts: the target's copy is downloaded and compared byte for byte,
  and replaced with the archive's when it differs.

Updated items are counted as `updated`; unchanged ones stay `skipped`. The
usage guide now describes this.
2026-09-30 11:32:04 -07:00
jcoffey-dev 5ae0625ee1 export: write a message once, in every folder it was in
ci / test (pull_request) Skipped
github/ci (branch) GitHub Actions
ci / github (pull_request) Successful in 2m11s
ci / announce (pull_request) Skipped
A source that files one message in several folders -- IMAP and Maildir
copies, Gmail labels -- leaves one archive row per folder, all pointing at the
same blob. Export imported each row on its own, so the message arrived on the
target once per folder. Worse, an interrupted export matched the rest by
Message-ID alone on the next run and skipped them, so their folders were never
added.

Export now folds rows with the same blob into one email, with the union of
their folders and keywords. On a match it adds, with one batched Email/set,
any migrated folder the target copy is missing; folders that exist only on the
target are left alone. Matching is still by Message-ID (or the fallback
digest), with size deciding between several messages that share one, so two
different messages are never folded onto one target email.

The archive is unchanged: the fold happens at export, so imports, resumes and
deletions work exactly as before.
2026-09-30 11:25:04 -07:00
jcoffey-dev 2d94915702 Merge pull request 'Make Vandelay into inbuxa-migrate' (#1) from rename/inbuxa-migrate into main
github/ci (branch) GitHub Actions
Reviewed-on: #1
2026-09-30 17:30:46 +00:00
jcoffey-dev 210c04997c Track the Gitea workflows and docs/usage.md
The .gitignore inherited from upstream ignores every dotfile except .github,
and every Markdown file except README and CHANGELOG. The Gitea workflows and
docs/usage.md, which the README links to, were therefore never committed.
Both are now excepted and added.
2026-09-30 10:23:30 -07:00
jcoffey-dev f03e197d0b docs: write dates the American way
"October 1, 2026" and "April 1, 2027", matching the rest of the suite.
2026-09-30 10:22:35 -07:00
jcoffey-dev bfea4a5467 Rewrite the README for inbuxa-migrate
The README now says what the tool is in the suite's plain voice: the
archive in the middle, convergent reruns, --dry-run, the archive as a
backup, the sources it reads (Stalwart among the JMAP ones), the
INBUXA_MIGRATE_* credential variables, installing from the Gitea release
with SHA256SUMS, building and testing, and the license with the lineage
line. Upstream's logo, badges and install channels are gone.

The full command and flag reference moves to docs/usage.md, with the
renamed binary and variables. The CHANGELOG gains a section for this first
release, above upstream's history.
2026-09-30 10:15:07 -07:00
jcoffey-dev 42413563ef Replace the release tooling with the suite's CI
Upstream's cargo-dist pipeline published to npm and Homebrew under its own
names, built an MSI, and ran on every pull request. It goes, with its
dist-workspace.toml, the wix/ installer files and the README image.

CI now follows the rest of the suite. .gitea/workflows runs `cargo test
--locked` on Gitea's runners, or, when the org variable BUILD_ON is
'github', waits for the result GitHub reports on the commit. On GitHub,
.github/workflows/ci.yml runs the same tests, and for a v* tag on main
whose version matches Cargo.toml builds scripts/build-release.sh on native
amd64 and arm64 runners (Ubuntu 22.04, for the widest glibc range),
attaches inbuxa-migrate-linux-{amd64,arm64}.tar.gz and SHA256SUMS to the
Gitea Release, copies the Release to GitHub, and reports back. Releases are
built only on GitHub; with BUILD_ON unset a tag is tested but not released.
Published releases are announced on the forum.
2026-09-30 10:12:48 -07:00
jcoffey-dev 7fbcf5031e Take the registry capability from the server's session
Registry calls (x:Account, x:Domain and the rest of the x: types) were
always sent under urn:stalwart:jmap. inbuxa advertises the same registry
as urn:inbuxa:jmap:registry, so the capability now comes from the connected
server: Session::registry_urn() picks urn:inbuxa:jmap:registry when the
session advertises it, else urn:stalwart:jmap, so Stalwart servers still
work as a source. A request carrying an x: call against a server that
advertises neither fails with a MissingCapability error naming both,
treated like any other connection-level failure, instead of sending a
capability the server never offered.
2026-09-30 10:09:10 -07:00
jcoffey-dev 5931b06392 Rename to inbuxa-migrate
The crate, binary, library path and every name the tool writes or reads
become inbuxa-migrate: the CLI name and about text, the HTTP user agent,
the credential variables (INBUXA_MIGRATE_PASSWORD, _TOKEN,
_EWS_CLIENT_SECRET and _GRAPH_TOKEN, with no fallback to the old names),
thread names, synthesized UIDs and calendar addresses
(urn:x-inbuxa-migrate:attendee:), and the Maildir file suffix used by the
export script. This is a new tool, so archives written by Vandelay are not
read back.

The version moves to the date scheme the release tags use (2026.9.30), and
the package metadata points at the inbuxa-migrate repository. The cargo-dist
and MSI metadata goes with the release tooling it served.

Modified files carry an added copyright line; the original notices stay.
2026-09-30 10:09:10 -07:00
Stalwart Official 486a384712 Merge branch 'main' of github.com:stalwartlabs/vandelay 2026-09-30 14:16:40 +02:00
Stalwart Official 3a04a6e1fd Added EWS details 2026-09-30 14:16:11 +02:00
Maurus Decimus 1596cabd51 v1.0.11 2026-09-28 11:38:50 +02:00
Maurus Decimus 70fa688d25 Fix IMAP: import failed after authenticating to Dovecot when a capability contained :, such as IMAPSIEVE=sieve://... (fixes #43) 2026-09-28 11:38:10 +02:00
Maurus Decimus 5dc92c7329 Migrate to encodify 2026-09-28 10:45:15 +02:00
Maurus Decimus 42f7c87911 v1.0.10 2026-08-27 19:53:06 +02:00
Maurus Decimus e00909640a MS Exchange Graph fixes 2026-08-27 19:51:18 +02:00
Maurus Decimus e8d98abccb MS Exchange Graph: Import the default Contacts folder, recover series exceptions (fixes #39) 2026-08-27 19:15:03 +02:00
Maurus Decimus 423b761617 v1.0.9 2026-08-22 18:46:54 +02:00
Maurus Decimus 1cc633f39c v1.0.8 (fixes #29 fixes #30 fixes #31) 2026-08-16 12:29:05 +02:00
Maurus Decimus c4e06bd87d Testcontainer fixes 2026-07-28 09:12:10 +02:00
Maurus Decimus fe16f2b2fe IMAP import failed with "LIST mailbox name missing" when a mailbox name is a purely numeric unquoted atom (closes #26) 2026-07-26 17:28:48 +02:00
Maurus Decimus 846fc88f7e Improve verbosity (closes #4 closes #19) 2026-07-18 11:41:08 +02:00
Maurus Decimus 9fc9178b67 Crypto provider test fixes 2026-07-17 18:53:09 +02:00
Maurus Decimus f35c6fd90a Report which email failed to import when the blob is too large (fixes #22) 2026-07-17 17:16:34 +02:00
Maurus Decimus c572cacb5c Fix: ureq default features pull in an unused crypto provider and CA bundle (closes #23) 2026-07-17 16:03:49 +02:00
Maurus Decimus c13435b8f7 Report user friendly error message when urn:ietf:params:jmap:principals is not supported and no accountId is provided (closes #21) 2026-07-17 15:51:05 +02:00
Maurus Decimus 0f28e9b17e WebDAV import materialised the account root collection as a directory named after the account displayname (fixes #18) 2026-07-12 18:54:43 +02:00
Maurus Decimus ec6b3f9d15 Update CI node version 2026-07-12 16:40:07 +02:00
Maurus Decimus 824166ce54 v1.0.6 2026-07-12 16:27:46 +02:00
Maurus Decimus 7f9e77ae58 Add vCard X-label tests 2026-07-08 11:34:59 +02:00
Maurus Decimus 24dadff463 Mapping existing special mailbox fails after alreadyExists response (fixes #17) 2026-07-07 11:36:47 +02:00
Maurus Decimus ceb8e1815c Self heal on blobNotFound errors when exporting data (closes #13) 2026-06-28 11:11:23 +02:00
Maurus Decimus 6ca561fff5 Fix: Strict RFC822.SIZE == BODY[] length check discards good mail 2026-06-27 12:00:12 +02:00
Maurus Decimus 3e9d4593f7 Use tgz instead of xz (closes #10) 2026-06-24 13:43:40 +02:00
Maurus Decimus 0aaad2fd57 v1.0.4 2026-06-21 19:02:19 +02:00
Maurus Decimus cbcf0a1a84 Fix: Failures are double-counted 2026-06-21 08:42:58 +02:00
Maurus Decimus 4102b5f4ae Include correct JMAP capabilities in using 2026-06-19 11:05:04 +02:00
Maurus Decimus 08c1c5ac84 v1.0.3 2026-06-15 21:32:49 +02:00
Maurus Decimus 76e2860b43 Google takeout: Decode MIME-encoded values in X-Gmail-Labels (fixes #7) 2026-06-15 21:32:26 +02:00
Maurus Decimus c1f3f742fe Mailbox roles must be unique per archive (fixes #8) 2026-06-15 21:28:27 +02:00
Maurus Decimus 48e38f19f3 v1.0.2 2026-06-11 09:19:11 +02:00
Maurus Decimus f263f57c09 EWS fixes - part 3 2026-06-10 22:19:28 +02:00
Maurus Decimus e88e213987 EWS fixes - part 2 2026-06-10 21:27:18 +02:00
Maurus Decimus adbd0276a6 EWS fixes 2026-06-10 20:26:41 +02:00
Maurus Decimus f7371cc2ae Fix MS Exchange EWS: add support for version negotiation and other enhancements (closes #6) 2026-06-10 15:27:39 +02:00
Maurus Decimus 295038d8c0 Fix MS Exchange EWS: add support for version negotiation and other enhancements (closes #6) 2026-06-10 14:19:23 +02:00
Maurus Decimus bf0ef2083b Fix MS Exchange EWS: add support for version negotiation and other enhancements (closes #6) 2026-06-10 11:43:09 +02:00
Maurus Decimus 49f344660a Fix IMAP: Import fails with BAD on servers that advertise LIST-EXTENDED without SPECIAL-USE (closes #5) 2026-06-09 10:15:33 +02:00
Maurus Decimus 8d385751f2 v1.0.1 2026-06-04 20:51:13 +02:00
Maurus Decimus 5197ed6a11 Fix MS Exchange duplicate ids issue 2026-06-04 13:13:02 +02:00