Git Hooks Management through Composer
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 require
d as --dev
dependencies, and will immediately become active on composer install
.
Introductory post: Adding Git Hooks Through Composer Dev-Dependencies
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 Regular Expression
Check your commit messages against a regular expression pattern, to enforce a commit message standard.
Check your PHP source code for WordPress Coding Standards compliance before committing.
Thanks to Gabor Javorszky for contributing this action.
Check your source code for Drupal Coding Standards compliance before committing.
Action by Nick Wilde.
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.
To build a new PHP Composter action, you need to proceed as follows:
BaseAction
class
php-composter-action
php-composter/php-composter
as a dependency
Create a new Composer package with the following naming pattern: <vendor>/php-composter-<action intent>
Example:
composer init --name php-composter/php-composter-example
BaseAction
classCreate 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;
}
}
php-composter-action
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/"
}
},
"[...]": ""
}
php-composter/php-composter
as a dependencyYou 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-msg
pre-applypatch
post-applypatch
pre-commit
prepare-commit-msg
commit-msg
post-commit
pre-rebase
post-checkout
post-merge
post-update
pre-auto-gc
post-rewrite
pre-push
To use an existing PHP Composter Action in your projects, simply require
them as --dev
dependencies:
composer require --dev php-composter/php-composter-example
Anyone 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-plugins
All feedback / bug reports / pull requests are welcome.