Как конфигурировать и использовать приватные хранилища рецептов Flex
Дата обновления перевода 2024-07-29
Как конфигурировать и использовать приватные хранилища рецептов Flex
Начиная с релиза версии 1.16 symfony/flex
, вы можете создавать свои
собственные приватные хранилища рецептов Symfony Flex, и беспроблемно интегрировать
их в установку пакетов composer
и процесс обслуживания.
Это особенно полезно, если у вас есть приватные пакеты, которые должны выполнять собственные задачи установки. Чтобы сделать это, вам нужно выполнить несколько шагов:
- Создать приватное хранилище GitHub;
- Создать свои приватные рецепты;
- Создать индекс рецептов;
- Сохранить ваши рецепты в приватное хранилище;
- Гарантировать
composer
доступ к приватному хранилищу; - Сконфигурировать файл вашего проекта
composer.json
; и - Установить рецепты в ваш проект.
Создайте приватное хранилище
GitHub
Войдите в свой аккаунт GitHub.com, нажмите на иконку вашего аккаунта в верхнем правом углу, и выберите Ваши хранилища. Затем нажмите кнопку Новое, заполните имя хранилища, выберите селективную кнопку Приватное, и нажмите на кнопку Создать хранилище.
Gitlab
Войдите в свой аккаунт Gitlab.com, нажмите кнопку Новый проект, выберите Создать пустой проект, заполните Имя проекта, выберите Приватный. и нажмите кнопку Создать проект.
Создайте ваши приватные рецепты
Рецепт symfony/flex
- это JSON-файл, который имеет следующую структуру:
1 2 3 4 5 6 7 8 9
{
"manifests": {
"acme/package-name": {
"manifest": {
},
"ref": "7405f3af1312d1f9121afed4dddef636c6c7ff00"
}
}
}
Если ваш пакет является приватным пакетом Symfony, у вас в рецепте будет следующее:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
{
"manifests": {
"acme/private-bundle": {
"manifest": {
"bundles": {
"Acme\\PrivateBundle\\AcmePrivateBundle": [
"all"
]
}
},
"ref": "7405f3af1312d1f9121afed4dddef636c6c7ff00"
}
}
}
Замените acme
и private-bundle
на ваши собственные детали пакета. Запись
"ref"
- это произвольная строка из 40 символов, используемая composer
, чтобы
определить, был ли изменен ваш рецепт. Каждый раз, когда вы будете вносить изменения
в ваш рецепт, вам также нужно будет генерировать новое значение "ref"
.
Tip
Используйте следующий PHP-скрипт, чтобы сгенерировать произвольное
значение "ref"
:
1
echo bin2hex(random_bytes(20));
Запись "all"
говорит symfony/flex
создать запись в вашем файле проекта
bundles.php
для всех окружений. Чтобы загрузить ваш пакет только для окружения
dev
, замените "all"
на "dev"
.
Имя вашего JSON-файла рецепта должно соответствовать следующим соглашениям,
где 1.0
- это номер версии вашего пакета (замените acme
и
private-bundle
на ваши собственные приватные детали пакета):
acme.private-bundle.1.0.json
Вы скорее всего также захотите, чтобы symfony/flex
создал файлы конфигурации
для вашего пакета в каталоге проекта /config/packages
. Чтобы сделать это, измените
JSON-файл рецепта следующим образом:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
{
"manifests": {
"acme/private-bundle": {
"manifest": {
"bundles": {
"Acme\\PrivateBundle\\AcmePrivateBundle": [
"all"
]
},
"copy-from-recipe": {
"config/": "%CONFIG_DIR%"
}
},
"files": {
"config/packages/acme_private.yaml": {
"contents": [
"acme_private:",
" encode: true",
""
],
"executable": false
}
},
"ref": "7405f3af1312d1f9121afed4dddef636c6c7ff00"
}
}
}
Чтобы увидеть больше примеров того, что вы можете добавить в файл рецепта, просмотрите файлы рецептов Symfony.
Создайте индекс рецептов
Следующий шаг - создать файл index.json
, который будет содержать записи
для всех ваших приватных рецептов, и другую общую информацию конфигурации.
GitHub
Файл index.json
имеет следующий формат:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
{
"recipes": {
"acme/private-bundle": [
"1.0"
]
},
"branch": "master",
"is_contrib": true,
"_links": {
"repository": "github.com/your-github-account-name/your-recipes-repository",
"origin_template": "{package}:{version}@github.com/your-github-account-name/your-recipes-repository:master",
"recipe_template": "https://api.github.com/repos/your-github-account-name/your-recipes-repository/contents/{package_dotted}.{version}.json"
}
}
Создайте запись в "recipes"
для каждого из рецептов вашего пакета. Замените
your-github-account-name
и your-recipes-repository
на собственные детали.
Gitlab
Файл index.json
имеет следующий формат:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
{
"recipes": {
"acme/private-bundle": [
"1.0"
]
},
"branch": "main",
"is_contrib": true,
"_links": {
"repository": "gitlab.com/your-gitlab-account-name/your-recipes-repository",
"origin_template": "{package}:{version}@gitlab.com/your-gitlab-account-name/your-recipes-repository:main",
"recipe_template": "https://gitlab.com/api/v4/projects/your-gitlab-project-id/repository/files/{package_dotted}.{version}.json/raw?ref=main"
}
}
Создайте запись в «recipes»
для каждого из ваших рецептов пакета. Замените
your-gitlab-account-name
, your-gitlab-repository
и your-gitlab-project-id
на свои собственные данные.
Сохраните ваши рецепты в приватном хранилище
Загрузите файл(ы) рецепта(ов) .json
и файл index.json
в корневой
каталог вашего приватного хранилища GitHub.
Гарантируйте composer
доступ к приватному хранилищу
GitHub
В вашем аккаунте GitHub, нажмите на иконку вашего аккаунта в правом верхнем углу,
выберите Settings
и Developer Settings
. Затем, выберите Personal Access Tokens
.
Сгенерируйте новый токен доступа с привилегиями
Full control of private repositories
. Скопируйте значение токена, переключитесь
на терминал вашего локального компьюетра, и выполните следующую команду:
1
$ composer config --global --auth github-oauth.github.com [token]
Замените [token]
на значение вашего личного токена доступа GitHub.
Gitlab
В своем аккаунте Gitlab нажмите на значок своего аккаунта в правом верхнем углу, выберите
Preferences
и Access Tokens
.
Сгенерируйте новый персональный токен доступа с диапазонами read_api
и read_repository
. Скопируйте значение токена доступа, переключитесь на терминал вашего локального
компьютера и выполните следующую команду:
1
$ composer config --global --auth gitlab-token.gitlab.com [token]
Замените [token]
значением вашего персонального токена доступа к Gitlab.
Сконфигурируйте файл composer.json
вашего проекта
GitHub
Добавьте следующее к вашему файлу проекта composer.json
:
1 2 3 4 5 6 7 8 9 10
{
"extra": {
"symfony": {
"endpoint": [
"https://api.github.com/repos/your-github-account-name/your-recipes-repository/contents/index.json",
"flex://defaults"
]
}
}
}
Замените your-github-account-name
и your-recipes-repository
на собственные детали.
Tip
Клюс extra.symfony
скорее всего будет существовать в вашем
composer.json
. В таком случае, добавьте ключ "endpoint"
к существующей
записи extra.symfony
.
Tip
URL endpoint
должен указывать на https://api.github.com/repos
, а
не на https://www.github.com
.
Gitlab
Добавьте следующее в файл composer.json
вашего проекта:
1 2 3 4 5 6 7 8 9 10
{
"extra": {
"symfony": {
"endpoint": [
"https://gitlab.com/api/v4/projects/your-gitlab-project-id/repository/files/index.json/raw?ref=main",
"flex://defaults"
]
}
}
}
Замените your-gitlab-project-id
на свои данные.
Tip
Ключ extra.symfony
, скорее всего, уже существует в вашем
composer.json
. В таком случае добавьте ключ "endpoint"
к существующей записи
extra.symfony
.
Установите рецепты в ваш проект
Если ваши приватные пакеты еще не были установлены в вашем проекте, выполните следующую команду:
1
$ composer update
Если приватные пакеты уже были установлены, и вы просто хотите установить новые приватные рецепты, выполните следующую команду:
1
$ composer recipes