Files
tglock/docs/RELEASING.md
T

7.0 KiB
Raw Blame History

Как выпускать релиз

Подготовка через PR

  1. Поднять версию согласованно в шести файлах:
    • Cargo.toml — версия пакета tglock;
    • Cargo.lock — версия только пакета tglock, без обновления зависимостей;
    • tauri.conf.json — версия приложения и имён установщиков;
    • package.json — версия frontend-пакета;
    • package-lock.json — верхняя версия и packages[""].version;
    • ui/main.ts — версия копируемого диагностического отчёта.
  2. Подготовить описание изменений и проверок, отдельно указав экспериментальные платформы и непроверенные сценарии. Android получает versionName/versionCode из конфигурации Tauri при сборке; сгенерированный tauri.properties не коммитится.
  3. Проверить финальные изменения PR и слить его в main с соблюдением обязательных проверок ветки. Дождаться зелёных проверок и Android workflow на итоговом HEAD main до создания тега. APK предыдущего PR-коммита не заменяет артефакт этого коммита: headSha Android run должен совпадать с коммитом будущего тега.

Тег и сборка

Release workflow этого репозитория допускает тег только на текущем HEAD ветки по умолчанию. Guard сохраняет прежнюю защиту от выпуска другого коммита: ранее расхождение тега и main сопровождалось ошибкой публикации Resource not accessible by integration.

  1. Сверить git ls-remote origin refs/heads/main и локальный git rev-parse HEAD после перехода на финальный коммит main.

  2. Убедиться, что выбранная версия и тег ещё не существуют, затем поставить аннотированный тег на этот коммит:

    git tag -a v2.0.0-beta.N -m "TGLock 2.0.0-beta.N"
    git push origin v2.0.0-beta.N
    
  3. Пока релиз собирается, не добавлять коммиты в main. Guard проверяет HEAD в начале работы и не устраняет гонку после проверки.

  4. Дождаться всех jobs Release. Workflow создаёт draft и сохраняет его черновиком при загрузке GUI, CLI и ARM64. Частично загруженный выпуск не должен становиться общедоступным до проверок.

Ручной workflow_dispatch запускайте на релизном теге, а не на ветке: часть загрузчиков использует github.ref_name как имя релиза.

Проверка артефактов и публикация

Зелёный workflow сам по себе недостаточен. В бетах 2 и 3 в GUI-бандл попадал headless-бинарь, поэтому проверяются содержимое и происхождение:

  • Windows: GUI .exe и tglock-cli-x86_64-pc-windows-msvc.exe.
  • macOS: универсальные .dmg, .app.tar.gz и CLI.
  • Linux x64: .AppImage, .deb и CLI.
  • ARM64 Linux: tglock-cli-aarch64-unknown-linux-musl и его .sha256; workflow проверяет ELF без динамических зависимостей и запуск бинаря.
  • Android: скачать ARM64 debug APK из успешного Android run с headSha, совпадающим с коммитом тега. Сохранить имя с версией и явной пометкой android-arm64-debug, прикрепить APK к тому же draft. Указать экспериментальный статус и ограничения debug-подписи из ANDROID.md.

Пример проверки скачанного macOS-бандла:

gh release download vX.Y.Z --repo by-sonic/tglock -p 'TGLock_universal.app.tar.gz' -D /tmp/check
tar -xzf /tmp/check/TGLock_universal.app.tar.gz -C /tmp/check
python scripts/verify_bundle_binary.py /tmp/check/TGLock.app/Contents/MacOS/tglock

Проверьте версию скачанного CLI и хотя бы один реальный протокольный обмен через него по LIVE_PROBE.md. Зафиксируйте, какие платформы исполнены локально, а какие проверены CI. Секрет локального прокси в заметки и публичные артефакты не включается.

Когда набор файлов полон, подписи/контрольные суммы и версии сверены, а release notes готовы, опубликуйте draft. Например:

gh release edit vX.Y.Z --repo by-sonic/tglock --draft=false --notes-file release-notes.md

Исторически v2.0.0-beta.* в этом репозитории публикуются с prerelease=false; workflow сохраняет эту настройку. После публикации проверьте публичную страницу релиза, ссылки скачивания и список файлов. Краткий пост об обновлении должен ссылаться на опубликованный релиз и отделять проверенные исправления от экспериментальных платформ.

Если сборка или публикация упала

Сначала прочитайте ошибку и сверяйте коммит тега, main, workflow run и версии. Не делайте вывод о причине только из текста Resource not accessible by integration: он может относиться и к правам токена.

git ls-remote origin refs/heads/main 'refs/tags/vX.Y.Z^{}'

Если это ошибка инфраструктуры, повторите упавшие jobs на том же коммите. Если нужна правка исходников, внесите её через PR и выберите новую версию для нового тега. Опубликованные теги и бинарные артефакты не заменяйте: пользователи должны иметь возможность воспроизвести уже выпущенную версию.