Этот документ описывает настройку и работу GitHub Actions CI/CD pipeline для WP Addon Plugin. Здесь зафиксированы все шаги, зависимости и конфигурации, необходимые для восстановления работы CI в случае поломки.
- Автоматизированное тестирование на множестве версий PHP
- Проверка совместимости с WordPress test suite
- Анализ покрытия кода и загрузка отчетов
- Предотвращение регрессий перед merge в main/develop
.github/
└── workflows/
└── test.yml # Основной CI workflow
name: Tests
on:
push:
branches: [ main, develop ]
pull_request:
branches: [ main, develop ]
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
php: ['8.2', '8.3', '8.4']services:
mysql:
image: mysql:8.0
env:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: wordpress_test
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
ports:
- 3306:3306
options: --health-cmd="mysqladmin ping" --health-interval=10s --health-timeout=5s --health-retries=3- uses: actions/checkout@v4Что делает: Клонирует репозиторий в runner.
Требования: Доступ к репозиторию.
- name: Setup PHP
uses: shivammathur/setup-php@v2
with:
php-version: ${{ matrix.php }}
extensions: pdo, pdo_mysql, mbstring, intl, zip
coverage: xdebug
tools: composer:v2Что делает:
- Устанавливает указанную версию PHP
- Включает необходимые расширения:
pdo,pdo_mysql,mbstring,intl,zip - Устанавливает Xdebug для покрытия кода
- Устанавливает Composer v2
Требования:
- shivammathur/setup-php@v2 action
- PHP версии 8.2, 8.3, или 8.4
- name: Cache Composer dependencies
uses: actions/cache@v3
with:
path: vendor
key: ${{ runner.os }}-php-${{ matrix.php }}-composer-${{ hashFiles('**/composer.lock') }}
restore-keys: |
${{ runner.os }}-php-${{ matrix.php }}-composer-Что делает:
- Кэширует папку
vendorдля ускорения сборки - Ключ кэша основан на OS, PHP версии и hash composer.lock
- Восстанавливает кэш если точное совпадение не найдено
Требования: actions/cache@v3
- name: Install Composer dependencies
run: composer install --no-progress --prefer-dist --optimize-autoloaderЧто делает:
- Устанавливает PHP зависимости из composer.json
- Использует дистрибутивы вместо исходников (--prefer-dist)
- Оптимизирует автолоадер для production
Требования:
- composer.json и composer.lock в корне проекта
- Доступ к Packagist
- name: Setup WordPress test environment
run: |
git clone --depth=1 https://github.com/WordPress/wordpress-develop.git /tmp/wordpress-develop
cd /tmp/wordpress-develop
cp wp-tests-config-sample.php wp-tests-config.php
sed -i "s/youremptytestdbnamehere/wordpress_test/" wp-tests-config.php
sed -i "s/yourusernamehere/wordpress/" wp-tests-config.php
sed -i "s/yourpasswordhere/wordpress/" wp-tests-config.php
sed -i "s|localhost|127.0.0.1|" wp-tests-config.php
# Add proper table prefix and other settings
sed -i "s/\$table_prefix = 'wptests_';/\$table_prefix = 'wp_';/" wp-tests-config.php
echo "define('WP_DEBUG', true);" >> wp-tests-config.php
echo "define('WP_DEBUG_LOG', false);" >> wp-tests-config.php
echo "define('WP_DEBUG_DISPLAY', true);" >> wp-tests-config.phpЧто делает:
- Клонирует WordPress develop репозиторий (--depth=1 для скорости)
- Копирует sample конфиг в рабочий
- Заменяет placeholders на реальные значения БД
- Изменяет хост на 127.0.0.1 (для Docker networking)
- Устанавливает префикс таблиц на 'wp_'
- Добавляет debug настройки
Требования:
- Доступ к github.com/WordPress/wordpress-develop.git
- MySQL сервис запущен и доступен
- name: Set WP_TESTS_DIR environment variable
run: echo "WP_TESTS_DIR=/tmp/wordpress-develop" >> $GITHUB_ENVЧто делает: Устанавливает переменную окружения WP_TESTS_DIR для тестов.
Требования: $GITHUB_ENV доступен в GitHub Actions.
- name: Create test database
run: |
mysql -h 127.0.0.1 -u root -proot -e "CREATE DATABASE IF NOT EXISTS wordpress_test;"Что делает: Создает базу данных wordpress_test в MySQL.
Требования:
- MySQL сервис запущен на 127.0.0.1:3306
- Root пароль: 'root'
- Пользователь 'wordpress' с паролем 'wordpress' создан
- name: Install WordPress test suite
run: |
cd /tmp/wordpress-develop
php tests/phpunit/includes/install.php wp-tests-config.phpЧто делает:
- Запускает WordPress install script
- Создает все необходимые таблицы в БД
- Настраивает WordPress для тестирования
Требования:
- PHP с pdo_mysql расширением
- wp-tests-config.php правильно настроен
- База данных доступна
- name: Run tests
run: composer test -- --exclude-group problematicЧто делает:
- Запускает все тесты через Composer скрипт
- Исключает тесты с группой @group problematic
Требования:
- composer.json с настроенным скриптом test
- Все зависимости установлены
- WP_TESTS_DIR настроена
- name: Run tests with coverage
run: composer test:coverage
if: matrix.php == '8.2'Что делает:
- Запускает тесты с анализом покрытия кода
- Генерирует clover.xml отчет
Требования:
- Xdebug установлен и настроен
- composer.json с скриптом test:coverage
- name: Upload coverage reports
uses: codecov/codecov-action@v3
if: matrix.php == '8.2'
with:
file: ./coverage/clover.xml
fail_ci_if_error: falseЧто делает:
- Загружает clover.xml в Codecov
- Не падает сборка при ошибке загрузки
Требования:
- codecov/codecov-action@v3
- CODECOV_TOKEN в secrets (опционально)
Симптомы: Ошибка в шаге "Install WordPress test suite"
Решение:
- Проверить путь к install.php
- Должен быть:
tests/phpunit/includes/install.php - А НЕ:
bin/install.phpилиtests/bin/install.php
Симптомы: Ошибка require_once в install.php
Решение:
- Убедиться что wp-tests-config.php создан в предыдущем шаге
- Проверить что все sed команды выполнились корректно
- Проверить права на файл
Симптомы: Тесты не могут подключиться к MySQL
Решение:
- Проверить что MySQL сервис запущен
- Проверить health checks в services.mysql.options
- Убедиться что используется 127.0.0.1 вместо localhost
Симптомы: Ошибки связанные с Patchwork в тестах
Решение:
- Проверить что Brain Monkey удален из composer.json
- Проверить bootstrap.php на предмет mock'ов Patchwork
- Запускать тесты с --exclude-group problematic
Симптомы: Сборка прерывается по таймауту
Решение:
- Проверить composer test скрипт на корректность
- Убедиться что все зависимости установлены
- Проверить что WP_TESTS_DIR правильно установлена
- Ожидаемое время сборки: 1.5-2 минуты
- Критические шаги: WordPress setup (30-45 сек), Tests (10-20 сек)
- Целевое покрытие: > 80%
- Отчеты: clover.xml -> Codecov
- Анализ: Только на PHP 8.2 для оптимизации
strategy:
matrix:
php: ['8.1', '8.2', '8.3', '8.4']services:
mysql:
image: mysql:8.0
postgres:
image: postgres:13
# ... конфигурацияjobs:
test:
# ... existing config
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run PHPStan
run: composer lint- CODECOV_TOKEN: Для загрузки покрытия (опционально)
- Другие секреты: Не требуются для базовой работы
- GitHub токены: Используются автоматически
- Внешние сервисы: Codecov (опционально)
# В GitHub Actions UI
# Actions -> Workflow runs -> Выбрать run -> View logs# Запуск локально в Docker
docker run -it --rm \
-v $(pwd):/app \
-w /app \
php:8.2-cli \
bash
# В контейнере
composer install
# ... повторить шаги CI- Убедиться что .github/workflows/test.yml существует
- Проверить синтаксис YAML
- Все actions должны быть доступны (checkout@v4, cache@v3 и т.д.)
- Проверить версии actions на совместимость
- Запустить каждый шаг вручную локально
- Проверить логи на ошибки
- Убедиться что MySQL сервис корректно настроен
- Проверить переменные окружения
- Если workflow сломан - восстановить из git истории
- Если внешние сервисы недоступны - найти альтернативы
- .github/workflows/test.yml существует
- Все actions доступны и актуальны
- MySQL сервис правильно настроен
- composer.json корректен
- tests/bootstrap.php настроен
- WordPress develop доступен для клонирования
- Codecov токен установлен (опционально)
Последнее обновление: Ноябрь 2025 Статус: ✅ Работает стабильно 🚀