Paquete de lanzamiento personalizado Composer

Tengo un repository de GIT que crea versiones que se pueden download e instalar a través de Composer.

Esas versiones actualmente crean tarball que contiene el repository completo. El problema es que el repository es enorme y no necesito todo el contenido.

Aparte de eso, hay un process de compilation que se comstack, combina, etc. y proporciona un package mucho más pequeño.

Lo que me gustaría es upload el file que proviene del process de compilation y proporcionar ese package como descarga cuando el compositor lo solicite.

Tal como están las cosas, no veo eso como una opción. Incluso si cargo un file personalizado, el compositor todavía descarga el file tarball original que proviene de la label GIT (ese gran tarball que contiene cada file).

¿Hay alguna solución para este problema?

Cree su propio script bash o shell que haga todo su trabajo sucio. su script bash debe ser activado durante la installation vía compositor. Incluye, installation del package, file zip y carga a través del command SCP dentro de tu script. Este hará todo para ti. Asegúrese de mencionar en sus notas de installation de lectura, que el usuario necesita ejecutar la installation del compositor con privilegios de sudo o privilegios de administrador de derechos.

A continuación hay algunos enlaces para reference para usar scripts de shell

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

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

Creo que lo que estás buscando sería configurar tu composer.json para que se configure para usar dist lugar de auto para su installation prefernetworking-install :

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

Luego puedes crear una nueva versión con la label apropiada en github y upload los binarys allí.

PD: No he probado esto, pero parece que debería funcionar.

agregar en composer.json

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

y crea una nueva carpeta laravel-package-name con tu código en la carpeta del proyecto

Terminé creando una class php para manejar el evento de pre-package-install lanzado por Composer.

 <?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]')); } } 

Tenga en count [GITHUB-USER-TOKEN] que es necesario si el package está en repository privado (como en mi caso).

En composer.json

 "pre-package-install": [ "Company\\Composer\\EventHandler::prePackageInstall" ],