werbfred/composer-package-updater

This project provides a way to have scripts be executed on packages when they are being installed, updated and uninstalled.

1.0.2 2020-06-26 11:11 UTC

This package is auto-updated.

Last update: 2024-09-26 21:52:14 UTC


README

This project provides a way to have scripts be executed on packages when they are being installed, updated and uninstalled.

Currently only scripts defined in the root composer.json file are being executed. This is a workaround to Composer's Issue 1993.

For security reasons, Composer\Script\PackageEvent will only be forwarded to the packages for which these events are being raised.

In my case, I have Drupal modules and themes hosted in a git repo. Once installed/updated via composer I want to:

  • Run compass to generate .css files
  • Remove some files (.gitignore, .sass directory, ...)

Each module or theme being responsible to perform its own install/update/uninstall tasks.

Setting it up !

Install this project via packagist :

composer require werbfred/composer-package-updater

Open the root composer.json file to update it with configuration below:

Autoload

Add "ComposerPackageUpdater\\composer\\": "vendor/werbfred/composer-package-updater/src/composer" to psr-4 in autoload section.

Example:

"autoload": {
   "psr-4": {
      "ComposerPackageUpdater\\composer\\": "vendor/werbfred/composer-package-updater/src/composer"
   }
}

This will tell Composer where files of a given namespace are located. In our case Composer will be able to load our PackageUpdater class.

Note: More information on autoload section can be found here.

Scripts

Add below entries to the scripts section.

"scripts": {
   "pre-package-install": "ComposerPackageUpdater\\composer\\PackageUpdater::processPackageEvent",
   "post-package-install": "ComposerPackageUpdater\\composer\\PackageUpdater::processPackageEvent",
   "pre-package-update": "ComposerPackageUpdater\\composer\\PackageUpdater::processPackageEvent",
   "post-package-update": "ComposerPackageUpdater\\composer\\PackageUpdater::processPackageEvent",
   "pre-package-uninstall": "ComposerPackageUpdater\\composer\\PackageUpdater::processPackageEvent",
   "post-package-uninstall": "ComposerPackageUpdater\\composer\\PackageUpdater::processPackageEvent"
}

The above will ensure that below PackageEvents can be forwarded :

  • pre-package-install
  • post-package-install
  • pre-package-update
  • post-package-update
  • pre-package-uninstall
  • post-package-uninstall

Note: More information on scripts section can be found here and there.

Configuration

Configuration must be added under dependency-scripts in extra section.

Parameters:

Example:

"extra": {
   "dependency-scripts": {
      "run": true,
      "trust": [ "dummy"
               , "foobar" ]
   }
}

Note: More information on extra section can be found here.

What do I need to put in my package's composer.json* file ?

You can now fill your scripts section with your own ones.

Be careful: Pathes in your autoloads section must be relative to your package's location.

Usefull Links