сообщения больше не выполняется полный scan/rewrite архива для expiry. Очистка остаётся в maintenance и перед MAM-запросами; append и crash checkpoint до fanout сохранены. - Неизменённые native config/persistent index не перезаписываются при каждом сообщении. Удалённые файлы восстанавливаются, ошибки экспорта повторяются. - CSI больше не сохраняет SM snapshot при отсутствии изменения durable очереди. Изменённая очередь сохраняется до отправки; при ошибке записи очередь откатывается. - Личные сообщения, IQ и входящая федерация к аккаунтам больше не захватывают общий MUC mutex, ожидая несвязанную работу с комнатными архивами. - Добавлены регрессии native exports/archive scanning/CSI rollback и реальный TLS latency check в verify-local.sh, автоматически включённый и в CI. Измерения и границы подтверждения: [docs/MESSAGE-LATENCY.md](docs/MESSAGE-LATENCY.md). Результаты итогового прогона: [docs/VALIDATION-0.8.1.md](docs/VALIDATION-0.8.1.md). - Личные сообщения и SM ACK больше не ждут сетевую отправку push. Уведомления отправляются через очередь1024 с максимум8параллельных маршрутов; worker и его задачи отменяются при завершении serve. Ошибки очереди/маршрута логируются. - Offline сообщение сохраняется до публикации push, чтобы проснувшийся клиент мог сразу получить его. Подтверждена очередь при первом TLS stream push gateway. - По умолчанию CSI считает важными bodyless OMEMO legacy/2, delivery receipts и chat markers. Явный список `csi_important_payloads` заменяет расширенные defaults. Низкоприоритетный headline по-прежнему буферизуется. Policy обновляется и при SM resume. - Выбор адресатов и carbons фильтрует владельцев до захвата session mutex; зависшая сессия чужого аккаунта не задерживает этот путь. Duplicate SM ACK без изменения durable counters/queue не переписывает snapshot. - Bind2 и MAM metadata IQ читают только первый/последний native record вместо сканирования всей истории. Индекс не требуется; recovery/лимиты записи сохранены. - Добавлен `message-processing-slow`: обработка message дольше250мс, поля duration_ms/route, без payload/токенов. Это время обработки сервером, не peer receipt. - Новые сетевые регрессии включены в verify-local.sh/GitHub CI. Причины, изменение CSI policy, измерения и ограничения: [docs/PERSONAL-MESSAGE-LATENCY.md](docs/PERSONAL-MESSAGE-LATENCY.md).
67 lines
4.7 KiB
Markdown
67 lines
4.7 KiB
Markdown
# GitHub Actions → private Gitea Registry
|
||
|
||
Workflow: `.github/workflows/ci.yml`. Push, pull request и ручной запуск выполняют
|
||
проверки; публикация разрешена только для основной ветки репозитория и тегов
|
||
`v<версия Cargo.toml>`. PR, включая PR из forks, не получает registry credentials.
|
||
|
||
## Настройка GitHub
|
||
|
||
Settings → Secrets and variables → Actions:
|
||
|
||
| Тип | Имя | Значение |
|
||
|---|---|---|
|
||
| Variable | `GITEA_REGISTRY` | `gitea.example.org` или `gitea.example.org:5000`, без `https://` и пути |
|
||
| Variable | `GITEA_IMAGE` | `owner/rust-xmpp`, lowercase, без registry и тега |
|
||
| Secret | `GITEA_REGISTRY_USERNAME` | Имя пользователя Gitea с правом публикации пакетов owner |
|
||
| Secret | `GITEA_REGISTRY_TOKEN` | Personal access token с правом записи packages |
|
||
|
||
Создайте private owner/organization и проверьте права чтения пакета в Gitea:
|
||
аутентифицированный push сам по себе не меняет публичность owner/package.
|
||
Registry должен быть доступен GitHub-hosted runner по HTTPS с доверенным CA.
|
||
Для registry только в LAN потребуется runner с доступом к этой сети; настройки
|
||
runs-on для image job можно заменить на labels доверенного self-hosted runner.
|
||
Не запускайте PR-код на привилегированном self-hosted runner без изоляции.
|
||
|
||
## Проверки и результат
|
||
|
||
Job `verify` на Ubuntu24.04 ставит Rust из `rust-toolchain.toml`, Python3.12,
|
||
Lua5.4, OpenSSL/ICU и собирает оригинальную bundled Prosody cafd74b9c5ea.
|
||
MinIO собирается из unmodified upstream RELEASE.2025-04-22T22-12-26Z,
|
||
Go1.24.3, с проверкой SHA-256 исходного архива. Sandbox adapter не применяется.
|
||
|
||
`scripts/ci/verify-all.sh` запускает:
|
||
|
||
- fmt, все обычные Rust tests, Clippy и release build;
|
||
- все сетевые проверки из verify-local.sh, native module/storage и federation;
|
||
- обе нагрузки500TLS, в том числе MUC+SM SIGKILL/resume;
|
||
- оставшиеся ignored tests: AF_UNIX admin socket и archive>128MiB;
|
||
- реальные10GiB PUT/GET через MinIO и через local HTTPS backend, последовательно.
|
||
|
||
Таким образом отсутствие native reference или MinIO является ошибкой, а не skip.
|
||
Нужно не менее20GiB свободного диска перед проверками. На одноразовом hosted runner
|
||
удаляются неиспользуемые Android/.NET/GHC SDK; Go caches очищаются после сборки MinIO.
|
||
Тесты могут занимать десятки минут. Timeout verify job —90минут.
|
||
|
||
Artifact `rust-xmpp-linux-amd64`: проверенный release executable и SHA256SUMS.
|
||
Artifact `test-results`: полный лог и JSON-отчёты, также при ошибке теста.
|
||
Job `image` скачивает именно этот executable, проверяет checksum и собирает
|
||
Docker target `ci-runtime`. В образе выполняются `rust-xmpp --version` и
|
||
`prosodyctl --version`, затем извлечённый executable сравнивается побайтно с artifact.
|
||
Image smoke проходит и на PR. Только после успеха выполняются login/push.
|
||
|
||
Теги:
|
||
|
||
- `sha-<полный40символьныйcommit>` — каждый публикуемый commit;
|
||
- `latest` — только основная ветка;
|
||
- `v0.8.2` — пример version tag; он должен совпадать с Cargo.toml.
|
||
|
||
Version tag не меняет latest; prerelease также не перезаписывает latest.
|
||
Собирается Linux amd64, не multiarch. Локальный `docker build .` по-прежнему
|
||
собирает source target `runtime`; CI target использует уже проверенный binary.
|
||
|
||
Workflow добавлен и проверен локально как конфигурация. Реальный GitHub-run,
|
||
Docker daemon и push в ваш Gitea здесь не выполнялись; для этого нужны репозиторий
|
||
и перечисленные настройки. CI намеренно останавливает публикацию при любой ошибке.
|
||
|
||
Документация registry: https://docs.gitea.com/usage/packages/container/
|