mirror of
https://github.com/by-sonic/tglock.git
synced 2026-09-20 09:28:26 +03:00
101 lines
7.0 KiB
Markdown
101 lines
7.0 KiB
Markdown
# Как выпускать релиз
|
||
|
||
## Подготовка через 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 и выберите новую версию для
|
||
нового тега. Опубликованные теги и бинарные артефакты не заменяйте: пользователи
|
||
должны иметь возможность воспроизвести уже выпущенную версию.
|