# PAPA YU — сборка DMG и обновления

## Единые пути и связи

| Назначение | Значение |
|------------|----------|
| Репозиторий | `https://github.com/yrippert-maker/papayu` |
| Обновления (endpoint) | `https://github.com/yrippert-maker/papayu/releases/latest/download/latest.json` |
| Установка приложения (macOS) | `/Applications/PAPA YU.app` (рекомендуется) |
| Данные приложения | Системная папка приложения (Tauri `app_data_dir`) — не зависит от $HOME |
| Логотип в проекте | `desktop/src-tauri/icons/icon_source.png`, `desktop/ui/public/logo-papa-yu.png` |
| Путь проекта при сборке | Задаётся переменной `PAPAYU_PROJECT_ROOT`; по умолчанию `$HOME/PAPA-YU` |

Конфиг: `desktop/src-tauri/tauri.conf.json` (пути сборки, `plugins.updater.endpoints`). Чтобы сборка работала из другого каталога, задайте `export PAPAYU_PROJECT_ROOT=/путь/к/PAPA-YU` перед `cargo tauri dev` или `cargo tauri build`.

---

## Сборка DMG (один запускающий файл)

Из корня проекта (или из `desktop/src-tauri`):

```bash
cd ~/PAPA-YU/desktop/src-tauri
cargo tauri build
```

Результат на macOS:
- **.app:** `desktop/src-tauri/target/release/bundle/macos/PAPA YU.app`
- **.dmg:** `desktop/src-tauri/target/release/bundle/dmg/` (если targets включают dmg)

Только DMG:

```bash
cargo tauri build --bundles dmg
```

Пользователь открывает DMG → перетаскивает «PAPA YU» в «Программы» → запускает приложение. Дальнейшие изменения — через кнопку обновления в приложении.

---

## Кнопка обновления (новый логотип)

В интерфейсе рядом с логотипом PAPA YU есть кнопка с иконкой логотипа и стрелкой загрузки. По нажатию:
1. Проверяется наличие новой версии по GitHub Releases.
2. При наличии — скачивание и установка, затем перезапуск приложения.

Единая точка входа для обновлений — эта кнопка; пути и URL заданы в конфиге.

---

## Подписание обновлений (обязательно для updater)

**Ключи (публичный и приватный) вы получаете из команды генерации, указанной ниже.** Публичный ключ вставляется в конфиг; приватный — хранится локально и в GitHub Secrets для подписи релизов.

---

### Как сгенерировать ключи

**Один блок команд** (выполните в **терминале** — команда запросит пароль для защиты ключа; можно нажать Enter для пустого пароля):

```bash
mkdir -p ~/.tauri
cd ~/PAPA-YU/desktop/src-tauri
cargo tauri signer generate -w ~/.tauri/papayu.key
```

В проекте нет Tauri CLI в npm, поэтому используется **`cargo tauri signer generate`** из каталога `desktop/src-tauri` (нужен установленный Rust и Cargo). При запросе пароля введите свой или нажмите Enter для пустого пароля.

После выполнения в консоль будет выведен **публичный ключ** — скопируйте его целиком для шага «Вставить публичный ключ» ниже. Приватный ключ сохранится в `~/.tauri/papayu.key`.

---

**По шагам:**

1. **Создайте каталог для ключа** (опционально):
   ```bash
   mkdir -p ~/.tauri
   ```

2. **Перейдите в каталог Tauri и запустите генерацию ключей** (обязательно в **интерактивном терминале** — команда запросит пароль):
   ```bash
   cd ~/PAPA-YU/desktop/src-tauri
   cargo tauri signer generate -w ~/.tauri/papayu.key
   ```
   Флаг `-w` (или `--write-keys`) задаёт файл, **куда будет записан приватный ключ**. Путь `~/.tauri/papayu.key` — пример; можно использовать свой (например `./papayu.key` в репозитории, но тогда не коммитьте этот файл).

3. **Результат команды:**
   - В консоль выведется **публичный ключ** — длинная строка, обычно начинается с `dW50cnVzdGVk...` или похожего (base64).
   - **Приватный ключ** сохраняется в файл, указанный в `-w` (например `~/.tauri/papayu.key`). Этот файл никому не передавайте и не добавляйте в репозиторий.

4. **Куда подставить ключи:**
   - **Публичный ключ** — в `desktop/src-tauri/tauri.conf.json` в блоке `plugins.updater.pubkey` (замените заглушку `REPLACE_WITH_PUBLIC_KEY_AFTER_tauri_signer_generate` на выведенную строку целиком).
   - **Приватный ключ** — для локальной подписи передаётся через переменную окружения `TAURI_SIGNING_PRIVATE_KEY` или через файл `-w`. Для GitHub Actions добавьте содержимое файла `~/.tauri/papayu.key` в секрет репозитория с именем `TAURI_SIGNING_PRIVATE_KEY`.

**Проверка:** после подстановки публичного ключа в конфиг пересоберите приложение и опубликуйте релиз с подписью; кнопка «Проверить обновления» в приложении должна перестать выдавать ошибку подписи.

---

Обновления должны быть подписаны. Один раз:

1. Сгенерировать ключи (см. раздел «Как сгенерировать ключи» выше).

2. Вставить публичный ключ в `desktop/src-tauri/tauri.conf.json`:
   ```json
   "plugins": {
     "updater": {
       "endpoints": ["https://github.com/yrippert-maker/papayu/releases/latest/download/latest.json"],
       "pubkey": "ВАШ_ПУБЛИЧНЫЙ_КЛЮЧ"
     }
   }
   ```
   Сейчас в конфиге стоит заглушка `REPLACE_WITH_PUBLIC_KEY_AFTER_tauri_signer_generate` — замените на ключ из шага 1.

3. При сборке релиза подписывать артефакты приватным ключом (переменная `TAURI_SIGNING_PRIVATE_KEY` или `-w ~/.tauri/papayu.key`). Для GitHub Releases можно использовать [tauri-action](https://github.com/tauri-apps/tauri-action) с опцией подписания и публикации `latest.json`.

После этого кнопка обновления будет работать с единым endpoint и путями, заданными выше.
