Мой проект (МП) использует много кода который писали внешние разработчики. Этот код надежен и протестирован. Им пользуется большое количество людей. Он стабилен. Этот код постоянно изменяется и тербует обновления, потому что исправляются баги и делаются фичи.
Для того что бы рационально управлять внешними зависимостями мы используем composer и храним код в нашем репозитории.
Проблемы
Не смотря на это, есть смысл в том, чтобы вынести внешние зависимости из репозитория МП.
Решено использовать паттерн cache proxy.
Мы берем все наши зависимости, загружаем их на наш сервис и обновляем когда надо. МП использует только наш сервис.
Решение
На отдельном сервере поднимаем satis. В него прописываем packagist.com как основной репозиторий, дополнительные, если надо. В require прописываем все зависимости МП. И требуем загрузку зависимостей.
ssh://hg@proxy.yapro.ru/special/jetkit/satis/proxy
Файл config.json
{
"name": "Proxy/Satis",
"homepage": "http://proxy.satis.yapro.ru/",
"repositories": [
{
"type": "git",
"url": "https://github.com/nrk/predis/"
}
...
{ "type": "composer", "url": "https://packagist.org" }
],
"archive": {
"directory": "dist"
},
"require": {
"symfony/config": "2.5.5"
...
},
"require-dependencies": true
}
Для добавления зависимостей надо дописать их в require и запушить, а cron обновит все пакеты раз в минуту
В composer.json в раздел repositories надо ввести адрес нашего satis и запретит packagist
{
"repositories": [
{"type": "composer", "url": "http://proxy.satis.yapro.ru"},
{"packagist": false}
]
}
В сатисе слетели хеши репозиториев (хеши теперь другие) и composer выдает ошибку:
[RuntimeException]
git was not found in your PATH, skipping source download
ИЛИ
The checksum verification of the file failed
Решение: rm -rf vendor/composer && composer update --lock
Удачки.