Пользовательский релиз Composer

У меня есть GIT-репозиторий, который создает выпуски, которые можно загрузить и установить через Composer.

Эти выпуски в настоящее время создают архив, содержащий весь репозиторий. Проблема в том, что репозиторий огромен, и мне не нужно все содержимое.

Помимо этого существует процесс сборки, который компилирует, объединяет и т. Д. И предоставляет пакет, который намного меньше.

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

При нынешних обстоятельствах я не рассматриваю это как вариант. Даже если я загружаю пользовательский архив archive.tar.gz, он все равно загружает оригинальный файл tarball, полученный из тега GIT (тот огромный архив, содержащий каждый отдельный файл).

Есть ли решение этой проблемы?

3

Решение

Создайте свой собственный скрипт bash или shell, который сделает всю вашу грязную работу. Ваш bash-скрипт должен быть запущен во время установки через composer.
Включить, установить пакет, zip-архив и загрузить с помощью команды SCP в вашем скрипте. Это сделает все для вас. Не забудьте упомянуть в своих замечаниях по установке для меня, что пользователь должен запустить установку composer с привилегиями sudo или правами администратора.

Ниже приведены ссылки для использования сценариев оболочки.

https://getcomposer.org/doc/articles/scripts.md

https://edmondscommerce.github.io/composer/composer-run-utility-bash-script.html

0

Другие решения

Я считаю, что вы ищете, чтобы настроить ваш composer.json, который будет настроен для использования dist вместо auto для его preferred-install:

https://getcomposer.org/doc/06-config.md#preferred-install

Затем вы можете создать новый выпуск с соответствующим тегом в github и загрузить туда двоичные файлы.

PS: я не проверял это, но похоже, что это должно работать.

0

добавить в composer.json

"repositories": [
{
"type": "path",
"url": "./laravel-package-name"}
],

и создайте новую папку -Имя пакета Laravel с вашим кодом в папке проекта

0

Я закончил создание класса PHP для обработки pre-package-install событие, брошенное композитором.

<?php

namespace Company\Composer;

use Composer\Installer\PackageEvent;

require_once(__DIR__ . "/../../../vendor/autoload.php");

class EventHandler
{
public static function prePackageInstall(PackageEvent $event)
{
$operation = $event->getOperation();
$package = $operation->getPackage();
if ($package->getName() !== 'company/repo-name') {
return;
}

$distUrl = 'https://github.com/company/repo-name/releases/download/%s/archive.zip?access_token=%s';
$package->setDistUrl(sprintf($distUrl, "v" . $package->getFullPrettyVersion(), '[GITHUB-USER-TOKEN]'));
}
}

уведомление [GITHUB-USER-TOKEN] что необходимо, если пакет находится в частном репо (например, в моем случае).

В composer.json

"pre-package-install": [
"Company\\Composer\\EventHandler::prePackageInstall"],
0
По вопросам рекламы [email protected]