C12.0: ElyMail backend moves to Rust crates; iCloud by app password

async-imap, async-pop, mail-send, mail-parser and mail-builder replace
MailCore 2. The MailCore 2 and libetpan fetch, build and probe scripts
go. HTML bodies render as a sanitized block subset in GPUI; compose uses
the Markdown document component. OAuth client IDs come from oauth.env
(ignored) or CI secrets. The task list for C12 is rewritten in order.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
This commit is contained in:
ZacharyZhang-NYandClaude Opus 5.5 committed 2026-10-19 16:02:34 -04:00
1 parent 0d991e1c71
commit d7de5619a7
11 files changed
+52 -150

No files matched your search

-37
View File
@@ -1,37 +0,0 @@
#!/usr/bin/env bash
# build-libetpan.sh rebuilds stale caches and shows build errors.
set -euo pipefail
root=$(cd "$(dirname "$0")/../.." && pwd)
src=$root/reference/libetpan
[ -d "$src/.git" ] || { echo "SKIP build-libetpan: reference/libetpan is not checked out"; exit 0; }
work=$(mktemp -d)
trap 'rm -rf "$work"' EXIT
fail() {
echo "FAIL: $*" >&2
exit 1
}
mkdir -p "$work/scripts" "$work/engines/libetpan/lib" "$work/reference" "$work/tests/engines"
cp "$root/scripts/build-libetpan.sh" "$work/scripts/"
cp "$root/tests/engines/libetpan.sh" "$work/tests/engines/"
ln -s "$src" "$work/reference/libetpan"
git -C "$src" rev-parse HEAD >"$work/engines/libetpan/PIN"
touch "$work/engines/libetpan/lib/libetpan.a"
: >"$work/engines/libetpan/BUILD-config.h"
if OPENSSL_DIR=/nonexistent "$work/scripts/build-libetpan.sh" >"$work/out" 2>&1; then
fail "a cached build without TLS was reused"
fi
grep -q "no OpenSSL headers under /nonexistent" "$work/out" || fail "the OpenSSL error was not shown"
if OPENSSL_DIR=/nonexistent "$work/tests/engines/libetpan.sh" >"$work/out" 2>&1; then
fail "the probe passed on a TLS-less cached build"
fi
grep -q "no OpenSSL headers under /nonexistent" "$work/out" || fail "the probe hid the build error"
printf '#define HAVE_OPENSSL 1\n#define HAVE_JSON 1\n' >"$work/engines/libetpan/BUILD-config.h"
OPENSSL_DIR=/nonexistent "$work/scripts/build-libetpan.sh" >"$work/out" 2>&1 || fail "a valid cache was not reused"
grep -q "^ok libetpan" "$work/out" || fail "a valid cache did not print ok"
echo "build-libetpan: stale caches are rebuilt, errors reach stderr, valid caches are reused"
+6 -11
View File
@@ -4,7 +4,7 @@ set -euo pipefail
root=$(cd "$(dirname "$0")/../.." && pwd)
script=$root/scripts/fetch-references.sh
names="Ely-GPUI-Components zed libreoffice-core mupdf git tesseract mailcore2 libetpan marktext colamd magpie agent-client-protocol markion markdown-rs omarchy"
names="Ely-GPUI-Components zed libreoffice-core mupdf git tesseract marktext colamd magpie agent-client-protocol markion markdown-rs omarchy"
fail() {
echo "FAIL: $*" >&2
@@ -26,10 +26,7 @@ for header in \
libreoffice-core/include/LibreOfficeKit/LibreOfficeKit.h \
mupdf/include/mupdf/fitz.h \
mupdf/thirdparty/freetype/include/freetype/freetype.h \
tesseract/include/tesseract/capi.h \
mailcore2/CMakeLists.txt \
libetpan/src/low-level/gmail/mailgmail.h \
libetpan/src/low-level/activesync/mailactivesync.h; do
tesseract/include/tesseract/capi.h; do
[ -s "$root/reference/$header" ] || fail "missing reference/$header"
done
@@ -37,12 +34,10 @@ want=$(printf '%s\n' desktop/inc desktop/source/lib include/LibreOfficeKit libre
have=$(git -C "$root/reference/libreoffice-core" sparse-checkout list | sort)
[ "$have" = "$want" ] || fail "libreoffice-core sparse set differs: $have"
for name in mupdf mailcore2; do
status=$(git -C "$root/reference/$name" submodule status --recursive)
[ -n "$status" ] || fail "$name lists no submodules"
bad=$(grep '^[-+U]' <<<"$status" || true)
[ -z "$bad" ] || fail "$name submodules off their pins: $bad"
done
status=$(git -C "$root/reference/mupdf" submodule status --recursive)
[ -n "$status" ] || fail "mupdf lists no submodules"
bad=$(grep '^[-+U]' <<<"$status" || true)
[ -z "$bad" ] || fail "mupdf submodules off their pins: $bad"
grep -q "rev = \"$(pin_of Ely-GPUI-Components)\"" "$root/Cargo.toml" ||
fail "the component library pin differs from the workspace's"