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

Предлагаю Вашему вниманию краткую статью-инструкцию по созданию, настройке и использованию личных рецептов (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/

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

Комментарии (1)


  1. Koc
    24.12.2017 17:39

    А на битбакете как-то можно хостить свои приватные рецепты с репозиториями?