# RELEASE.md — Процесс релиза

Единственный источник истины для процесса релиза этого плагина. Если инструкция в другом файле (README.md, CLAUDE.md) расходится с этим файлом — верен этот файл.

## Ключевые факты

- Основная ветка репозитория — **`master`**. Ветки `main` в репозитории нет — не ориентироваться на неё.
- Деплой на WordPress.org выполняет GitHub Action [`.github/workflows/main.yml`](.github/workflows/main.yml), который триггерится на **push git-тега** (`tags: ["*"]`).
- Action использует [`10up/action-wordpress-plugin-deploy`](https://github.com/10up/action-wordpress-plugin-deploy) со `SLUG: helper-lite-for-pagespeed` и секреты `SVN_USERNAME` / `SVN_PASSWORD`.
- `Version` в шапке `helper-lite-for-pagespeed.php` и `Stable tag` в `readme.txt` должны всегда совпадать и обновляться вместе.

## Триггер для Claude Code

Команда пользователя вида:

> Задеплой версию 3.3.0

## Пошаговый процесс

1. **Подготовить изменения релиза**, если ещё не сделаны, в текущей рабочей ветке Claude Code (например `claude/...`):
   - обновить `Version` в шапке `helper-lite-for-pagespeed.php` (и константу `HLFP_VERSION` там же);
   - обновить `Stable tag` в `readme.txt`;
   - добавить запись в `readme.txt` `== Changelog ==`.
2. **Создать ветку с именем версии** (например, `3.3.0`) **от текущей рабочей ветки Claude Code**, а не от `master` напрямую — `master` не содержит ещё не смерженных наработок.
3. **Запушить** ветку версии в `origin`.
4. **Открыть Pull Request** из ветки версии в `master`.
5. **Смержить PR в `master`** (merge commit, как и в предыдущих релизах репозитория).
6. **Создать git-тег**, совпадающий с номером версии, на актуальном `master` (после мержа). Claude может это сделать (`git tag <version> origin/master`).
7. **Запушить тег** в `origin`. ⚠️ **Claude не может это сделать сам** — окружение Claude Code блокирует push git-тегов (`git push origin tag <version>` возвращает `HTTP 403`), это тот же класс ограничений, что и запрет удаления веток. Push тега должен выполнить пользователь вручную:
   - `git push origin <version>`, либо
   - через веб-интерфейс GitHub: репозиторий → вкладка **Releases** → **Draft a new release** → в поле **Choose a tag** ввести номер версии, **Target** — `master` → **Publish release**.
8. После того как пользователь подтвердит, что тег запушен, проверить статус запуска Action (вкладка **Actions** на GitHub) и сообщить результат пользователю.

## Точки отката

- **До мержа PR**: закрыть PR — ничего не опубликовано, откат тривиален.
- **После мержа, до пуша тега**: откатить merge-коммит в `master` — WordPress.org ещё не тронут.
- **После пуша тега**: деплой уже запущен/выполнен — откат требует либо нового патч-релиза, либо ручного вмешательства в SVN. Push тега — необратимое действие.

## Важно

- Тег должен быть числовым/семантическим и совпадать со `Stable tag` из `readme.txt` — иначе версия на WordPress.org может не обновиться корректно.
- Повторное создание уже использованного тега не переиздаёт релиз автоматически.
- Секреты `SVN_USERNAME` / `SVN_PASSWORD` должны быть действующими учётными данными аккаунта WordPress.org с доступом к SVN-репозиторию плагина.
