Привет, Хабр.
Предлагаю Вашему вниманию краткую статью-инструкцию по созданию, настройке и использованию личных рецептов (private recipes). Для этого нам понадобится: проект, репозиторий с бандлом, репозиторий с нашими рецептами.
Статья содержит много изображений, поэтому ссылки на репозитории размещаю здесь, а все остальное вынесу под кат.
Бандл: symfony-acme-bundle
Рецепты: symfony-recipes
Итак, поехали.
1) Создаем новый проект или используем существующий. Главное условие — это иметь установленный Symfony Flex. Я решил создать проект с нуля.
Для создания нового проекта используем команду

Проект успешно создан, а в установленных пакетах мы видим symfony/flex.
2) Создаем новый бандл (symfony-acme-bundle) или используем существующий. Я решил создать простой бандл с нуля и зарегистрировать его в packagist.org. Ссылку на репозиторий можно найти в начале статьи. Процессы создания и регистрации бандла я опустил, т.к. в них нет ничего сложного.
3) Подключение и настройка Symfony Flex Server. Для этого переходим на Symfony Recipes Server и кликаем на ссылку «register» в секции «Private Recipes BETA». Также можно зарегистрироваться через Symfony Flex Server.
Выбираем наш репозиторий с рецептами и нажимаем «Install».

После этого мы должны увидеть страницу с поздравлением.

4) Создаем рецепт.
Этот пункт я разбил на 2 части. Сначала мы создадим репозиторий, а затем добавим новый рецепт через pull request.
4.1) Создаем новый репозиторий (symfony-recipes) и добавляем файлы: LICENSE, config.json, README.md (опционально). Ссылку на репозиторий можно найти в начале статьи.
Нам очень важен config.json, а именно те данные, которые он содержит.
«01C1K60FQVPP7FN6C3YB6639RZ» — это ID нашего Symfony проекта. Найти его можно в файле composer.json проекта, созданного в п.1.
или выполнив в папке с проектом команду
4.2) Добавляем рецепт. Для этого создаем новую ветку (add-acme-recipe) и добавляем 3 файла: manifest.json, post-install.txt и config/packages/acme.yaml. Важный момент — название папки с рецептом должно совпадать с названием пакета (бандла) в packagist.org, а также должны совпадать версии. В нашем случае это «yurijbogdanov/acme-bundle» и версия «1.0».
Пример содержимого файлов:
yurijbogdanov/acme-bundle/1.0/manifest.json
yurijbogdanov/acme-bundle/1.0/post-install.txt
yurijbogdanov/acme-bundle/1.0/config/packages/acme.yaml
Далее добавляем нашу ветку с рецептом в удаленный репозиторий и делаем pull request.


Теперь несколько слов почему лучше добавлять рецепты через pull request, а не прямо в master (даже если вы работаете одни).
Каждый раз, когда вы делаете pull request ваш код будет проходить проверку ботом symfony-flex-server и даже малейшие отклонения от требований будут фиксироваться.

Кликнув по ссылке «Details», можно просмотреть какие именно ошибки были найдены ботом.

В случае успеха вы увидите approve от бота и сможете сделать merge в master.

Ветка успешно смерджена и теперь можно перейти к установке пакета (бандла).

5) Добавляем бандл в наш проект. Для этого переходим в папку с проектом и выполняем команду

Бандл успешно установлен с помощью нашего рецепта.
Рецепт внес следующие изменения в проект:
1) добавил бандл в config/bundles.php
2) добавил переменные окружения в .env.dist
3) добавил файл конфигурации acme.yaml в config/packages/
Спасибо за внимание.
Предлагаю Вашему вниманию краткую статью-инструкцию по созданию, настройке и использованию личных рецептов (private recipes). Для этого нам понадобится: проект, репозиторий с бандлом, репозиторий с нашими рецептами.
Статья содержит много изображений, поэтому ссылки на репозитории размещаю здесь, а все остальное вынесу под кат.
Бандл: symfony-acme-bundle
Рецепты: symfony-recipes
Итак, поехали.
1) Создаем новый проект или используем существующий. Главное условие — это иметь установленный Symfony Flex. Я решил создать проект с нуля.
Для создания нового проекта используем команду
composer create-project symfony/skeleton symfony-acme-project

