food-market/docs/release-checklist.md
nns 99c1f1b780 docs: чек-лист релиза (P0-9)
Пред/во время/после выкатки: предусловия (.env/issuer/сертификаты/бэкап-таймер),
тесты+миграции перед релизом, бэкап, деплой через CI, smoke после (health/ready,
логин, ключевые потоки, permission 403, rate-limit 429), откат, прод. Ссылается на
secrets.md / backup-restore.md / openiddict-keys.md / stage-setup.md.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-27 02:52:16 +05:00

57 lines
4.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Чек-лист релиза food-market
Практический список перед/во время/после выкатки. Деплой автоматизирован
(push в `main` → GitHub Actions: CI → образы → deploy stage; см. [stage-setup.md](stage-setup.md)).
Прод — после подтверждения на stage.
## 0. Предусловия (один раз на окружение)
- [ ] `deploy/.env` заполнен из `deploy/.env.example`, права `600` (см. [secrets.md](secrets.md)).
- [ ] `POSTGRES_PASSWORD` — не дефолтный.
- [ ] `OPENIDDICT_ISSUER` = публичный URL админки (за прокси обязателен).
- [ ] OpenIddict-сертификаты на месте или генерируются self-signed (см. [openiddict-keys.md](openiddict-keys.md)).
- [ ] Таймер бэкапа установлен и активен: `systemctl list-timers food-market-backup.timer` (см. [backup-restore.md](backup-restore.md)).
- [ ] HTTPS на nginx-проксе настроен (вне этого репо).
## 1. Перед релизом (на ветке/в PR)
- [ ] `dotnet build` зелёный (api + зависимости; POS на Linux не собирается — это норма).
- [ ] Юнит-тесты зелёные: `dotnet test tests/food-market.UnitTests`.
- [ ] Интеграционные тесты зелёные: `dotnet test tests/food-market.IntegrationTests` (нужен Docker для Testcontainers).
- [ ] Релевантные e2e-сценарии зелёные (`tests/e2e/run.sh <name>`).
- [ ] Новые EF-миграции просмотрены: идемпотентны, без потери данных, при ручном написании — `[Migration("ID")]` + `[DbContext]` (иначе `Migrate()` не подхватит).
- [ ] Изменения секретов/конфигов отражены в `.env.example` и `secrets.md`.
- [ ] CHANGELOG/release notes обновлены (если ведутся).
## 2. Бэкап перед выкаткой
- [ ] Свежий бэкап БД: `sudo systemctl start food-market-backup.service` → проверить файл в `FM_BACKUP_DIR`.
- [ ] Проверить, что дамп валиден: `pg_restore --list` (см. [backup-restore.md](backup-restore.md)).
## 3. Релиз
- [ ] Смёрджить в `main` (или прогнать `deploy-stage.yml`). CI соберёт образы и задеплоит на stage.
- [ ] Дождаться Telegram-уведомления «Deploy stage OK».
- [ ] Миграции применяются автоматически на старте API (`Migrate()`), отдельный шаг не нужен.
## 4. После выкатки (smoke)
- [ ] `curl -fsS https://<host>/health/ready``200 Healthy` (БД + миграции).
- [ ] `curl https://<host>/health/live``200`.
- [ ] Логин: получить токен на `/connect/token`, `/api/me``200` с ожидаемыми claim'ами и `org_id`.
- [ ] Ключевые потоки: создать товар, провести приёмку, провести розничную продажу — без ошибок.
- [ ] Permission-гейт работает: пользователь без права получает `403` (не `500`/`200`).
- [ ] Антибрутфорс: >5 логинов/мин с одного IP → `429`.
- [ ] Логи без необработанных исключений: `docker logs food-market-api | tail`.
## 5. Откат (если что-то не так)
- [ ] Откатить теги образов: задать прежние `API_TAG`/`WEB_TAG` в `.env`, `docker compose up -d`.
- [ ] Если миграция повредила данные — восстановить БД из бэкапа п.2 (см. [backup-restore.md](backup-restore.md)), затем откатить образ.
- [ ] Сообщить в Telegram-канал статус.
## 6. Прод (после OK на stage)
- [ ] Повторить пп. 25 на прод-окружении.
- [ ] Мониторить первые ~30 мин: `/health/ready`, логи, диск (`df -h`).