Laravel 5.7 → 12: с божьей помощью и AI

В наследство досталась платформа на Laravel 5.7 и PHP 7.4. Старый стек ограничивал обновление зависимостей, а продукт продолжал обрастать возможностями. Нужно было обновиться, продолжая выпускать фичи.

Начал с выделения инфраструктурного слоя: зависимости от фреймворка и библиотек сосредоточил в адаптерах. Это позволило локализовать часть изменений совместимости и сократить их влияние на бизнес-логику.

Дальше подключил AI-агента. С его помощью автоматизировали сопоставление сигнатур методов компонентов старого и нового стека: параметры, возвращаемые типы, переопределения и удалённые методы. Получили перечень несовместимостей и связанных с ними мест в коде.

Агент помогал с анализом и однотипными правками. Решения о замене зависимостей и изменении поведения проходили моё ревью.

После обновления автоматический регресс на стенде поймал поломку подтверждения возраста. Backend успешно завершал проверку и устанавливал cookie, но она приходила с HttpOnly. JavaScript больше не мог прочитать признак подтверждения, и клиентский сценарий ломался.

Совместимость вызова сохранилась, а взаимодействие сервера и браузера нарушилось. Именно такие последствия обновления мы искали проверками пользовательских сценариев.

После исправлений повторяли прогоны, разбирали расхождения и дополняли проверки. Так появился повторяемый способ оценивать последствия апгрейда. В итоге обновили PHP и довели платформу до Laravel 12 параллельно с развитием продукта. После перехода остались выделенные адаптеры и автоматические проверки для следующих изменений.

Такие дела!