Are many other tools and composer plugins for manage git hooks. But GitHooks offers:
- Standalone app. GitHooks is a binary (.phar) so its dependencies don't interfere with your application's dependencies.
- Is managed with Composer. You don't need other tools like Phive or others.
- Crentralizes all QA tools configuration (all of supported tools at least).
- It abstracts developers away from how QA tools have to be executed by using only the
githooks tool name-of-the-tool
command. - You can also create your own scripts and configure any git hook.
Further, it can be used together with javascript validation tools like typicode/husky if you have hybrid projects.
- PHP >= 7.1
- The tools you need to check the code.
- Or your owns scripts for the hooks.
composer require --dev wtyd/githooks
Note: for php < 8.1 you must add the next post-update-cmd
event to the scripts
section in your composer.json
:
"scripts": {
"post-update-cmd": [
"Wtyd\\GitHooks\\Utils\\ComposerUpdater::phpOldVersions"
]
}
Then run composer update wtyd/githooks
.
Until version 2.3.0 the method used was php72orMinorUpdate but it has been deprecated and will be removed from version 3.0.0
It is also convenient to add it to the post-install-cm
event so that the rest of the project developers do not have problems with the build
"scripts": {
"post-update-cmd": "Wtyd\\GitHooks\\Utils\\ComposerUpdater::phpOldVersions",
"post-install-cmd": "Wtyd\\GitHooks\\Utils\\ComposerUpdater::phpOldVersions"
}
2. Install all needed supported tools. How you install the tools doesn't matter.
3. Initialize GitHooks with githooks conf:init
. This command creates the configuration file in the root path (githooks.yml
).
4. Run githooks hook
. It Copies the script for launch GitHooks on the pre-commit event in .git/hooks
directory. You can, also run githooks hook otherHook MyScriptFile.php
for set any hook with a custom script. See the wiki for more information.
To ensure that it is configured automatically, we can configure the command in the post-update-cmd
and post-install-cmd
events of the composer.json
file (scripts
section):
"scripts": {
"post-update-cmd": [
"vendor/bin/githooks hook" // or "vendor/bin/githooks hook pre-commit MyScriptFile.php"
],
"post-install-cmd": [
"vendor/bin/githooks hook"
]
}
When you commit, all the configured code check tools are automatically launched. If your code pass all checks, GitHooks allows you to commit. If not, you have to fix the code and try again:
You can also run GitHooks whenever you want. All tools at same time or one by one:
githooks tool all # Run all tools
githooks tool phpcs # Run only phpcs
At this moment, the supported tools are:
- Php CodeSniffer (phpcs and phpcbf)
- Php Copy Paste Detector
- Php Mess Detector
- Parallel-lint
- Php Stan
- Local PHP Security Checker
But you can set your own script on any git hook.
The githooks.yml
file is splitted on three parts:
The execution
flag marks how GitHooks will run:
full
(the default option): executes always all tools setted against all path setted for each tool. For example, you setted phpcs for run insrc
andapp
directories. The commit only contains modified files fromdatabase
directory. Phpcs will checksrc
andapp
directories even if no files in these directories have been modified.fast
: this option runs the tools only against files modified by commit.- This option only affects the following tools: phpcs, phpmd, phpstan, and parallel-lint. The rest of the tools will run as the full option.
- WARNING!!! You must set the excludes of the tools either in
githooks.yml
or in the configuration file of eath tool since this option overwrites the keypaths
of the tools so that they are executed only against the modified files.
Run multiple tools in multiple processes at same time (tool all
command). The default number of processes is 1.
It is an array with the name of the tools that GitHooks will run. The name of the tools is their executable. If you want all the tools to be executed, the Tools
key will be as follows:
Tools:
- phpstan
- security-checker
- parallel-lint
- phpcs
- phpcbf
- phpmd
- phpcpd
The order in which the tools are is the order in which they will be executed.
In next step you must configure the tools with the same name as in the Tools key. For example, for set phpcs:
phpcs:
executablePath: vendor/bin/phpcs
paths: [src, tests]
ignore: [vendor]
standard: 'PSR12'
All the available options are in the wiki.
Contributions from others would be very much appreciated! Send pull request/issue. Check all steps for do that at Wiki section for Contributing. Thanks!
The MIT License (MIT). Please see License File for more information.