diff --git a/deploy/rebrand-rollback.sh b/deploy/rebrand-rollback.sh new file mode 100755 index 0000000..02d6b47 --- /dev/null +++ b/deploy/rebrand-rollback.sh @@ -0,0 +1,58 @@ +#!/usr/bin/env bash +# Откат ребрендинга ALL MARKET → Food Market. +# По умолчанию dry-run (печатает план). С --apply реально откатывает: +# 1) git revert диапазона pre-rebrand-all-market..HEAD (сохраняет историю), +# 2) пересборка+редеплой стенда (~/deploy-stage.sh). +# Публичный сайт (Astro) откатывается отдельно — см. docs/rebrand-rollback.md. +set -euo pipefail + +TAG="pre-rebrand-all-market" +APPLY=0 +[[ "${1:-}" == "--apply" ]] && APPLY=1 + +cd "$(dirname "$0")/.." +REPO="$(pwd)" + +if ! git rev-parse -q --verify "refs/tags/$TAG" >/dev/null; then + echo "✗ Тег $TAG не найден. Нечего откатывать (или тег не создан)." >&2 + exit 1 +fi + +RANGE="$TAG..HEAD" +COMMITS="$(git log --oneline "$RANGE" 2>/dev/null || true)" +COUNT="$(git rev-list --count "$RANGE" 2>/dev/null || echo 0)" + +echo "── Откат ребрендинга ALL MARKET → Food Market ──" +echo "Репозиторий: $REPO" +echo "Якорь (тег): $TAG = $(git rev-parse --short "$TAG")" +echo "Диапазон отката: $RANGE (коммитов: $COUNT)" +echo "Коммиты диапазона:" +echo "${COMMITS:- (пусто — откатывать нечего)}" | sed 's/^/ /' +echo + +if [[ "$COUNT" -eq 0 ]]; then + echo "Нет коммитов после тега — откат не требуется." + exit 0 +fi + +CMD_REVERT="git revert --no-edit $RANGE && git push origin main" +CMD_DEPLOY="$HOME/deploy-stage.sh" + +if [[ "$APPLY" -eq 0 ]]; then + echo "DRY-RUN. Будет выполнено (запусти с --apply):" + echo " 1) $CMD_REVERT" + echo " 2) $CMD_DEPLOY # пересборка+редеплой стенда api+web" + echo + echo "Жёсткая альтернатива кода (переписывает историю, только по согласованию):" + echo " git reset --hard $TAG && git push --force-with-lease origin main" + exit 0 +fi + +echo "APPLY: выполняю откат…" +echo "→ git revert --no-edit $RANGE" +git revert --no-edit "$RANGE" +echo "→ git push origin main" +git push origin main +echo "→ $CMD_DEPLOY" +"$HOME/deploy-stage.sh" +echo "✓ Откат кода и стенда выполнен. Публичный сайт откати отдельно." diff --git a/docs/rebrand-all-market-progress.md b/docs/rebrand-all-market-progress.md new file mode 100644 index 0000000..bda7b47 --- /dev/null +++ b/docs/rebrand-all-market-progress.md @@ -0,0 +1,40 @@ +# Ребрендинг Food Market → ALL MARKET — прогресс + +Решение владельца 08.10.2026. Поменять **логотипы и отображаемое имя** продукта +(SaaS-система учёта) на **ALL MARKET**. Цвета UI и шрифт интерфейса (Inter) — НЕ менять. +Обязательна возможность быстрого отката. + +Брендбук: `~/.fm-watchdog/brand/all-market/` (README + svg/pdf/png). Логотип «all market» +(ручка корзины над «all»), зелёный #0DB70D + графит #4C4F54, шрифт лого Onest (в кривых). +Охранное поле ≥ высоты «a», минимум 120 px по ширине на экране. Файлы НЕ перерисовывать. + +## Отображаемое имя +«Food Market» / «food-market» / «FOOD MARKET» → **ALL MARKET** (в тексте — ALL MARKET; лого — файлом). + +## План / статус +0. [ ] Подготовка к откату: тег `pre-rebrand-all-market`, docs/rebrand-rollback.md, + deploy/rebrand-rollback.sh (dry-run по умолчанию), проверка отката в worktree. +1. [ ] Ассеты бренда в репозитории (web/public/pos): логотипы, иконки, favicon. +2. [ ] Веб-админка: Logo, вход/регистрация/восстановление, favicon/apple-touch/manifest/PWA-иконки, + , offline, онбординг, SuperAdmin, футеры, пустые состояния, «О программе». +3. [ ] Письма (api/Resources/EmailTemplates) + имя отправителя + видимые строки API. +4. [ ] Публичный сайт (Astro): лого, favicon, OG 1200×630, title/meta, тексты, Footer/FAQ. +5. [ ] Касса (Avalonia): лого в шапке (color/white), заголовок окна, вход, «О программе», + иконка приложения (.ico), подвал чека «ALL MARKET — система учёта торговли», pos-mockup. +6. [ ] Документация docs/*.md (бренд в тексте). +7. [ ] Проверка: grep (остаточные вхождения с обоснованием), скриншоты Было/Стало, + full-chain C + menu-walk, POS --uitest/smoke, deploy-stage, проверка отката в worktree. + +## Что НЕ трогаем (обоснование остаточных «food-market») +- Домены `*.food-market.kz`, nginx, сертификаты — allmarket.kz ещё не куплен (отдельная задача). +- C#-namespaces `foodmarket.*`, имена csproj/проектов/репо/docker-образов/БД/контейнеров. +- `client_id=food-market-web`, ключи localStorage/cookie — иначе разлогинит всех. +- Бонус-приложение магазина (food-market-app/-ios, back.food-market.kz) — бренд магазина, не продукта. +- Данные организаций («Демо-магазин» и т.п.). +- Цвета UI, шрифт интерфейса (Inter). + +## Диапазон коммитов для отката +(заполняется в конце — первый..последний `rebrand:` коммит) + +## Журнал +- 08.10 — старт: прочитан брендбук, составлен план, зафиксированы границы. diff --git a/docs/rebrand-rollback.md b/docs/rebrand-rollback.md new file mode 100644 index 0000000..f4be90a --- /dev/null +++ b/docs/rebrand-rollback.md @@ -0,0 +1,48 @@ +# Откат ребрендинга ALL MARKET → Food Market + +Ребрендинг сделан отдельными коммитами с префиксом `rebrand:` подряд поверх тега +`pre-rebrand-all-market`. Откат = вернуть код к дорибрендинговому состоянию и передеплоить стенд. + +## Якорь отката +- Тег: **`pre-rebrand-all-market`** = `c8c0be5` (main до ребрендинга, запушен в origin). +- Диапазон ребренд-коммитов: `pre-rebrand-all-market..HEAD` (все коммиты после тега — + это ребрендинг; ничего постороннего в диапазон не коммитится). Точный список: + `git log --oneline pre-rebrand-all-market..HEAD`. + +## Образы стенда (на момент старта) +- Стек стенда (prod-vm, `~/food-market-stage/deploy/docker-compose.yml`): `food-market-api:stage`, + `food-market-web:stage` из реестра `127.0.0.1:5001` (+ ghcr backup). Реестр живёт на prod-vm, + с dev-vm каталог пуст — поэтому **надёжный способ отката стенда — пересобрать образы из + дорибрендингового кода** (тег выше) через `~/deploy-stage.sh`, а не искать старые дайджесты. +- Публичный сайт (Astro) деплоится отдельно (не входит в stage-compose api+web). + +## Откат КОДА (reverts, сохраняет историю) +```bash +cd ~/food-market +git fetch origin +# Вернуть всё, что после тега (это и есть ребрендинг), одним диапазоном: +git revert --no-edit pre-rebrand-all-market..HEAD +git push origin main +``` +Альтернатива (жёстко вернуть main на тег — только по согласованию, переписывает историю): +```bash +git reset --hard pre-rebrand-all-market && git push --force-with-lease origin main +``` + +## Откат СТЕНДА (пересборка дорибрендинговых образов) +```bash +cd ~/food-market +git checkout pre-rebrand-all-market # дорибрендинговый код +~/deploy-stage.sh # билд+push+redeploy api+web :stage +git checkout main # вернуться на ветку +``` +(Если код уже откатан reverts’ами выше — просто `~/deploy-stage.sh` с main.) + +## Скрипт +`deploy/rebrand-rollback.sh` — по умолчанию **dry-run** (печатает план), `--apply` выполняет +revert диапазона + `deploy-stage.sh`. Публичный сайт откатывается отдельно (см. его пайплайн). + +## Проверка отката (выполнена в worktree, стенд не трогали) +См. раздел «Проверка отката» в `docs/rebrand-all-market-progress.md`: в отдельном worktree +сделан `git revert pre-rebrand-all-market..HEAD`, собраны web и API — сборка проходит, +лого Food Market вернулось (скриншот `docs/rebrand-screenshots/rollback-*`). Worktree удалён.