Thank you for your interest in contributing to ROOT! We strongly welcome and appreciate such contributions! This short guide tries to make contributing as quick and painless as possible.
The source code for ROOT is kept in GitHub.
Changes go through pull requests ("PRs").
The primary branch for development is master
.
Visit this page for the mechanics on how to
create pull requests.
By providing code, you agree to transfer your copyright on the code to the "ROOT project". Of course you will be duly credited: for sizable contributions your name will appear in the CREDITS{:target="_blank"} file shipped with every binary and source distribution. The copyright transfer helps us with effectively defending the project in case of litigation.
Once a PR is created, a member of the ROOT team will review it as quickly as possible. If you are familiar with the
ROOT community, it may be beneficial to add a suggested reviewer to the PR in order to get quicker attention.
Please ping people 👋 should you not get timely feedback, for instance with @root-project/core ping!
As you contribute code, this code will likely fix an issue or add a feature.
Whatever it is: this requires you to add a new test, or to extend an existing test.
We have concise unittests in the test/
subdirectory of each part of ROOT;
see for instance tree/dataframe/test
.
These tests are generally based on Google Test and easily extended.
For more involved tests, such as tests requiring custom dictionaries or data
files, we have roottest.
Suppose for your PR you create a branch on root.git
.
Our CI infrastructure automatically picks up a branch with the same name in your fork of roottest.git
and use that for testing your PR.
To prevent bad surprises and make a better first impression, we strongly encourage new developers to run the tests before submitting a pull request.
ROOT has automated CI tests 👮 that are used for pull requests:
- Build and test: a Jenkins-based CI workflow tests PRs automatically; a project member might need to initiate this build. The results are posted to the pull request. Compared to ROOT's nightly builds, PRs are tested with less tests, on less platforms.
- Formatting check:
clang-format
automatically checks that a PR follows ROOT's coding conventions. If coding violations are found, it provides you with apatch
output that you likely want to apply to your PR. - Simple Static Analysis: PRs are analyzed using
clang-tidy
.
Typically, PRs must pass all these tests; we will ask you to fix any issues that may arise. Some tests are run only outside the PR testing system: we might come back to you with additional reports after your contribution was merged.
Thank you for reading this; and even more: thank you 💐 for considering to contribute!