Як безпечно протестувати PHP 8.3 RC1 перед релізом

Матеріал розбирає підхід Ayesh Karunaratne до тестування першого Release Candidate PHP 8.3 і підготовки до релізу в листопаді 2023 року.

Що сталося: PHP 8.3 вийшов на етап RC1

У серпні 2023 з'явився перший кандидат у реліз PHP 8.3 — версія PHP 8.3.0RC1. Це означає, що функціональні зміни для 8.3 вже завершені: далі команда мови планує лише полірування та виправлення багів.

Автор відзначає конкретний графік:

  • загальнодоступний реліз PHP 8.3.0 заплановано на 23 листопада 2023 року;
  • до цієї дати вийде ще п'ять Release Candidate, кожні приблизно раз на два тижні;
  • гілка PHP-8.3 вже виділена в репозиторії, а master готують до розробки PHP 8.4.

Для розробників це сигнал: вікно змін для 8.3 закрите, можна починати предметне тестування проєктів під нову гілку.

Де лежить вихідний код і як влаштовані гілки

Перший RC позначений у репозиторії php-src тегом PHP 8.3.0RC1. Одночасно створено стабілізаційну гілку:

  • PHP-8.3 — з неї будуть збирати всі наступні RC і фінальний реліз 8.3.0;
  • master — повертається до статусу «експериментального», там уже готують зміни для PHP 8.4, запланованого на 2024 рік.

Практично це означає, що багрепорти і патчі потрібно правильно націлювати:

  • якщо ви тестуєте саме 8.3 — працюйте з гілкою PHP-8.3 чи з відповідним тегом RC;
  • якщо досліджуєте «майбутнє PHP» — беріть master, але будьте готові до нестабільності.

Готові збірки для різних систем

Автор збирає в одному місці варіанти, як спробувати 8.3 RC1 без самостійної компіляції.

Windows: завантажити збірку з офіційного сайту

Для Windows доступні попередні збірки PHP 8.3 RC на windows.php.net/qa. Тут зручно брати:

  • Thread Safe збірки для сценаріїв з Apache mod_php;
  • Non Thread Safe для FastCGI (наприклад, з IIS чи PHP-FPM під Windows).

Базова схема тесту:

  1. Завантажити відповідний пакет для x86 чи x64 з windows.php.net/qa.
  2. Розпакувати до окремої теки (не поверх робочої версії PHP).
  3. Налаштувати тимчасовий php.ini з мінімальним набором розширень.
  4. Запустити тестовий вебсервер або CLI сценарії вашого застосунку.

Так ви ізолюєте RC від продуктивного середовища і зможете безпечно прогнати юніт- та інтеграційні тести.

Docker: використати готові образи

На Docker Hub уже доступні образи з тегами PHP 8.3.0 для тестування: docker.com/_/php.

Типовий підхід для команди, що працює через Docker:

  • створити окрему гілку в репозиторії застосунку;
  • оновити базовий образ у Dockerfile на тег з 8.3.0 RC;
  • запустити CI-пайплайн, який уже є, але з новим образом;
  • зібрати список попереджень, змін у поведінці, падінь тестів.

Цей метод не вимагає змін на хост-системі розробника чи сервері: усе відбувається усередині контейнера.

Linux: компіляція зі вихідних з готовими гайдами

PHP.Watch дає дві окремі інструкції для компіляції PHP, на які посилається автор:

У цих гайдах розписані залежності, типові прапорці конфігурації і порядок встановлення. Для RC1 достатньо підставити потрібний тег з php-src.

Компіляція корисна, якщо:

  • вам потрібні специфічні модулі або конфігурація, яких немає у стандартних пакетах;
  • ви готуєтеся підтримувати кілька мінорних версій паралельно на одному хості;
  • потрібно зрозуміти, як новий PHP поводиться зі специфічними опціями збірки.

macOS: Homebrew tap shivammathur

Для macOS автор посилається на tap shivammathur/homebrew-php, де PHP 8.3 доступний через формулу [email protected].

Практична перевага tap у тому, що можна поставити кілька версій PHP поруч і перемикатися між ними, не чіпаючи системний PHP, який використовує, наприклад, інфраструктура або старі скрипти.

Як тестувати, не ризикуючи продуктивними системами

У матеріалі окремо наголошено: Release Candidate призначені тільки для тестування, а не для продуктивного використання.

Безпечна стратегія на основі описаного підходу:

  1. Ізоляція середовища. Встановити PHP 8.3 RC1 у окремий шлях, контейнер або віртуальну машину. Не замінювати ним робочий PHP.
  2. Повний набір тестів. Прогнати всі автоматизовані тести: юніт- , інтеграційні, E2E, плюс регресійні сценарії, де раніше вже ловили помилки.
  3. Перевірка залежностей. Окремо протестувати ключові розширення (як вбудовані, так і сторонні), фреймворки і бібліотеки, які активно використовуються у застосунку.
  4. Поступове оновлення. Коли вийде фінальний реліз, переходити поетапно: спочатку стейджинг, потім частина некритичних сервісів, і лише потім основне навантаження.

За такого підходу RC1 і наступні кандидати допомагають знайти несумісності ще до листопадового релізу, але не наражають продакшн на ризик.

Що означає графік з шістьма RC для розробників

План з п'ятьма додатковими RC після 8.3.0RC1 дає орієнтовний коридор у кілька місяців для зворотного зв'язку. Для практичної роботи це можна використати так:

  • закласти в дорожню карту спринт або дві саме під тестування 8.3 і адаптацію коду;
  • запланувати оновлення внутрішніх бібліотек і фреймворків після виходу 1-2 наступних RC, коли виправлять перші знайдені проблеми;
  • відправляти багрепорти в офіційний трекер PHP на основі результатів своїх тестів.

Картина версій у репозиторії (виділена гілка PHP-8.3 і підготовка master до 8.4) показує, що зміни у самій мові йдуть паралельно з циклом стабілізації. Це додатковий аргумент регулярно тестувати свій код на нових версіях, не чекаючи моменту, коли оновлення стане вимушеним.

PHP 8.3 RC1 Released


Джерело: Ayesh Karunaratne — PHP.Watch: новости

Пошук

Закрити