ci: смоук периметра МЕРЫ запускается сразу после деплоя (#2917) #2922
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
ИРД
вторичка
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#2922
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "ci/2917-perimeter-smoke-after-deploy"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Что было
scripts/smoke-mera-perimeter.sh— единственная проверка, которая видит публичный периметрцеликом: короткие адреса, 301 с длинных, публичный API, закрытость B2B-путей на публичном
домене. Запускался он только по
workflow_dispatchи ночному cron'у17 6 * * *.Ни
deploy.yml, ниdeploy-tradein.ymlего не дёргали. Для правки, чья главная логикаживёт в конфиге прокси, это единственный настоящий гейт — и он был асинхронным: регресс
жил до суток и находил его либо ночной прогон, либо владелец.
Что сделано
Job
perimeter-smokeв обоих пайплайнах. Конфиг прокси (deploy.yml) и фронт МЕРЫ(
deploy-tradein.yml) едут раздельно — сломать периметр может каждый.Три решения, которые стоит назвать:
deploy. «Выкатили» и «периметр цел» — разныевердикты; красный смоук не должен читаться как неудавшийся деплой.
if: needs.deploy.result == 'success'. Поверх пропущенной или упавшей выкаткипроверять нечего, а красный смоук увёл бы разбор не туда.
up -d --force-recreateотдаёт управление раньше, чем бэкенд отвечает; без ожиданиясмоук ловил бы гонку, а не регресс. Одного признака мало — Caddy отвечает раньше апстрима.
По таймауту шаг не падает, а печатает warning и пускает смоук: иначе «не успел
подняться» и «периметр сломан» слились бы в один красный шаг без диагноза.
Дублирование 20 строк в двух файлах — осознанное:
workflow_callподact_runnerнегарантирован, а зависимость, которая может молча не сработать, здесь хуже повтора.
Смежные пункты задачи
Скрипт не линтовался ничем.
shellcheckв репозитории нет, поэтому вci.ymlдобавленгейт
bash -nна все shell-скрипты — сейчас их 14, все валидны. Гейт падает, если ненашёл ни одного файла: пустая маска дала бы зелёный шаг, который ничего не проверяет
(#2871 ровно про это). Граница названа в комментарии:
bash -nловит синтаксис, а не смысл.Правка смоука проверяется сразу — в
perimeter-smoke.ymlдобавлен push-триггер на самскрипт и на workflow.
Про внешний геокодер — опасение проверено и оказалось у́же, чем звучит. В задаче
предполагалось, что падение/квота DaData дадут красный «регресс периметра». По коду
services/geocoder.pyэто цепочка «кадастровый тир → DaData → Nominatim →[]», и каждыйвнешний тир обёрнут в
except Exception: отказ, квота и 5xx дают пустой список и HTTP200, проверка остаётся зелёной. Покраснеть она может только если провайдер виснет
дольше 15 с (
--max-timeу curl) — то есть на зависании, а не на отказе.Ожидание не ослаблял:
200здесь проверяет открытость пути анониму, ради которой проверкаи написана. Вывод записан в самом скрипте, чтобы следующий читатель не разбирал это заново.
Проверка
Прогнал смоук против прода перед правкой — 27 из 27 зелёные:
То есть в пайплайн въезжает работающий гейт, а не заведомо красный.
yaml.safe_loadвсех четырёх файлов — валидны, состав job'ов проверен разборомbash -nпо 14 скриптам локально — чистоCloses #2917