Harness: ручная проверка пакета
← Типы контента · Назад к README
Yazar — голый Composer-пакет: в репозитории нет app/, bootstrap/, public/, artisan, поэтому его нельзя запустить как приложение прямо здесь. Harness — это Laravel-приложение в подпапке harness/, которое даёт такую возможность локально, не превращая репозиторий пакета обратно в Laravel-скелет.
Что это и почему так
harness/создаётся и переиспользуется скриптомbin/harness-init.sh— не хранится в git (.gitignoreсодержит/harness).- Подключает
seryak/yazarчерез Composer path-repository сsymlink: trueна корень репозитория (../относительноharness/) — правки вsrc/пакета видны в harness мгновенно, без переустановки зависимости. - Переиспользуемый, а не одноразовый:
bin/harness-init.shможно запускать повторно — при существующейharness/он не пересоздаёт Laravel-приложение с нуля, а только обновляет в нём зависимостьseryak/yazar.
Это тот же механизм (path-repository + symlink: true), которым пакет устанавливается в README у реального стороннего потребителя — разница только в том, что harness живёт внутри самого репозитория пакета и предназначен для разработчика, а не для конечного пользователя.
Предварительные требования
- PHP 8.2+ и Composer 2.x (те же, что нужны самому пакету).
- Доступ к сети для
composer create-project laravel/laravelпри первом запуске.
Быстрый старт
bin/harness-init.sh
cd harness
php artisan yazar:install
php artisan migrate
php artisan build
php artisan serve
bin/harness-init.sh— создаётharness/(если её ещё нет) или обновляет в нейseryak/yazar(если уже есть).php artisan yazar:install— публикуетconfig/yazar.php, дефолтные вьюхи и demo-контент; никогда не трогает базу данных.php artisan migrate— создаёт таблицуdocuments.php artisan build— импортирует контент и рендерит статический сайт.php artisan serve— поднимает harness как обычное Laravel-приложение для просмотра в браузере.
Что делает bin/harness-init.sh
if [ ! -d harness ]; then
composer create-project laravel/laravel harness "^12.0"
composer config --working-dir=harness repositories.yazar '{"type":"path","url":"../","options":{"symlink":true}}' --json
composer require --working-dir=harness seryak/yazar:dev-master
else
composer update --working-dir=harness seryak/yazar
fi
- Первый запуск (
harness/отсутствует): создаёт Laravel-приложение черезcomposer create-project laravel/laravel harness "^12.0", прописывает path-repository сsymlink: trueодним JSON-вызовомcomposer config, затем требуетseryak/yazar:dev-master. - Повторный запуск (
harness/уже существует): не пересоздаёт приложение — обновляет только зависимостьseryak/yazar, оставляя остальной harness (базу, публикованные файлы,.env) как есть.
Версия
"^12.0"обязательна. Она совпадает со старшей версиейilluminate/*, которую требуетcomposer.jsonпакета. Без неёcomposer create-projectставит последнюю версию Laravel вообще (на момент написания — 13.x), аcomposer require seryak/yazar:dev-masterв такой harness падает с ошибкой resolve-конфликта (illuminate/console ^12.0vs уже установленныйlaravel/framework ^13.x). Если пакет когда-нибудь перейдёт на Laravel 13, эту версию в скрипте нужно поднять вместе сcomposer.json.
Сброс harness
harness/ безопасно удалять в любой момент — она не в git и не содержит ничего, что нужно репозиторию пакета:
rm -rf harness
bin/harness-init.sh
Полезно, если harness оказался в неконсистентном состоянии (например, composer.json внутри неё был испорчен вручную, или она была создана до фикса версии Laravel и содержит несовместимый laravel/framework) — скрипт не чинит существующую конфигурацию, только переиспользует её или создаёт с нуля.
Ограничения
- Harness предназначен только для ручной проверки пакета (
yazar:install,migrate,build,serve) — он не прогоняет существующий набор PHPUnit-тестов пакета (tests/). Тесты физически лежат в репозитории, но не запускаются здесь: они завязаны наbootstrap/app.php, которого в голом пакете больше нет, а подключать их через harness сознательно не стали — это привязало бы тесты к конкретному локальному пути и сломало бы их в CI. - Harness — не прототип и не черновик будущего личного сайта на движке Yazar; это исключительно инструмент разработчика для проверки самого пакета.
Смотри также
- Конфигурация — что публикует
yazar:installи за что отвечает каждая опцияconfig/yazar.php