This commit is contained in:
Ivan Fontosh
2026-05-17 21:55:52 +08:00
parent 7c858ba633
commit 6204359330
5 changed files with 56 additions and 158 deletions
+33 -32
View File
@@ -1,52 +1,53 @@
# Автообновления TTRPG Player
## Текущее состояние (фаза 1)
## Сборка и публикация
- Продукт переименован в **TTRPG Player** / **НРИ Плеер** (`productName`: `TTRPGPlayer`, `appId`: `com.ttrpgplayer.app`).
- CI по тегу `v*` **только собирает** установщики в каталог `release/` (Win NSIS, Linux AppImage x64/arm64). Пуш в Git-репозиторий **`DndGamePlayerUpdates`** **отключён**; скрипт `scripts/sync-update-feed.mjs` удалён.
- В `package.json``build.publish.url` стоит заглушка `https://updates.invalid.ttrpg/` до настройки реального хоста.
- Секреты **`DND_UPDATE_FEED_URL`**, **`DND_UPDATES_SERVER`**, **`UPDATES_REPO`**, **`DND_UPDATES_PUSH_TOKEN`** в workflow **больше не используются** — их можно удалить из настроек репозитория.
- Публичный репозиторий **`DndGamePlayerUpdates` на Gitea можно удалить** (история с бинарниками ~4 GiB больше не нужна).
- Релизы собираются **локально** (без CI в Gitea).
- Файлы для выкладки кладутся в одну папку на Windows, затем заливаются на VPS (вручную `scp` или утилита **TTRPG Release Publisher** — в разработке).
- **Имена файлов без версии** — версия только в `latest*.yml`.
Клиент по-прежнему использует **electron-updater** (generic provider). Пока URL заглушка, проверка обновлений в установленной сборке завершится ошибкой сети — это ожидаемо до фазы 2.
## URL feed
## Фаза 2 (план): статический VPS
В `package.json``build.publish.url` должен быть реальный HTTPS-origin со **слэшем в конце**, например:
Цель: один HTTPS- origin без Git LFS и без роста репозитория.
`https://updates.mailib.ru/`
1. VPS с **nginx** (или аналог), TLS (Let's Encrypt).
2. Каталог, например `/var/www/ttrpg-updates/`, с **фиксированными именами** файлов (без версии в имени установщика) или с semver в `latest*.yml` и прямыми URL на те же имена.
3. CI или ручной шаг: **rsync/scp** артефактов из `release/` на сервер после тега `v*`.
4. В приватном репозитории кода — секрет **`TTRPG_UPDATE_FEED_URL`** (со слэшем в конце), подстановка в `electron-builder` при сборке релиза.
5. Mac: ручная выкладка `.dmg` / `latest-mac.yml` на тот же origin (см. `docs/MANUAL_MAC_UPDATE_UPLOAD.md`).
Пока стоит заглушка `https://updates.invalid.ttrpg/` — автообновление в установленной сборке не заработает, пока не соберёте релиз с правильным URL.
Детали CI для VPS будут добавлены отдельным PR после выбора хоста и схемы имён файлов.
## Фиксированные имена артефактов
## Локальная сборка релиза
| Платформа | Файлы |
|-----------|--------|
| Windows | `latest.yml`, `TTRPGPlayer-Setup.exe`, `TTRPGPlayer-Setup.exe.blockmap` |
| Linux | `latest-linux.yml`, `TTRPGPlayer-x64.AppImage`, `TTRPGPlayer-arm64.AppImage` |
| macOS | `latest-mac.yml`, `TTRPGPlayer-x64.dmg`, `TTRPGPlayer-arm64.dmg` (при двух архитектурах) |
Номер версии (`1.0.16`) — в поле `version` внутри `latest*.yml`, не в имени файла.
## Локальная сборка
```bash
npm run pack # Win (на Windows) или см. CI
npm run pack:linux # Linux AppImage
npm run pack:mac # macOS (на Mac)
npm run release:info # версия и пример тега vX.Y.Z
npm ci
npm run build
npm run release:info # версия и пример тега vX.Y.Z (тег опционален, для git)
```
Артефакты: `TTRPGPlayer-Setup-<version>.exe`, `TTRPGPlayer-<version>-<arch>.AppImage`, и т.д. (см. `package.json``build`).
| Команда | Где запускать | Результат |
|---------|---------------|-----------|
| `npm run pack:win` | Windows | `release/` — Win + `latest.yml` |
| `npm run pack:linux` | Linux или WSL с зависимостями | `release/` — AppImage x64/arm64 + `latest-linux.yml` |
| `npm run pack:mac` | macOS | `release/` — dmg + `latest-mac.yml` |
## Gitea Actions (act_runner)
Скопируйте нужные файлы из `release/` в папку публикации (например `D:\TTRPG-Release\`).
- Workflow: `.gitea/workflows/release.yml`
- Триггер: push тега `v*`
- Runner label: `ubuntu-22.04` (как в настройках раннера)
## Сервер обновлений
Если job падает на Wine/NSIS — см. комментарии в workflow (сборка Win на Linux без i386).
Статический VPS (nginx + HTTPS), каталог `/var/www/ttrpg-updates/`. Подробная пошаговая настройка — в переписке / отдельной инструкции для `updates.mailib.ru`.
## Лицензия и обновления
## Лицензия
Проверка обновлений доступна только при **активной лицензии** (как и раньше). Продуктовые ключи на клиенте: **`TTRPG-…`** и устаревшие **`DND-…`**; новые ключи выдаёт сервер лицензий (отдельный репозиторий `DndGamePlayerLicenseServer` — смена префикса на сервере вне этого PR).
Проверка обновлений только при активной лицензии. Ключи на клиенте: `TTRPG-…` и устаревшие `DND-…`.
## Устаревшая схема (не использовать)
## Устаревшая схема
Раньше артефакты пушились в публичный Git **`DndGamePlayerUpdates`**, ветка `updates`, URL вида
`https://git.mailib.ru/.../DndGamePlayerUpdates/raw/branch/updates/`.
Эта схема приводила к раздуванию репозитория, конфликтам merge, ENOSPC на раннере и HTTP 500 при `git push`. Она **снята с поддержки**.
Git-репозиторий **`DndGamePlayerUpdates`** и CI-пуш артефактов **не используются**.