This is a Composer plugin that manages Git pre- & post-hooks through Composer dependencies. Actions you want to be executed on Git hooks can simply be required as --dev dependencies, and will immediately become active on composer install.
Introductory post: Adding Git Hooks Through Composer Dev-Dependencies
- Installation
- Existing PHP Composter Actions
- Creating a New PHP Composter Action
- Using Existing PHP Composter Actions in Your Projects
- Skipping Installation of PHP Composter Actions
- Contributing
You should not need to install this package directly. It should come as a dependency of a package that is of type php-composter-action.
-
Check your PHP source code for PSR-2 compliance before committing.
-
PHP Composter PHPCS WordPress (coming soon)
Check your PHP source code for WordPress Coding Standards compliance before committing.
-
PHP Composter PHPUnit (coming soon)
Run a PHPUnit test suite before committing.
-
PHP Composter PHP Syntax Checker (coming soon)
Validate the PHP syntax before committing.
-
PHP Composter Commit Regex (coming soon)
Check your commit messages against a regular expression pattern, to enforce a commit message standard.
To build a new PHP Composter action, you need to proceed as follows:
- Create a Composer Package with a Valid Name
- Extend
BaseActionclass - Add Public Methods
- Add the Class to Composer Autoloader
- Set the Composer Package Type to
php-composter-action - Add
php-composter/php-composteras a dependency - Configure Git Hooks through Composer Extra key
Create a new Composer package with the following naming pattern: <vendor>/php-composter-<action intent>
Example:
composer init --name php-composter/php-composter-exampleCreate a new class that extends PHPComposter\PHPComposter\BaseAction.
Example:
<?php namespace PHPComposter\PHPComposterExample;
use PHPComposter\PHPComposter\BaseAction;
class Example extends BaseAction
{
// [...]
}PHP Composter allows you to attach PHP methods to Git hooks. These methods need to be publicly accessible, so that they can be called by the PHP-Composter bootstrapping script.
Example:
<?php
// [...]
class Example extends BaseAction
{
/**
* Example pre-commit action method.
*
* @var string $hook Name of the hook that was triggered.
* @var string $root Root folder in which the hook was triggered.
*/
public function preCommit()
{
echo 'Example Pre-Commit Hook ' . $this->hook . ' @ ' . $this->root . PHP_EOL;
}
}You need to set the type of your Composer package in your composer.json file to php-composter-action.
Example:
{
"name": "php-composter/php-composter-example",
"description": "PHP Composter Example.",
"type": "php-composter-action",
"[...]": ""
}Composer's Autoloader will be initialized for each Git hook, so make sure you've registered your newly created class correctly.
Example:
{
"[...]": "",
"autoload": {
"psr-4": {
"PHPComposter\\PHPComposterExample\\": "src/"
}
},
"[...]": ""
}You need to set the type of your Composer package in your composer.json file to php-composter-action.
Example:
{
"[...]": "",
"require": {
"php-composter/php-composter": "^0.1",
},
"[...]": ""
}Finally, add a new entry "php-composter-hooks" to the extra key in the package's composer.json to attach each of your methods to a specific Git hook.
Example:
{
"[...]": "",
"extra": {
"php-composter-hooks": {
"20.pre-commit": "PHPComposter\\PHPComposterExample\\Example::preCommit"
}
}
}Hooks can either be "<priority>.<git-hook-name>", or just "<git-hook-name>".
In the above example, the priority is 20. It defaults to 10 if omitted. Lower priority numbers get executed before higher ones.
applypatch-msgpre-applypatchpost-applypatchpre-commitprepare-commit-msgcommit-msgpost-commitpre-rebasepost-checkoutpost-mergepost-updatepre-auto-gcpost-rewritepre-push
To use an existing PHP Composter Action in your projects, simply require them as --dev dependencies:
composer require --dev php-composter/php-composter-exampleAnyone using Composer to pull in the development dependencies will automatically have your PHP Composter Actions installed into their .git.
In case you want to install your the Composer dependencies of a project without activating the PHP Composter system, you can run Composer with the --no-plugins option:
composer install --no-pluginsAll feedback / bug reports / pull requests are welcome.