Как Symfony управляет подпакетами Компонента с помощью Git и Composer?

Я пытаюсь выяснить, какой рабочий процесс использует Symfony для создания отдельных пакетов для каждого компонента Symfony (и Bridge, или Bundle), и в то же время включать их все в основную платформу Symfony.

Фреймворк и каждый компонент имеют свои composer.json файлы:

Symfony
├── Component
|   ├── Component1
|   |   ├── ...
|   |   └── composer.json
|   ├── Component2
|   |   ├── ...
|   |   └── composer.json
|   └── ...
└── ...

Я хотел бы создать проект подобным образом. Как Symfony использует поддеревья Git для отслеживания фреймворка и компонентов таким образом, чтобы их можно было устанавливать по отдельности или вместе с composer? Поддерживает ли фреймворк отдельный репозиторий для каждого пакета? Этот процесс автоматизирован? Кажется, много работы по обновлению всех пакетов компонентов вручную.

3

Решение

Каждый компонент и пакет в Symfony имеет свой собственный репозиторий на Github. Они используются только для packagist и поэтому они только для чтения. Все работы проходят в основном хранилище.

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

Я также использую разделение на поддерево, чтобы распространять свои пакеты в подпозитории внутри задачи jenkin.

Вот небольшое руководство, чтобы добавить разделение поддерева в ваш основной репозиторий и как распространить его обратно в свои репозитории. Пример перенесен в ваш пример структуры каталогов, а владельцем репозиториев является Acme.

    #execute in subtree repository
$ git init
$ git commit -a -m "init"$ git remote add origin git@github.com:Acme/Component1.git
$ git push -u origin master
    #execute in main repository
$ git remote add -f Component1 git@github.com:Acme/Component1.git
$ git subtree add --prefix Symfony/Component/Component1 --squash Component1/master
$ git subtree push --prefix=Symfony/Component/Component1 Component1 master
    #execute in main repository on a webhook in e.g. jenkins
$ git remote add -f Component1 git@github.com:Acme/Component1.git #only if you haven't add it before
$ git subtree push --prefix=Symfony/Component/Component1 Component1 master

Надеюсь, что это может помочь настроить вашу инфраструктуру.

6

Другие решения

Я не знаю точную процедуру, которой придерживается Symfony.

Но на практике существует множество возможных различных путей.

Самым простым кажется использование bash сценарий, подобный предоставленному Вот.

Или, может быть, вы хотите настроить более сложный поток, как тот, который настроен для Zend Framework.

Другое решение — использовать сам PHP и Composer, как описано Вот.

Это действительно зависит от ваших потребностей.

Но ссылки, которые я предоставил, должны стать хорошей отправной точкой, чтобы лучше понять, как настроить хороший рабочий процесс.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector