Частный репозиторий Satis - структура

1

РЕДАКТИРОВАТЬ

Я думаю, что я неправильно понял satis, теперь это мое новое понимание, пожалуйста, поправьте меня, если я ошибаюсь:

В satis.json я должен указать URL-адреса пакетов, которые я хочу зеркалировать, например, доктрина git repo, yaml git repo... Затем satis зеркалирует все эти пакеты на моем сервере. Это означало бы, что мне нужно добавить один раз все пакеты, используемые в моем проекте composer.json моего проекта, в satis json (около 20 пакетов/требований). Теперь я могу добавить свой приватный репозиторий satis в файл composer.json моего проекта, а при запуске "composer update" он сначала будет искать в зеркальных пакетах satis для требуемого пакета. Правильно ли я это понял?

Ситуация:

Я пытаюсь использовать Satis для частного репозитория композиторов. У меня есть частный проект на github для моего веб-сайта. В проекте я использую композитор, и поэтому у меня есть композитор.json в корне проекта. Он выглядит следующим образом:

{
   "name": "Peter North",
   "license": "proprietary",
   "type": "project",
   "autoload": {
      "psr-4": {
        "": "src/"
      }
   },
   "require": {
      "php": ">=5.3.9",
      "symfony/http-foundation": "dev-master"
   }
   ...
}

Теперь я хотел использовать свой приватный репозиторий satis url: packages.ait.company, работающий на apache и доступный до сих пор. Satis.json выглядит следующим образом:

{
   "name": "AIT Company",
   "homepage": "packages.ait.com",
   "repositories": [
       {
           "type": "vcs",
           "url": "[email protected]:north/ait.git" // this is the url of my private github project
       }
   ],
   "require-all": true,
   "require-dependencies": true,
   "archive": {
       "directory": "dist",
       "format": "tar",
       "skip-dev": true
   }
}

Я думаю, что я не очень хорошо понимал, как структурировать файл satis.json и что он должен содержать, потому что, как я пытаюсь, он не загружает пакеты "php" и "symfony/http-foundation", которые я указал в файле composer.json - хотя он загружает правильный файл composer.json проекта в /satis/include каталог json файла.

Как должен выглядеть satis.json, когда я хочу прочитать композитор.json моего проекта из github и создать приватный репозиторий satis для "require entries"?

Теги:
composer-php
satis

1 ответ

1
Лучший ответ

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

На первом этапе загружаются метаданные внешних зависимостей и помещаются в промежуточный репозиторий satis. Конфигурация явно не "требует-все", но имеет явные инструкции всех используемых пакетов (и некоторые из них, которые могут использоваться или использовались в прошлом) с открытым шаблоном версии, то есть "symfony/console":">=2.4" (нет тильды или каретки - я хочу получить основные обновления версии здесь). Добавление require-dependencies:true сканирует все зависимости всех необходимых пакетов и добавляет их в коллекцию метаданных.

Результат сохраняется в каталоге "внешний".

Второй шаг отвечает за сканирование всех пакетов из внутренних "репозиториев" и создание из них архивов. Это, очевидно, список всех частных репозиториев, но трюк: вы также можете добавить в satis.json репозиторий типа "композитор" - и именно там я добавляю внешний репозиторий с метаданными из внешних пакетов. Добавление его здесь добавляет все версии внешних пакетов в список версий, для которых необходимо создать ZIP файлы.

Запуск его в первый раз занимает много времени из-за всех пакетов, которые необходимо загрузить (и созданных локально из частных репозиториев). Запуск после этого - просто инкрементное обновление только новых версий, которые ранее не были созданы.

Ключ состоит в том, чтобы настроить сбор внешних пакетов без ZIP-адресов и с явными диапазонами версий ("*", поскольку версия будет работать, но использовать ее, только если вам действительно нужны все версии) в одном файле Satis, а затем добавить результирующий репозиторий во вторую конфигурацию Satis, Вы не можете объединить две операции (только создание ZIP-адресов выбранных внешних зависимостей вместе с ZIP файлами ВСЕХ внутренних репозиториев) в один запуск Satis.

Еще один совет: вы, вероятно, только хотите создать локальные копии внешних зависимостей, чтобы избежать столкновения с отключением Github при развертывании на производство (или разрабатывать и нуждаться в этом обновлении). Чтобы гарантировать, что каждая используемая зависимость находится в моем Satis, я добавил оба репозитория Satis для каждого composer.json, а также для "packagist":false, чтобы отключить прямой контакт с Packagist. Вы не можете просто добавить случайный пакет, тогда он должен быть в вашем локальном репозитории Satis.

  • 0
    Вау! Большое спасибо за это прекрасное объяснение. Все работает сейчас! :-) У меня остался один вопрос: я указал в части «require» моего файла happ.json «symfony / symfony»: «> = 2.3». Это утверждение загружает все версии, а не только "> 2.3". Если я поставлю «symfony / symfony»: «> = v2.3», он загрузит только версию «> = 2.3». Проблема в том, что некоторые репозитории не всегда используют одно и то же соглашение об именах, иногда они имеют «v.2.x», а иногда они используют только «2.x». Satis не будет автоматически добавлять / удалять недостающую букву «v», а затем просто загружает все версии. Как я могу избежать этого? Еще раз спасибо!
  • 0
    Satis использует Composer для внутреннего использования, а Composer дезинфицирует все идентификаторы версий - поэтому наличие «v» или нет не имеет значения. Обратите внимание, что даже если вам требуется Symfony 2.3 или выше, это также загрузит все зависимости Symfony, и если эти пакеты имеют зависимости от более ранних версий Symfony, эти версии также загружаются. Требование к версии - это не абсолютный фильтр, а начальный загрузчик для получения зависимостей, которые вам абсолютно необходимы. В конце концов, каждая версия, которая может быть разрешена где-то, будет найдена и добавлена.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню