food-market/scripts/generate-changelog.sh
nns f56c6efab1 feat(s17): onboarding wizard + help kb + feedback + diagnostic + whats-new
Sprint 17 — onboarding-контур: 4-шаг wizard, контекстный help, in-app
feedback, admin self-diagnostic, /whats-new из CHANGELOG.md.

Ключевые цифры:
- Wizard: 4 шага + skip каждого, 7 e2e тестов ✓ за 20 секунд.
- Diagnostic: 7 параллельных проверок, ~80ms на stage.
- Bundle impact: initial +4 KB gzip (только FeedbackWidget +
  HelpTooltip + EmptyStateWithDemo в основном bundle; страницы lazy).
- Regression-suite: 35 → 42 flows + 60 → 66 visual snapshots.

Backend (новые endpoint'ы):
- /api/admin/diagnostic/run — 7 параллельных проверок (DB, SMTP,
  MinIO, Hangfire, диск, сертификаты, бэкап). Task.WhenAll, ~80ms.
- /api/feedback — POST {category, message}, email на FromEmail +
  Telegram (если SupportTelegram:* настроены). Rate-limit 5/час.
- /api/whats-new — парсер CHANGELOG.md, возвращает {buildVersion,
  items}. Dockerfile.api копирует CHANGELOG.md в content-root +
  пишет VERSION из GIT_SHA build-arg.

Frontend:
- /onboarding-wizard — 4-step builder, состояние в useState,
  localStorage.fm.wizardCompleted после завершения.
- <HelpTooltip topic="key"/> — popover на каждой странице, mapping
  src/lib/help-topics.ts (13 keys).
- /help — knowledge base, 7 markdown topics через import.meta.glob,
  mini-renderer без heavy deps, fuzzy search.
- /whats-new — список из /api/whats-new, иконки по типу (feat/fix).
- /admin/diagnostic — Admin/SuperAdmin only, 🟢/🟡/🔴 индикаторы.
- <FeedbackWidget> в sidebar footer + ссылки на /help и /whats-new.
- <EmptyStateWithDemo> placeholder для будущих видео-демо.

scripts/generate-changelog.sh — git log feat:/fix: за 90 дней
→ CHANGELOG.md (307 строк сгенерировано).

Wizard UX-screenshots в docs/sprint17-screenshots/ (6 PNG: 4 шага +
help + diagnostic).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-06-07 17:04:26 +05:00

49 lines
1.7 KiB
Bash
Executable file
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.

#!/usr/bin/env bash
# Sprint 17: генератор CHANGELOG.md из git log feat:/fix: коммитов.
#
# Группирует по дате (commit author-date), вытаскивает строку subject'a
# после `feat:` / `fix:`. Игнорирует chore/test/docs (они в commit log
# уже есть, в changelog не нужны).
#
# Запуск: bash scripts/generate-changelog.sh > CHANGELOG.md
# Или через CI step при каждом push в main.
set -euo pipefail
cd "$(dirname "$0")/.."
# Глубина: 90 дней. /whats-new всё равно показывает только 30, но в
# CHANGELOG.md держим больше для исторической ретроспективы.
SINCE="$(date -d '90 days ago' +%Y-%m-%d 2>/dev/null || date -v-90d +%Y-%m-%d)"
echo "# CHANGELOG"
echo ""
echo "Auto-generated from git log feat:/fix: (last 90 days)."
echo ""
# git log: только feat: и fix: коммиты. Формат «дата|subject».
# Группируем по дате с awk.
git log --since="$SINCE" --pretty=format:'%ad|%s' --date=short \
--grep='^feat\|^fix' \
| awk -F'|' '
{ date = $1; msg = $2 }
date != prev {
if (prev != "") print ""
print "## " date
print ""
prev = date
}
{
# Извлекаем тип (feat|fix) и текст.
if (match(msg, /^(feat|fix)(\([^)]+\))?:\s*(.*)/, m)) {
type = m[1]
scope = m[2]
text = m[3]
printf "- **%s**: %s%s\n", type, text, (scope != "" ? " " scope : "")
} else {
printf "- %s\n", msg
}
}
'
echo ""