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:
+13
-11
@@ -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"
|
||||
|
||||
Reference in New Issue
Block a user