У меня есть настроенный Symfony-проект и пользовательский поставщик. В composer.json
проекта тип имеет значение "project". Для обновления моего поставщика я использую composer update
. Все идет нормально.
Но как мне обновить сам проект? Он установлен композитором create-project
, но я знаю, что для композитора не существует такого update-project
. Какова наилучшая стратегия для поддержания моего "скелета" в актуальном состоянии? Использование git потребует init git
репозитория и проверки правильной ветки/тега. Так что это не мое любимое решение для конечных пользователей и управление релизами. Какие другие методологии можно использовать для решения этого сценария?
Нет лучшей альтернативы, так как скелет полностью свободен. Вы можете использовать Symfony, просто добавив зависимость symfony/symfony
и создав собственную структуру каталогов.
Это означает, что, хотя большинство проектов начинаются с скелета, проекты могут настраивать его в соответствии с их потребностями. Кроме того, некоторые пакеты, включенные скелетом, могут быть удалены из проекта или проект использует разные настройки, чем скелет.
Каждый раз, когда выпущена новая версия скелета, вы можете проверить diff (например, https://github.com/symfony/symfony-standard/compare/v2.7.2...v2.7.3) и проверить изменения и применить изменения на ваш проект, когда они необходимы в вашем проекте.
На данный момент я тестирую другой подход. Я создал bash-скрипт, который входит в состав composer.json в части после установки и после обновления. Я знаю, что это должно существовать, но с этим, конечный пользователь должен сделать только composer update
composer.json
[...]
"scripts": {
"post-install-cmd": [
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::removeSymfonyStandardFiles",
"chmod +x init_update_app && ./init_update_app"
],
"post-update-cmd": [
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installRequirementsFile",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::removeSymfonyStandardFiles",
"chmod +x update_app && ./update_app"
]
},
[...]
После установки:
#!/bin/bash
if ! git ls-remote origin > /dev/null; then
git init
git remote add origin https://github.com/xxx/xxx.git
fi
git fetch --tags
latestTag=$(git describe --tags 'git rev-list --tags --max-count=1')
git checkout $latestTag
Post-Update:
#!/bin/bash
git fetch --tags
latestTag=$(git describe --tags 'git rev-list --tags --max-count=1')
git checkout $latestTag
Какие-либо недостатки такого подхода? Я знаю, что git необходимо установить, но это не проблема. Сценарии можно было бы улучшить, проверив существующий тег, чтобы снова не проверять один и тот же тег или проверить, установлен ли git...