Я пытаюсь выяснить, какой рабочий процесс использует Symfony для создания отдельных пакетов для каждого компонента Symfony (и Bridge, или Bundle), и в то же время включать их все в основную платформу Symfony.
Фреймворк и каждый компонент имеют свои composer.json файлы:
Symfony
├── Component
| ├── Component1
| | ├── ...
| | └── composer.json
| ├── Component2
| | ├── ...
| | └── composer.json
| └── ...
└── ...
Я хотел бы создать проект подобным образом. Как Symfony использует поддеревья Git для отслеживания фреймворка и компонентов таким образом, чтобы их можно было устанавливать по отдельности или вместе с composer? Поддерживает ли фреймворк отдельный репозиторий для каждого пакета? Этот процесс автоматизирован? Кажется, много работы по обновлению всех пакетов компонентов вручную.
Каждый компонент и пакет в Symfony имеет свой собственный репозиторий на Github. Они используются только для packagist и поэтому они только для чтения. Все работы проходят в основном хранилище.
После каждой фиксации все изменения будут отправлены в репозитории только для чтения. Скрипт не является общедоступным, насколько я знаю, но вы можете прочитать немного о том, как fabien его реализует Вот
Я также использую разделение на поддерево, чтобы распространять свои пакеты в подпозитории внутри задачи jenkin.
Вот небольшое руководство, чтобы добавить разделение поддерева в ваш основной репозиторий и как распространить его обратно в свои репозитории. Пример перенесен в ваш пример структуры каталогов, а владельцем репозиториев является Acme.
#execute in subtree repository
$ git init
$ git commit -a -m "init"$ git remote add origin [email protected]:Acme/Component1.git
$ git push -u origin master
#execute in main repository
$ git remote add -f Component1 [email protected]: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 [email protected]:Acme/Component1.git #only if you haven't add it before
$ git subtree push --prefix=Symfony/Component/Component1 Component1 master
Надеюсь, что это может помочь настроить вашу инфраструктуру.
Я не знаю точную процедуру, которой придерживается Symfony.
Но на практике существует множество возможных различных путей.
Самым простым кажется использование bash
сценарий, подобный предоставленному Вот.
Или, может быть, вы хотите настроить более сложный поток, как тот, который настроен для Zend Framework.
Другое решение — использовать сам PHP и Composer, как описано Вот.
Это действительно зависит от ваших потребностей.
Но ссылки, которые я предоставил, должны стать хорошей отправной точкой, чтобы лучше понять, как настроить хороший рабочий процесс.