[Из песочницы] Symfony Flex Private Recipes: создание, настройка и использование

Привет, Хабр.

Предлагаю Вашему вниманию краткую статью-инструкцию по созданию, настройке и использованию личных рецептов (private recipes). Для этого нам понадобится: проект, репозиторий с бандлом, репозиторий с нашими рецептами.

Статья содержит много изображений, поэтому ссылки на репозитории размещаю здесь, а все остальное вынесу под кат.

Бандл: symfony-acme-bundle
Рецепты: symfony-recipes

Итак, поехали.

1) Создаем новый проект или используем существующий. Главное условие — это иметь установленный Symfony Flex. Я решил создать проект с нуля.

Для создания нового проекта используем команду

composer create-project symfony/skeleton symfony-acme-project


gg6yimna9my_lxazyrzr3ye0gfm.jpeg

Проект успешно создан, а в установленных пакетах мы видим symfony/flex.

2) Создаем новый бандл (symfony-acme-bundle) или используем существующий. Я решил создать простой бандл с нуля и зарегистрировать его в packagist.org. Ссылку на репозиторий можно найти в начале статьи. Процессы создания и регистрации бандла я опустил, т.к. в них нет ничего сложного.

3) Подключение и настройка Symfony Flex Server. Для этого переходим на Symfony Recipes Server и кликаем на ссылку «register» в секции «Private Recipes BETA». Также можно зарегистрироваться через Symfony Flex Server.

Выбираем наш репозиторий с рецептами и нажимаем «Install».

2vfrcca_l0e-qmybabva_84yaoo.jpeg

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

zkwml_uah0vqzvegs_sut2y_qda.jpeg

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

                     
 Next: Configuration 
                     

  * Modify your ACME_FOO config in .env
  * Modify your ACME_BAR config in .env
  * Configure your parameters in config/packages/acme.yaml


yurijbogdanov/acme-bundle/1.0/config/packages/acme.yaml

acme:
    foo: hello
    bar: world


Далее добавляем нашу ветку с рецептом в удаленный репозиторий и делаем pull request.

zprc_grlis78mdk5ezaxfmjgvpi.jpeg

sgvtprly7ekfa89iuiijep2edmq.jpeg

Теперь несколько слов почему лучше добавлять рецепты через pull request, а не прямо в master (даже если вы работаете одни).

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

kupsidueotlz3ditouq8hh92ah0.jpeg

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

kzg6l-jxn78tnjuealsg9wmewgi.jpeg

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

95jabq_mvabvcgmqnpd-fe0hieo.jpeg

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

k-bpktzwuatb8nkficpzum9qe7i.jpeg

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

composer require yurijbogdanov/acme-bundle


yizq_4nhgeqrargjau3ngw2ua8y.jpeg

Бандл успешно установлен с помощью нашего рецепта.


Symfony operations: 1 recipe (7302152d871c6cc69ec5de45f91d1b38)
  - Configuring yurijbogdanov/acme-bundle (>=1.0): From github.com/yurijbogdanov/symfony-recipes:master


Рецепт внес следующие изменения в проект:

1) добавил бандл в config/bundles.php

 ['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/

Спасибо за внимание.

© Habrahabr.ru