nns
|
843fc4bd03
|
feat(s21): stage→prod migration toolchain (7 скриптов + workflow)
Auto-tag / Create date-tag (push) Waiting to run
CI / Backend (.NET 8) (push) Waiting to run
CI / Web (React + Vite) (push) Waiting to run
CI / POS (WPF, Windows) (push) Waiting to run
1. deploy/check-prod-readiness.sh — pre-deploy gating: backup<60min,
disk≥5GB на /opt+/var/lib/docker, /health/ready=Healthy, .env
required-keys без placeholder'ов. --ssh-host для удалённой проверки.
2. deploy/prod-deploy.sh <api-tag> <web-tag> — blue-green release:
pull → green-контейнер на :8088 → migrations (auto) → smoke
(/health/ready + /api/me с тест-токеном) → nginx upstream switch
→ swap → docker compose up -d с обновлённым тэгом. Failure →
удаление green, blue остаётся. --skip-web флаг.
3. deploy/prod-rollback.sh <to-tag> — docker pull (если нужно) →
docker compose up -d --force-recreate с указанным tag'ом → wait
/health/ready до 120с. --dry-run + --skip-web.
4. deploy/post-deploy-smoke.sh — 10 шагов (signup → login →
/api/me → list products/counterparties/stores/stock → create+delete
product → logout-via-session). JSON парсится через python3
(не grep — споткнулись на пробеле перед `:` в access_token).
Telegram-alert через FM_TG_TOKEN/CHAT при провале. Stage-тест: 10/10 ✓.
5. deploy/db-schema-diff.sh — pg_dump --schema-only с обоих хостов
через ssh+docker exec, нормализация (sed), diff -u. Exit:
0=идентичны, 1=разница, 2=ошибка.
6. deploy/generate-release-notes.sh <from-tag> <to-tag> — git log
group by prefix через awk: feat→✨, fix→🐛, perf→⚡, docs→📚,
test/refactor/chore→<details>. Сохраняет docs/release-notes/<tag>.md.
7. .forgejo/workflows/auto-tag.yml — на push в main: если HEAD не
помечен → создаёт v<YYYYMMDD>.<N> annotated tag, push в origin,
генерирует release-notes для будущего деплоя.
Все скрипты идемпотентные, поддерживают --dry-run, не трогают прод.
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
|
2026-06-07 22:31:10 +05:00 |
|