refactor: simplify — мёртвые поля контента, общие хелперы api и тестов, липкая CTA без site в бандле

landing:
- site.ts: убраны неиспользуемые roast, brew, priceDisplay, hero.eyebrow, footer.phone (Footer берёт CONTACT_PHONE)
- form.ts: убраны FORM_TEXT.title/lead, CTAS, CtaPreset
- StickyCta получает тексты пропсами от layout: клиентский чанк больше не тащит все тексты страницы
- LeadForm/useLeadForm: без неиспользуемой подмены sendLead и className; leadPrefill без счётчика seq
- Stamp без мёртвого tone; убраны data-interest, data-hot, класс lead-form (ничем не читались)
- одно LEAD_FIELDS на sendLead и leadFormModel; регэксп typo вынесен из вызова; дубль фона body

api:
- changedFields и Version общие для leads и outbox; countLeads и leadStamps без копий SQL
- errorMessage в system.ts вместо четырёх копий; take() для ожидающих подтверждений
- backup: один Intl.DateTimeFormat на модуль, без невызываемых параметров timeZone/hour
- без мёртвых LOOPBACK '::ffff:127.0.0.1', client.call, Pick<BackupCommands> со всеми ключами
- testing.ts: validLead, addLead, count, leadIds вместо копий в тестах

deploy.sh: deployed_field и цикл по REPOS вместо повторов имён
This commit is contained in:
2026-10-17 17:31:11 +03:00
parent be8db997a5
commit 88b6e1395e
32 changed files with 169 additions and 192 deletions
+13 -11
View File
@@ -84,6 +84,9 @@ read_deployed() {
remote "cat $REMOTE_DIR/.deployed 2>/dev/null || true"
}
# значение поля из вывода read_deployed: deployed_field current "$state"
deployed_field() { sed -n "s/^$1=//p" <<<"$2"; }
write_deployed() {
local current=$1 previous=$2
remote "printf 'current=%s\nprevious=%s\n' '$current' '$previous' > $REMOTE_DIR/.deployed"
@@ -97,8 +100,8 @@ rollback() {
step "Чтение $REMOTE_DIR/.deployed"
local state current previous repo
state=$(read_deployed)
current=$(sed -n 's/^current=//p' <<<"$state")
previous=$(sed -n 's/^previous=//p' <<<"$state")
current=$(deployed_field current "$state")
previous=$(deployed_field previous "$state")
[[ -n $previous ]] || die "в .deployed нет предыдущего тега — откатываться некуда"
info "сейчас $current, откатываемся на $previous"
for repo in "${REPOS[@]}"; do
@@ -154,20 +157,19 @@ REMOTE
local hint="если в логе 'exec format error' — на этой машине нет эмуляции amd64:"
hint+=" Docker Desktop → Settings → General → «Use Rosetta for x86_64/amd64 emulation»"
hint+=" или docker run --privileged --rm tonistiigi/binfmt --install amd64"
local name
for name in landing api; do
info "kvarta-$name"
for repo in "${REPOS[@]}"; do
info "$repo"
docker buildx build --platform linux/amd64 --load \
--provenance=false --sbom=false \
-f "deploy/Dockerfile.$name" \
-f "deploy/Dockerfile.${repo#kvarta-}" \
--build-arg "APP_VERSION=$sha" \
-t "kvarta-$name:$sha" -t "kvarta-$name:latest" \
. || die "сборка kvarta-$name упала; $hint"
-t "$repo:$sha" -t "$repo:latest" \
. || die "сборка $repo упала; $hint"
done
docker image ls --format ' {{.Repository}}:{{.Tag}} {{.Size}}' | grep -E "^ kvarta-(landing|api):$sha " || true
step "Передача образов на сервер (docker save | gzip | ssh docker load)"
docker save "kvarta-landing:$sha" "kvarta-api:$sha" | gzip | remote 'gunzip | docker load'
docker save "${REPOS[@]/%/:$sha}" | gzip | remote 'gunzip | docker load'
else
step "Образы $sha уже есть на сервере — сборка и передача пропущены"
fi
@@ -187,10 +189,10 @@ REMOTE
local state previous
state=$(read_deployed)
previous=$(sed -n 's/^current=//p' <<<"$state")
previous=$(deployed_field current "$state")
# повторный деплой того же коммита не должен затирать предыдущий тег
if [[ $previous == "$sha" ]]; then
previous=$(sed -n 's/^previous=//p' <<<"$state")
previous=$(deployed_field previous "$state")
fi
compose_up "$sha"