Crossweft / Обновления / v0.2.9
ОБНОВЛЕНИЕ · v0.2.9 ·

Валидаторы в стоп-хуке перезапускают только то, что изменилось

`crossweft validators --incremental` берёт прошлый успешный прогон, пока не изменилось ничего из прочитанного; маршрут с ответом 410 описывается через `gone`.

Два изменения: быстрый прогон валидаторов для стоп-хука и способ описать маршрут, который вы намеренно вывели из работы.

crossweft validators --incremental. Полный набор валидаторов может идти много минут, это слишком долго, чтобы гонять его при каждой остановке агента. С --incremental каждая фаза валидатора (самопроверка и обычный прогон), прошедшая в прошлый раз, берётся из прошлого прогона, пока не изменилось ничего из того, что она видела. Что именно она видела, Crossweft узнаёт трассировкой через аудит-хуки Python, в том числе внутри запущенных ею процессов Python: байты прочитанных файлов, просмотренные папки, проверенные пути, прочитанные переменные окружения, вывод запущенных ею команд git только для чтения, сам валидатор и среду выполнения.

Если трассировка видит не всё, фаза запускается заново. Фаза, которая запускает любую другую программу, делает fork, открывает сокет, использует драйвер базы данных или ctypes или у которой дочерний процесс Python не сообщил, что читал, повторно не используется никогда. Провалы не сохраняются, а сохранённая фаза истекает через 24 часа. Отчёт отмечает взятые из прошлого строки, говорит, почему сохранённая фаза запустилась снова (первый изменившийся вход), и называет каждую фазу, которую не удалось сохранить, с причиной.

На одном из наших репозиториев с 52 валидаторами холодный прогон занял 2704 с, повтор без изменений — 162 с: 93 фазы из 104 взяты из прошлого прогона.

Стоп-хук — это удобство: CI по-прежнему запускает обычный crossweft validators. Во время инкрементального прогона валидаторы видят CROSSWEFT_VALIDATORS_INCREMENTAL=1.

gone у устаревших связей. Маршрут, который вы вывели из работы, но намеренно продолжаете обслуживать, чтобы старые клиенты получали понятный 410 Gone вместо 404, теперь описывается на связи legacy через {"status": 410, "replaced_by": "<текущая связь>"}. Для него больше не нужна находка route:unmapped. Если такой маршрут-надгробие убрать, это будет route:gone-unserved, а живой код, который всё ещё к нему обращается, — route:gone-called.

Источник: v0.2.9 · CHANGELOG.md

← v0.2.8