# Release Guide
Руководство по выпуску новых версий spath-cli.
## Требования
```bash
# Установить cargo-release
cargo install cargo-release
# Проверить установку
cargo release --version
```
## Команды релиза
### Dry-run (проверка без изменений)
```bash
# Проверить что произойдёт при релизе
cargo release patch --dry-run
cargo release minor --dry-run
cargo release major --dry-run
```
### Patch релиз (0.1.0 → 0.1.1)
Для багфиксов и мелких исправлений:
```bash
cargo release patch
```
### Minor релиз (0.1.0 → 0.2.0)
Для новых функций с обратной совместимостью:
```bash
cargo release minor
```
### Major релиз (0.1.0 → 1.0.0)
Для breaking changes:
```bash
cargo release major
```
### Конкретная версия
```bash
cargo release 0.2.0
cargo release 1.0.0-beta.1
```
## Что происходит при релизе
1. **Проверки** — cargo fmt, clippy, tests
2. **Обновление версии** в:
- `Cargo.toml`
- `installer/spath-installer.nsi`
3. **Обновление CHANGELOG.md** — добавляется дата релиза
4. **Git коммит** — `chore: release X.Y.Z`
5. **Git тег** — `vX.Y.Z`
6. **Push** — коммит и тег в репозиторий
7. **GitHub Actions** — автоматическая сборка и создание релиза
8. **crates.io** — публикация пакета (если включено)
## Ручной релиз (без cargo-release)
```bash
# 1. Обновить версию в Cargo.toml
# version = "0.2.0"
# 2. Обновить версию в installer/spath-installer.nsi
# !define VERSION "0.2.0"
# 3. Обновить CHANGELOG.md
# 4. Коммит
git add .
git commit -m "chore: release 0.2.0"
# 5. Тег
git tag v0.2.0
# 6. Push
git push origin main --tags
```
## Публикация на crates.io
```bash
# Первый раз — авторизация
cargo login cio1cxqGNGhzg1ZDF3djI7mpnYeJeFkBrD3
# Проверка пакета
cargo publish --dry-run
# Публикация
cargo publish
```
## Отмена релиза
```bash
# Удалить локальный тег
git tag -d v0.2.0
# Удалить удалённый тег
git push origin :refs/tags/v0.2.0
# Откатить коммит (если нужно)
git reset --hard HEAD~1
git push --force
```
## Структура версий
| `0.x.y` | Начальная разработка, API нестабилен |
| `1.0.0` | Первый стабильный релиз |
| `x.y.z-alpha` | Альфа версия |
| `x.y.z-beta` | Бета версия |
| `x.y.z-rc.1` | Release candidate |
## Чеклист перед релизом
- [ ] Все тесты проходят: `cargo test`
- [ ] Нет предупреждений clippy: `cargo clippy`
- [ ] Код отформатирован: `cargo fmt --check`
- [ ] CHANGELOG.md обновлён
- [ ] README.md актуален
- [ ] Документация актуальна: `cargo doc`