Як конфігурувати та використовувати приватні сховища рецептів Flex

Дата оновлення перекладу 2022-11-24

Як конфігурувати та використовувати приватні сховища рецептів Flex

Починаючи з релізу версії 1.16 symfony/flex, ви можете створювати власні приватні сховища рецептів Symfony Flex, і безпроблено інтегрувати їх в установку паккетів composer та процес обслуговування.

Це особливо корисно, якщо у вас є приватні пакети, які повинні виконувати власні задачі установки. Щоб зробити це, вам потрібно виконати декілька кроків:

  • Створити приватне сховище GitHub;
  • Створити свої приватні рецепти;
  • Створити індекс рецептів;
  • Зберегти ваші рецепти у приватному сховищі;
  • Гарантувати composer доступ до приватного сховища;
  • Сконфігурувати файл вашого проекту composer.json; і
  • Встановити рецепти у ваш проект.

Створіть приватне сховище GitHub

Увійдіть у свій акаунт GitHub.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, який міститиме записи для всіх ваших приватних рецептів та іншу загальну інформацію конфігурації.

Файл 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 на власні деталі.

Збережіть ваші рецепти у приватному сховищі

Завантажте файл(и) рецепту(ів) .json і файл index.json у кореневий каталог вашого приватного сховища GitHub.

Гарантуйте composer доступ до приватного сховища

У вашому акаунті GitHub, натисніть на іконку вашого акаунту у правому верхньому кутку, оберіть Settings і Developer Settings. Потім, оберіть Personal Access Tokens.

Згенеруйте новий токен доступу з привілеями Full control of private repositories. Скопіюйте значення токена, перемкніться на термінал вашого локального компʼютера і виконайте наступну команду:

1
$ composer config --global --auth github-oauth.github.com [token]

Замініть [token] на значення вашого особистого токена доступу GitHub.

Сконфігуруйте файл composer.json вашого проекту

Додайте наступне до вашого файлу проекту 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.

Встановіть рецепти у ваш проект

Якщо ваші приватні пакети ще не були встановлені у вашому проекті, виконайте наступну команду:

1
$ composer update

Якщо приватні пакети вже були встановлені, і ви просто хочете встановити нові приватні рецепти, виконайте наступну команду:

1
$ composer recipes