0.40.0
Added
- Автообновление приложения через хост
taigaclaw.ru/updates/: - Пакет
internal/updater/— Service, Manifest, Checker, Downloader, Installer, Rollback - Полный цикл: проверка манифеста → Ed25519-подпись → скачивание + SHA256 → атомарная подмена бинарника (через
github.com/minio/selfupdate) → рестарт через supervisor (exit code 11) - Background-проверка обновлений раз в 6 ч, первая через 30 с после старта
- Watchdog первого запуска:
<dataDir>/.update_pendingсоздаётся перед рестартом, удаляется через 30 с после успешного старта новой версии - Persistent-тост о rollback при наличии
<dataDir>/.update_failed - Безопасность:
- HTTPS only для манифеста и бинарников
- SHA256 каждого артефакта
- Ed25519-подпись манифеста, проверка против
PublicKeysизinternal/updater/keys.go - Защита от downgrade (через
semver.Compare) - Pinned URL манифеста — захардкожен в бинарнике, не из БД/конфига
- Лимит размера манифеста (1 MiB), Content-Length-проверка для бинарников
- API:
GET /api/v1/updates/status— снимок состояния (любой авторизованный)POST /api/v1/updates/check— форсированная проверкаPOST /api/v1/updates/install(RequireGlobalAdmin) — установка с защитой от race поversionPOST /api/v1/updates/dismiss-rollback(RequireGlobalAdmin) — удаление флага после показа тоста- WebUI (раздел Settings → Система):
- Карточка «Обновления»: текущая версия, версия на сервере, канал, последняя проверка
- Кнопка «↻ Проверить обновления» — всегда видима
- Карточка «Доступно обновление: X → Y» с release notes и кнопкой «⬇ Обновить»
- Условия enabled-кнопки:
has_update,supervised,auto_update_supported, неin_progress - Прогресс-бар установки (poll
/statusкаждые 2 сек): downloading → verifying → installing → restarting - Confirm-диалог с указанием версии, размера, ссылкой на release notes
- Persistent-тост о rollback с кнопкой «Закрыть»
- Релизный пайплайн:
scripts/genkeys/— генерация Ed25519 ключевой пары (одноразово)scripts/sign/— подписание манифеста приватным ключомscripts/genmanifest/— сборкаstable.json(sha256 + size + url для 6 платформ)bash deploy.sh release [vX.Y.Z]— единая команда:
make build-cross— 6 бинарников- Копирование в
~/Projects/taigaclaw.ru/static/updates/binaries/<version>/ - Symlink
binaries/latest → <version> - Генерация
stable.json+stable.sigвstatic/updates/ - Обновление
hugo.toml(version) иcontent/download.md(HTTP-ссылки) - Запуск
~/Projects/taigaclaw.ru/deploy.sh(Hugo build + rsync на VPS95.163.232.9)
- Юнит-тесты: 14 тестов на manifest parsing, Ed25519 verification, version compare, platform detection, system path heuristics
Changed
cmd/taigaclaw/main.go: инициализацияupdater.Serviceс background-проверкойdeploy.sh: новый режимrelease, не ломает существующие режимы (systemd/launchd/stop/status)- Зависимости: добавлены
github.com/minio/selfupdatev0.6.0,golang.org/x/modv0.36.0
Security
- Приватный ключ Ed25519 хранится в
~/.taigaclaw-updater-key(mode 0600), вне git - Публичный ключ — в исходниках (
internal/updater/keys.go), доступен для аудита - Любые изменения манифеста на хосте без переподписания приватным ключом будут отклонены клиентом