Thanks for considering to contribute to Allpix2. Any type of merge request, ranging from small bugfixes, improvements to the documentation to entirely new functionality, is much appreciated. We, the maintainers, will try to our best to look carefully at every merge request.
If you only want to submit an issue, that is also very welcome, please continue directly to the issue tracker to open a ticket.
The following is a set of guidelines that will help both you as submitter as well as us maintainers to make it as easy as possible to contribute changes.
Allpix2 is split up in a slim core, providing base functionality as configuration, detector geometry, management of modules, messaging as well as various utilities. The actual chain of simulation is developed in independent modules. Please try to separate any merge request for improvements or changes to the core from the implementation and updates of modules. Generally any kind of separable simulation functionality should be implemented in its own module and submitted as a individual merge request. Also try to submit individual merge request for independent changes to allow us to review them separately.
If you have any doubt about the best way to implement new functionality or how to split it up, please open an issue with the discussion tag on the issue tracker. Also please feel free to open a incomplete merge request as soon with the WIP (work-in-progress) label to allow for early discussion.
Please follow the next steps to setup your system for contributing. Note that these are slightly different from the normal installation instructions in the manual.
- Make sure you have an account on Gitlab (restricted to CERN associates).
- Fork the repository by clicking on 'Fork' on the main repository.
- Clone your local fork using
git clone https://gitlab.cern.ch/allpix-squared/allpix-squared.git
(when using HTTPS, this has to be changed accordingly for SSH or KRB5) - Install the latest version of the clang package with the clang-format and clang-tidy programs.
- Follow the build instructions using CMake explained in the User's manual.
Now you can start making changes and adding new functionality to the code.
- Run
etc/git-hooks/install-hooks.sh
from the repository top folder to install the git-hook that automatically updates the format of the code to comply with the coding style. - Create a new branch from master with a description of the change using
git checkout -b my-new-branch-name
. - Read the relevant sections in the User's manual before starting to make changes.
- Implement the new code and frequently commit using
git commit -m 'my commit message'
. Please use descriptive messages explaining what changed. - Push the code to your local mirror using
git push --set-upstream origin
. - Retrieve the latest changes to the upstream master every now and then. To do this add the upstream version to your remotes using
git remote add upstream https://gitlab.cern.ch/allpix-squared/allpix-squared.git
(or the SSH or KRB5 version if preferred). This only has to be done once, the first time after cloning the repository. Afterwards you fetch the changes usinggit fetch upstream
. Then you can add the change preferably using rebase withgit rebase upstream master
. If that causes problems you can use merge withgit merge upstream master
.
As soon as there exists something in your branch, a merge request can be opened on the main repository. Do not forget that it is not a problem to open a merge request for incomplete implementations.
- Retrieve the latest changes from the upstream version as explained above.
- Optionally format the code if you did not add the git-hook from the beginning, this can be done manually by running
make format
from the build directory. - Go to merge request and click on 'New merge request'.
- Follow the instructions. Do not forget to use the 'WIP:' prefix if your code is only partially ready. Then submit the merge request.
- Please wait for the maintainers to give you access to the continuous integration (CI) runners that will check your code if you do not already have it.
- Add all the specific runners on your local repository at https://gitlab.cern.ch/your-username/allpix-squared/settings/ci_cd.
- The pipeline can now be restarted and the CI will check your changes. If the CI fails and gives an error please refer to the log containing a description about what went wrong. It is very likely that errors will appear because Allpix2 enforces a very strict policy of compiler errors and requires full compliance of the clang-tidy 'linter' tool, which frequently complains about minor changes (it might help to search for
error:
to find the actual error(s) in the output). This clang-tidy tool can also be run locally on your pc by executingmake check-lint
from the build directory. Easy changes can be fixed automatically by executingmake lint
. - The maintainers will look at your proposed changes and likely provide some (constructive) feedback.
- Please continue to update the code with the received comments until every reviewer and the continuous integration is happy :)
- Your merge request can now be merged in. Congratulations and thank you very much, you have contributed something new to the repository!