Разрабатывая закрытое REST API по рабочему проекту, необходимо было написать SDK. В обоих случаях реализация на PHP, при этом SDK распространяемый composer пакет внутри компании, он должен быть таким же приватным как и сама реализация.
Недавно мы начали использовать Container Registry входящий в состав Gitlab, понравилось, было решено попробовать Package Registry для пакетов composer.
Есть документация Gitlab про реестр пакетов, а есть конкретный мануал по размещению и использованию composer пакетов.
Работать с Package Registry просто и понятно. Кратко рассмотрим этапы работы.
Создаем репозиторий composer пакета в Gitlab с composer.json внутри. Репозиторий должен находится в группе проектов, а размещаться будет непосредственно в проекте репозитория.
Затем необходимо создать тег в репозитории назвав его версией указанной в composer.json в соответсвии со спецификацией Compsoer.
Список всех пакетов группы будет доступен в разделе Packages & Registries > Package Registry.

Публиковать пакет можно по приватному или деплой токену, по этим же данным можно его получать как composer зависимость. Я выбрал приватный. Публикация происходит путем отправки http запроса:
curl --data tag=<tag> "https://__token__:<personal-access-token>@gitlab.example.com/api/v4/projects/<project_id>/packages/composer"
где:
personal-access-token - персональный токен доступаproject_id - идентификатор проектаtag - ранее созданный тег git репозиторияПубликовать можно не только тег, но и ветку, для этого в запросе вместо
tag=нужно указатьbranch=
Формируем config.json через командную строку composer:
composer config repositories.<group_id> composer https://gitlab.example.com/api/v4/group/<group_id>/-/packages/composer/
composer config gitlab-domains <DOMAIN-NAME>
где:
group_id - идентификатор группы проектов, в котором размещается пакетDOMAIN-NAME - имя домена с Gitlabcomposer.json будет создан (или дополнен, если уже существовал) с данными "откуда брать пакеты". Пример:
{
"repositories": [{
"type": "composer",
"url": "https://my-gitlab.ru/api/v4/group/106/-/packages/composer/"
}],
"config": {
"gitlab-domains": ["my-gitlab.ru"]
},
"require": {
"mygroup/mypackeage": "dev-main"
}
}
Так как у нас закрытая группа (и проект), то необходимо указать персональный токен доступа:
composer config gitlab-token.<DOMAIN-NAME> <personal_access_token>
Будет создан файл auth.json с токеном доступа на указанный инстанс Gitlab:
{
"gitlab-token": {
"my-gitlab.ru": "glp8t-48Sh68Dtw7nwer3Em"
}
}
auth.jsonнеобходимо поместить в.gitignoreчтобы авторизационные данные не попали в репозиторий. Если необходимо пробрасывать данные в Gitlab можно воспользоваться переменными CI/CD.
Как видно ничего сложного и вполне удобно. Если использовать Gitlab, то нет необходимости прибегать к иным средствам распространения приватных composer пакетов.