# Выпуск Oleafly

Соберите полный черновик из тега версии, проверьте каждый артефакт платформы, затем опубликуйте через защищённый рабочий процесс выпуска.

Релизы Oleafly проходят два отдельных этапа. Тег версии собирает и проверяет черновик. Мейнтейнер публикует тот же черновик отдельным запуском рабочего процесса.

Отправка изменений в `main` запускает CI, но не создаёт релиз.

## Сборка черновика

Начните с актуальной ветки `main` и зелёным CI.

```sh
git switch main
git pull --ff-only
./scripts/bump-version.sh 0.3.6
git commit -am "chore: release v0.3.6"
git push origin main
git tag v0.3.6
git push origin v0.3.6
```

Тег запускает `.github/workflows/release.yml`. Он собирает эти целевые платформы:

| Платформа | Установщики |
|---|---|
| macOS Apple Silicon | `.dmg` |
| Windows x64 | `.msi` и `-setup.exe` |
| Linux x64 | `.AppImage` и `.deb` |
| Linux ARM64 | `.AppImage` и `.deb` |

Каждая платформа загружает и проверяет свои закреплённые сайдкары компиляторов. Затем рабочий процесс объединяет все четыре фрагмента обновления в один `latest.json`. Черновик считается готовым, только когда присутствуют все требуемые установщики и записи обновления.

## Проверка черновика

Откройте черновик на [странице релизов GitHub](https://github.com/Oleafly/Oleafly/releases). Проверьте примечания к релизу, имена установщиков, контрольные суммы, подписи и `latest.json`. Не публикуйте неполный черновик.

## Публикация

Откройте **Actions → Release → Run workflow**. Введите тот же тег и выберите **Publish the release**.

Запуск публикации повторяет сборку и проверки артефактов. Он также выполняет живые контрактные тесты против Anthropic и Google на релиз-кандидате. Последнее задание отказывается публиковать, если отсутствует хотя бы одна поддерживаемая платформа или полная лента обновления.

Публикация делает `latest.json` видимым для установленных приложений. Относитесь к этому как к необратимому рабочему действию. Если запуск публикации завершился неудачей, оставьте релиз черновиком, устраните причину и запустите его снова.

## Номера версий

Oleafly следует семантическому версионированию:

- **Патч**, например с `0.3.5` до `0.3.6`, для совместимых исправлений.
- **Минорная**, например с `0.3.5` до `0.4.0`, для совместимых функций.
- **Мажорная**, например с `0.3.5` до `1.0.0`, для ломающих изменений или первого стабильного релиза.

## Важные проверки

- Тег должен соответствовать `package.json`, `src-tauri/tauri.conf.json`, `src-tauri/Cargo.toml` и `src-tauri/Cargo.lock`. Используйте `scripts/bump-version.sh` вместо раздельного редактирования.
- Примечания к релизу берутся из раздела соответствующей версии в `CHANGELOG.md`.
- Не используйте опубликованный тег повторно. Для неудачного черновика исправьте ветку и создайте новую версию, если нет явной причины заменить неопубликованный тег.
- Подписывание и нотаризация macOS используют секреты релиза Apple. Windows Authenticode использует Azure Artifact Signing, когда его секреты настроены. Подписи обновления используют отдельный ключ подписывания Tauri.

См. [Автообновления](/docs/engineering/updates/) о подписывании и откате обновлений. Инструкции по установке для пользователей — в разделе [Скачать и установить](/docs/install/).
