ci: правка конфига прокси больше не тянет полный деплой Site Finder (#2916) #2925

Merged
bot-backend merged 1 commit from ci/2916-caddy-only-deploy into main 2026-08-19 08:39:02 +00:00

1 commit

Author SHA1 Message Date
1fa289e305 ci: правка конфига прокси больше не тянет полный деплой Site Finder
All checks were successful
CI Trade-In / changes (pull_request) Successful in 7s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Has been skipped
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Has been skipped
CI / changes (pull_request) Successful in 9s
CI / backend-tests (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
Caddyfile лежит в фильтре `infra`, поэтому правка одной строки allowlist'а
ради meraocenka.ru запускала: пересборку трёх образов Site Finder,
`git reset --hard` на боевой VM, применение ВСЕХ pending data/sql/*.sql в
боевой БД gendsgn и `--force-recreate` бэкенда, воркера, beat и caddy.
Радиус поражения правки, относящейся к чужому домену, — gendsgn.ru целиком,
включая миграции продукта, который никто в этот момент катить не собирался.

Публичный периметр МЕРЫ живёт в этом файле и будет меняться часто: новая
страница = новая строка allowlist'а.

БЫСТРЫЙ ПУТЬ

Новый job deploy-caddy: синхронизирует репозиторий на VM и делает
`caddy reload`. Без пересборки, без миграций, без пересоздания контейнеров.

Включается ТОЛЬКО когда правка не трогает больше ничего: пара фильтров
`caddy` + `non_caddy` (всё остальное), быстрый путь идёт при caddy && !non_caddy.
Одного `caddy` мало — он true и когда вместе с конфигом приехал бэкенд.

`caddy reload`, а НЕ `up -d --force-recreate caddy`. Полный деплой
пересоздаёт контейнер осознанно (reload отказался бы принять битый конфиг и
скрыл бы поломку). Здесь наоборот: правится только конфиг, и отказ применить
битый — ровно то, что нужно. Ненулевой код → job красный, домены продолжают
работать на старом конфиге. `--force-recreate` на опечатке увёл бы контейнер
в crash-loop и уронил ВСЕ домены сразу.

БЕЗОПАСНЫЕ УМОЛЧАНИЯ

`github.event_name == 'push'` первым множителем в caddy_only: на
workflow_dispatch у paths-filter нет диффа, и никакой его ответ не должен
уметь отключить сборку — ручной прогон обязан оставаться полным.

Если выражение caddy_only вдруг вычислится не в 'true' (иначе ведёт себя
act), поведение вырождается в СЕГОДНЯШНЕЕ: полный деплой, быстрый путь не
запускается. Ошибка в эту сторону ничего не ломает.

deploy-status теперь принимает ЛЮБОЙ из двух путей: требовать
`deploy == success` как раньше значило бы красить каждую правку прокси,
которая как раз прошла. Смоук периметра (#2917) тоже слушает оба — на
быстром пути он нужнее всего, там меняется ровно то, что смоук проверяет.

ПРОВЕРЕНО

- `caddy reload` прогнан на проде с текущим конфигом: rc=0, конфиг принят;
  смоук периметра после этого 27 из 27 зелёные.
- Семантика фильтров проверена на реальных коммитах: из последних 400
  конфиг прокси трогали 12, только конфиг — 3 (в т.ч. 208173d8, правка
  периметра МЕРЫ). То есть механизм не мёртвый и не срабатывает лишний раз.
- f30820bb (Caddyfile + docker-compose) даёт caddy_only=false — компоуз
  требует полного деплоя, и он его получает.

Closes #2916
2026-08-19 13:36:49 +05:00