Проект успешно создан, а в установленных пакетах мы видим symfony/flex.
2) Создаем новый бандл (symfony-acme-bundle) или используем существующий. Я решил создать простой бандл с нуля и зарегистрировать его в packagist.org. Ссылку на репозиторий можно найти в начале статьи. Процессы создания и регистрации бандла я опустил, т.к. в них нет ничего сложного.
3) Подключение и настройка Symfony Flex Server. Для этого переходим на Symfony Recipes Server и кликаем на ссылку «register» в секции «Private Recipes BETA». Также можно зарегистрироваться через Symfony Flex Server.
Выбираем наш репозиторий с рецептами и нажимаем «Install».

После этого мы должны увидеть страницу с поздравлением.

4) Создаем рецепт.
Этот пункт я разбил на 2 части. Сначала мы создадим репозиторий, а затем добавим новый рецепт через pull request.
4.1) Создаем новый репозиторий (symfony-recipes) и добавляем файлы: LICENSE, config.json, README.md (опционально). Ссылку на репозиторий можно найти в начале статьи.
Нам очень важен config.json, а именно те данные, которые он содержит.
{ "projects": { "01C1K60FQVPP7FN6C3YB6639RZ": "Symfony Acme Project" } }
«01C1K60FQVPP7FN6C3YB6639RZ» — это ID нашего Symfony проекта. Найти его можно в файле composer.json проекта, созданного в п.1.
{ "extra": { "symfony": { "id": "01C1K60FQVPP7FN6C3YB6639RZ", "allow-contrib": false } } }
или выполнив в папке с проектом команду
composer config extra.symfony.id
4.2) Добавляем рецепт. Для этого создаем новую ветку (add-acme-recipe) и добавляем 3 файла: manifest.json, post-install.txt и config/packages/acme.yaml. Важный момент — название папки с рецептом должно совпадать с названием пакета (бандла) в packagist.org, а также должны совпадать версии. В нашем случае это «yurijbogdanov/acme-bundle» и версия «1.0».
Пример содержимого файлов:
yurijbogdanov/acme-bundle/1.0/manifest.json
{ "bundles": { "Acme\\AcmeBundle": ["all"] }, "copy-from-recipe": { "config/": "%CONFIG_DIR%/" }, "env": { "ACME_FOO": "hello", "ACME_BAR": "world" } }
yurijbogdanov/acme-bundle/1.0/post-install.txt
<bg=blue;fg=white> </> <bg=blue;fg=white> Next: Configuration </> <bg=blue;fg=white> </> * Modify your ACME_FOO config in <fg=green>.env</> * Modify your ACME_BAR config in <fg=green>.env</> * Configure your parameters in <fg=green>config/packages/acme.yaml</>
yurijbogdanov/acme-bundle/1.0/config/packages/acme.yaml
acme: foo: hello bar: world
Далее добавляем нашу ветку с рецептом в удаленный репозиторий и делаем pull request.


Теперь несколько слов почему лучше добавлять рецепты через pull request, а не прямо в master (даже если вы работаете одни).
Каждый раз, когда вы делаете pull request ваш код будет проходить проверку ботом symfony-flex-server и даже малейшие отклонения от требований будут фиксироваться.

Кликнув по ссылке «Details», можно просмотреть какие именно ошибки были найдены ботом.

В случае успеха вы увидите approve от бота и сможете сделать merge в master.

Ветка успешно смерджена и теперь можно перейти к установке пакета (бандла).

5) Добавляем бандл в наш проект. Для этого переходим в папку с проектом и выполняем команду
composer require yurijbogdanov/acme-bundle

Бандл успешно установлен с помощью нашего рецепта.
Symfony operations: 1 recipe (7302152d871c6cc69ec5de45f91d1b38) - Configuring yurijbogdanov/acme-bundle (>=1.0): From github.com/yurijbogdanov/symfony-recipes:master
Рецепт внес следующие изменения в проект:
1) добавил бандл в config/bundles.php
<?php return [ Symfony\Bundle\FrameworkBundle\FrameworkBundle::class => ['all' => true], Acme\AcmeBundle::class => ['all' => true], ];
2) добавил переменные окружения в .env.dist
###> yurijbogdanov/acme-bundle ### ACME_FOO=hello ACME_BAR=world ###< yurijbogdanov/acme-bundle ###
3) добавил файл конфигурации acme.yaml в config/packages/
Спасибо за внимание.
