Кэширование composer-репозиториев

Мой проект (МП) использует много кода который писали внешние разработчики. Этот код надежен и протестирован. Им пользуется большое количество людей. Он стабилен. Этот код постоянно изменяется и тербует обновления, потому что исправляются баги и делаются фичи.

Для того что бы рационально управлять внешними зависимостями мы используем composer и храним код в нашем репозитории.

Проблемы

  1. В код вендоров вносятся наши изменения. Это недопустимо, тк внешние разработчики об этом не знают и рушится целостность. При обновлении появляются конфликты, которые надо решать нашим разработчикам.
  2. Внешние репозитории не гарантируют доступности. Часто бывало что нет доступа, либо скорость "крайне мала". Это недопустимо для быстрого CI

Не смотря на это, есть смысл в том, чтобы вынести внешние зависимости из репозитория МП.

  • Это обеспечит стабильность внешних репозиториев, так как они будут использоваться регулярно всеми разработчиками и при сборке релиза.
  • Это сократит зависимость от github и packagist (внешние сервисы которые мы не контролируем и никак не можем гарантировать их доступность).

Решено использовать паттерн 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}
    ]
}

Проблема 1

В сатисе слетели хеши репозиториев (хеши теперь другие) и 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

Удачки.


07.04.2015 15:53