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

4.2 KiB
Raw Permalink Blame History

Чек-лист релиза food-market

Практический список перед/во время/после выкатки. Деплой автоматизирован (push в main → GitHub Actions: CI → образы → deploy stage; см. stage-setup.md). Прод — после подтверждения на stage.

0. Предусловия (один раз на окружение)

  • deploy/.env заполнен из deploy/.env.example, права 600 (см. secrets.md).
  • POSTGRES_PASSWORD — не дефолтный.
  • OPENIDDICT_ISSUER = публичный URL админки (за прокси обязателен).
  • OpenIddict-сертификаты на месте или генерируются self-signed (см. openiddict-keys.md).
  • Таймер бэкапа установлен и активен: systemctl list-timers food-market-backup.timer (см. 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).

3. Релиз

  • Смёрджить в main (или прогнать deploy-stage.yml). CI соберёт образы и задеплоит на stage.
  • Дождаться Telegram-уведомления «Deploy stage OK».
  • Миграции применяются автоматически на старте API (Migrate()), отдельный шаг не нужен.

4. После выкатки (smoke)

  • curl -fsS https://<host>/health/ready200 Healthy (БД + миграции).
  • curl https://<host>/health/live200.
  • Логин: получить токен на /connect/token, /api/me200 с ожидаемыми 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), затем откатить образ.
  • Сообщить в Telegram-канал статус.

6. Прод (после OK на stage)

  • Повторить пп. 25 на прод-окружении.
  • Мониторить первые ~30 мин: /health/ready, логи, диск (df -h).