Files
tglock/docs/RELEASING.md
T
Никита Sonic 05ce9566a8 fix: маршруты, медиа и Worker; Android APK и статический ARM64 CLI (#60)
* fix: address routing, media, worker and platform issues

* ci: use available Android tools and verify Windows CLI artifact

* fix(gui): return a result from asynchronous stop command

* test(android): verify installed APK and proxy lifecycle on emulator

* fix(media): use native MTProto for CDN203 and retain recent diagnostics

* Fix owned WebSocket split after transport boxing

* Clarify CDN transport and connection status guarantees

* Recognize accessible Android power button labels

* chore(release): prepare 2.0.0-beta.15 with verified draft publication

---------

Co-authored-by: babin <Thartewerner536e@engineer.com>
2026-09-19 16:04:39 +03:00

101 lines
7.0 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Как выпускать релиз
## Подготовка через 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. Убедиться, что выбранная версия и тег ещё не существуют, затем поставить
аннотированный тег на этот коммит:
```bash
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](ANDROID.md).
Пример проверки скачанного macOS-бандла:
```bash
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](LIVE_PROBE.md). Зафиксируйте, какие платформы
исполнены локально, а какие проверены CI. Секрет локального прокси в заметки и
публичные артефакты не включается.
Когда набор файлов полон, подписи/контрольные суммы и версии сверены, а release
notes готовы, опубликуйте draft. Например:
```bash
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`: он может относиться и к правам токена.
```bash
git ls-remote origin refs/heads/main 'refs/tags/vX.Y.Z^{}'
```
Если это ошибка инфраструктуры, повторите упавшие jobs на том же коммите.
Если нужна правка исходников, внесите её через PR и выберите новую версию для
нового тега. Опубликованные теги и бинарные артефакты не заменяйте: пользователи
должны иметь возможность воспроизвести уже выпущенную версию.