avto-dev / composer-cleanup-plugin
A composer cleanup plugin, to remove tests and documentation to save space
Installs: 38 582
Dependents: 0
Suggesters: 0
Security: 0
Stars: 6
Watchers: 0
Forks: 6
Open Issues: 1
Type:composer-plugin
Requires
- php: ^8.2
- composer-plugin-api: ^2.0
- symfony/finder: ^6.0 || ^7.0
Requires (Dev)
- composer/composer: ^2.0
- phpstan/phpstan: ^1.12
- phpunit/phpunit: ^11.5
README
Composer Cleanup Plugin
Remove tests & documentation from the vendor dir. Based on barryvdh/composer-cleanup-plugin.
Usually disk size shouldn't be a problem, but when you have to use FTP to deploy or have very limited disk space, you can use this package to cut down the vendor directory by deleting files that aren't used in production (tests/docs etc).
Note: This package is still experimental, usage in production without detailed tests is not recommended.
Install
Require this package in your composer.json:
$ composer require avto-dev/composer-cleanup-plugin "^2.0"
Usage
If you are using composer:v1
you need to add lines to run the clean command after each package is installed:
"post-package-install": [ "AvtoDev\\Composer\\Cleanup\\Plugin::handlePostPackageInstallEvent" ],
If you use composer:v2
then all packages are installed in parallel, so automatic cleanup occurs after all packages are installed and the event fires POST_AUTOLOAD_DUMP
.
What does it do?
For every installed or updated package in the default list, in general:
- Remove documentation, such as README files, docs folders, etc.
- Remove tests, PHPUnit configs, and other build/CI configuration.
Some packages don't obey the general rules, and remove more/less files. Packages that do not have rules added are ignored.
Rules
Please submit a PR to src/.clean_rules.php to add more rules for packages. Make sure you test them first, sometimes tests dirs are classmapped and will error when deleted.
If you need to optionally override the parameters of the cleaning rules, then create a .clean_rules.php
file in the root of your application that returns an associated array of rules.
If it exists, its content will be merged with the package config, optionally overriding the necessary rules.
The config includes 4 properties: global
, packages
, excluded_global
, excluded_packages
.
Global
List of files ready for removal in each installed package.
Packages
List of files and directories ready for deletion by package.
Excluded global
List of files that should be excluded from the deletion list.
Excluded Packages
List of files and directories to exclude from deletion on a per-package basis.
Full example
It should look like this:
<?php return [ 'global' => [ 'test.yml', // Delete file `test.yml` from all packages 'ci.yaml', 'stub.json', ], 'packages' => [ 'company/first-package' => ['tests'], // Delete all matches in package 'company/second-package' => ['test', '*.md'], 'company/third-package' => ['docs'], ], 'excluded_global' => [ 'stub.json', // This file will be excluded from global list ], 'excluded_packages' => [ 'company/first-package' => ['tests/ApiTest.php'], // This file will not be deleted 'company/third-package' => null, // This package will be excluded from the purge list. ], ];
Testing
For package testing we use phpunit
framework and docker-ce
+ docker-compose
as develop environment. So, just write into your terminal after repository cloning:
$ make build $ make latest # or 'make lowest' $ make test
Changes log
Changes log can be found here.
Support
If you will find any package errors, please, make an issue in current repository.
License
This is open-sourced software licensed under the MIT License.