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>
47 lines
2.3 KiB
Docker
47 lines
2.3 KiB
Docker
ARG LOCAL_REGISTRY=127.0.0.1:5001
|
||
FROM ${LOCAL_REGISTRY}/mirror/dotnet-sdk:8.0 AS build
|
||
WORKDIR /src
|
||
|
||
COPY food-market.sln global.json Directory.Build.props Directory.Packages.props ./
|
||
COPY src/food-market.domain/food-market.domain.csproj src/food-market.domain/
|
||
COPY src/food-market.shared/food-market.shared.csproj src/food-market.shared/
|
||
COPY src/food-market.application/food-market.application.csproj src/food-market.application/
|
||
COPY src/food-market.infrastructure/food-market.infrastructure.csproj src/food-market.infrastructure/
|
||
COPY src/food-market.api/food-market.api.csproj src/food-market.api/
|
||
COPY src/food-market.pos.core/food-market.pos.core.csproj src/food-market.pos.core/
|
||
COPY src/food-market.pos/food-market.pos.csproj src/food-market.pos/
|
||
|
||
COPY src/ src/
|
||
# Single-step restore + publish — раздельные шаги в multi-stage cache
|
||
# роняли publish с NETSDK1064 (Microsoft.CodeAnalysis.Analyzers 3.3.3 not
|
||
# found) когда в csproj добавлялись новые transitive analyzer-зависимости,
|
||
# а первый restore не покрывал их. Теперь restore выполняется внутри publish.
|
||
RUN dotnet publish src/food-market.api/food-market.api.csproj -c Release -o /app
|
||
|
||
FROM ${LOCAL_REGISTRY}/mirror/dotnet-aspnet:8.0 AS runtime
|
||
WORKDIR /app
|
||
|
||
RUN apt-get update && apt-get install -y --no-install-recommends curl \
|
||
&& rm -rf /var/lib/apt/lists/*
|
||
|
||
COPY --from=build /app .
|
||
# Sprint 17: CHANGELOG.md в content-root → WhatsNewController читает его на каждый /api/whats-new.
|
||
COPY CHANGELOG.md ./CHANGELOG.md
|
||
# VERSION файл создаётся deploy-скриптом (или CI) непосредственно перед docker
|
||
# build'ом — содержит короткий SHA коммита. Если отсутствует — fallback на
|
||
# AssemblyInformationalVersion. Поэтому COPY с || true (Dockerfile не имеет
|
||
# опц-COPY, делаем через RUN с проверкой).
|
||
ARG GIT_SHA=dev
|
||
RUN echo "$GIT_SHA" > VERSION
|
||
|
||
ENV ASPNETCORE_URLS=http://+:8080
|
||
ENV ASPNETCORE_ENVIRONMENT=Production
|
||
ENV DOTNET_NOLOGO=1
|
||
ENV DOTNET_CLI_TELEMETRY_OPTOUT=1
|
||
|
||
EXPOSE 8080
|
||
HEALTHCHECK --interval=30s --timeout=5s --start-period=30s \
|
||
CMD curl -fsS http://localhost:8080/health/ready || exit 1
|
||
|
||
ENTRYPOINT ["dotnet", "foodmarket.Api.dll"]
|