🔧
Как без боли обновить PHP-проект на SymfonyОбновление PHP-проекта часто воспринимается как рискованная операция: что-то ломается, срочные фиксы летят в прод, команда в стрессе. Однако при правильном подходе процесс становится предсказуемым и управляемым.
🧰
1. Подготовка инструментовПеред обновлением важно собрать «ящик инструментов»: автоматические тесты, статический анализ, линтеры. Например, инструмент
Bruno отлично подходит для API-тестирования — лёгкий, удобный для работы в команде и хорошо интегрируется с Git.
📋 Что нужно сделать:
Выполнить debug:router для получения списка маршрутов.
Определить критичные эндпоинты и написать для них тест-сценарии.
Интегрировать тесты в CI для автоматического контроля стабильности.
⬆️
2. Обновление зависимостей и окруженияОбновить composer.json и конфигурации окружения (например, Docker) под новую версию PHP, например 8.3.
Проверить список устаревших пакетов через composer outdated.
Выполнять обновление поэтапно — по одному или нескольким пакетам за раз.
Запустить PHPStan для статического анализа и PHP CS Fixer для форматирования кода.
Проверить и устранить устаревшие конструкции, отображаемые в Symfony Profiler или тестах.
🔄
3. Рефакторинг с использованием RectorRector позволяет автоматически модернизировать код: обновить синтаксис под новую версию PHP, улучшить читаемость, удалить мёртвый код. Настраивается через конфигурационные файлы с наборами правил (например, PHP 8.3, codeQuality, deadCode). Рефакторинг проводится поэтапно с обязательным прогоном тестов после каждого шага.
🛠️
4. Обновление CI/CDАктуализировать образы и зависимости в CI-пайплайне.
Убедиться, что все стадии (тесты, линтеры, анализ) выполняются успешно.
Задеплоить на стейджинг и проверить стабильность работы.
🧪 Пример GitHub Actions с Bruno:
- name: Run Bruno API tests
run: |
npm install -g
@usebruno/cli
php -S localhost:8000 -t public &
sleep 2
cd bruno && bru run --env dev
🖼️
5. Тестирование фронтендаДаже если проект в основном бэкендовый, визуальные баги и ошибки пользовательского сценария могут остаться незамеченными. Тесты с помощью Cypress или Puppeteer позволяют отследить визуальные и поведенческие ошибки в интерфейсе.
🔗 Medium