This document contains some basic information regarding Git hooks in ILIAS. It describes how Git hooks can be installed/activated manually and where to find some offial Git hooks provided by the ILIAS community. Furtheremore it contains installation instructions for CaptainHook, a Git hook PHP library used by ILIAS to manage and execute a shared Git hook configuration amongst contributors.
Table of Contents
Git hooks are scripts that run automatically every time a particular event occurs in a Git repository and thus can be a powerful tool in the ILIAS development workflow. Check out the documentation about Git Hooks for more information.
Preconditions:
- Git must be configured for the local project and the development environment
ILIAS provides a shared Git hook configuration for CaptainHook, a Git hook management library written in PHP.
It enables you to define a shared (amongst developers) Git hook configuration for actions being executed locally on your machine.
Currently, the following actions will be executed:
- pre-commit:
- PHP Linting
- php-cs-fixer (dryrun only)
If you'd like to make sure all your committed files pass a PHP syntax (lint) check, and the ILIAS Coding Style was applied to all committed files, you are welcome to install CaptainHook and our shared actions.
Once you installed the composer development dependencies, go to the ILIAS main directory and execute:
libs/composer/vendor/bin/captainhook install
Executing this will create the hook script located in your .git/hooks
directory,
for each hook you choose to install while running the command.
Every time Git triggers a hook, CaptainHook will be executed.
If one the enabled actions (scripts) returns an exit code unequal 0
(successful program termination), your files will not be committed.
- If you have issues with CaptainHook you can remove the created hooks in the
./git/hooks
directory permanently. If you only want to temporarily deactivate a certain hook or action, disable the hook section by settingenabled
tofalse
or remove the action from the respective array in thecaptainhook.json
configuration file. Please make sure you do not commit a changedcaptainhook.json
file be accident. - If the Git hooks have been installed once, changing branches could be an issue if
CaptainHook is not installed or the
captainhook.json
file is missing in the branch just checked out.
You can merge some additional custom actions with the standard actions of the captainhook.json:
Create your own config-file and add actions or settings you want to merge with the default. Make sure,
you have the config option includes
defined to include the standard-configuration captainhook.json
,
e.g a file captainhook.local.json
(which will be ignored in the repo):
{
"config": {
"includes": [
"captainhook.json"
]
},
"pre-push": {
"enabled": true,
"actions": [
{
"action": "./CI/PHPUnit/run_tests.sh"
}
]
}
}
You must reinstall captainhook with your local config. Go to the ILIAS main directory and execute:
libs/composer/vendor/bin/captainhook install -c captainhook.local.json
The installation of the local file might respond with the following error:
In Builder.php line 55:
bootstrap file not found: '/var/www/ilias/trunk/vendor/autoload.php'
In this case, you have to include the "bootstrap": "libs/composer/vendor/autoload.php"
setting,
similar to captainhook.json.
Git hooks reside in the .git/hooks
directory of a Git repository.
To install/activate a Git hook first enter this directory.
cd .git/hooks
By default every hook has the suffix .sample
. This suffix prevents them
from being executed by default when a particular Git event occurs.
Removing this suffix will activate the hook.
mv pre-commit.sample pre-commit
Git hooks can be implemented by using any scripting language as long as they can be run as an executable. There can only be one script for each particular Git event.
If a script exits with a status set to 1
, the actual execution of
the Git event will be aborted, otherwise an exit status set to 0
will continue the Git workflow as expected.
The ILIAS community provides a bunch of Git hook scripts which can be used to optimize the development workflow and to enforce certain policies regarding the ILIAS code base.
Please be aware that these recommendations are for a development environment only, and may not be used in production environments
The Git hook scripts can be found in the git_hooks folder of the official ILIAS Developer Tools GitHub repository.