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>
This commit is contained in:
parent
37e9d28f69
commit
99c1f1b780
56
docs/release-checklist.md
Normal file
56
docs/release-checklist.md
Normal file
|
|
@ -0,0 +1,56 @@
|
||||||
|
# Чек-лист релиза 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)
|
||||||
|
|
||||||
|
- [ ] Повторить пп. 2–5 на прод-окружении.
|
||||||
|
- [ ] Мониторить первые ~30 мин: `/health/ready`, логи, диск (`df -h`).
|
||||||
Loading…
Reference in a new issue