-
Notifications
You must be signed in to change notification settings - Fork 490
Guidance for contributors
UCX uses Git for source code management, Azure CI for continuous integration, and Google’s C++ test framework for unit testing.
Before you make any contributions to the projects, please sign a copy of our CLA https://openucx.org/license/ and email the CLA to admin at ucfconsortium.org
-
Follow the code style and logging style.
-
Use automatic code style checking to format your code.
-
Format the commit message as follows:
MODULE/UNIT1/UNIT2/..: Summary
for example:
UCT/SHM: Fix shared memory deadlock. -
Everything should be submitted as a pull request ("PR") from a branch.
NO DIRECT PUSH TO MASTER! -
No PRs over 500 lines of added code.
3rd party code can be larger, but has to be in a separate PR -
API changes have to be in a separate PR, which includes only the minimal set of changes required for making the code compile and tests pass. The implementation of new functionality should be a stub.
API changes have to be approved bybbenton. API changes should including the motivation of the change and a note if it does/doesn't break ABI/API -
When both renaming and changing a file, separate the two to different commits.
-
If you need to fix your PR, there are 2 options: amend (replace) your commit, or add new commit with fixes.
- Before anyone has posted comments on the PR, it's allowed to amend.
Example: Fixing bugs found in automatic tests. - If some comments have been posted, the fixes should be in a new commit.
Reason: Tracking fixes of code review.
-
Fork the project from openucx/ucx to create your copy gituser/ucx
-
Clone the code from gituser/ucx:
git clone <XXXX> -
Create a new branch for your bugfix, feature, or enhancement:
git branch topic/bugfix_123 -
Switch your workspace to a newly created branch:
git checkout topic/bugfix_123 -
Commit your changes:
git commit . -
Push the changes in your branch (topic/bugfix_123) to your copy gituser/ucx :
git push origin topic/bugfix_123. If the default upstream for the branch is not defined, add-uflag to the push command. The flag sets default upstream for the branch. -
Submit your change to the openucx/ucx by opening a pull request. After submitting the PR, the code is reviewed by the reviewers/maintainers. Once the reviewers and authors reach an agreement, the author requests the maintainer to merge the changes.
-
Delete the branch:
git push origin :topic/bugfix_123
Consider a branch that had conflicts with master, which were resolved by merging from it, and then more commits were added.
As the git history contains some commits from that merge, its squash will be a non-trivial one.
The git tree will look somewhat like:
graph TD;
A-->B;
parent_master-->merge;
B-->merge;
merge-->C;
C-->D;
The goal is to have a single commit containing the whole PR changes, as a child of parent_master:
graph TD;
parent_master-->id2([A with changes from B,C and D squashed]);
After PR is approved either use script below:
./contrib/squash_commit.sh -m "Commit message" -r upstream/mastergit push -f
Or use the steps:
backup=$(git rev-parse HEAD)- Find the parent of the most recent merge commit, you can use:
git log --graph --oneline <D> git reset --hard # making sure checkout matches approved PRgit clean -fdxgit reset <parent_master>git add --all # also add newly added filesgit commitgit diff HEAD..origin/pr_name # should be empty- Finally run
git push -f - In case something goes wrong:
git reset --hard $backup. Also,git reflogmight provide some insights.
See also:
- http://scottchacon.com/2011/08/31/github-flow.html
- https://github.com/blog/1124-how-we-use-pull-requests-to-build-github
-
One or more of UCX maintainers has to approve (:+1:) the PR in order to merge it.
-
Before requesting a review, please make sure the automatic tests pass.
See the UCX Testing Procedure -
PRs which are waiting for review should be marked with the label "Ready for review". It's also advisable to tag the relevant reviewer.
-
PRs which were reviewed and currently waiting for a fix and/or response, are marked with "Waiting for Author Response".
Everybody are welcome to post comments on every PR. However a final approval should be given by the maintainers. Also, changes which affect API (especially UCP API) should be coordinated with UCX users and approved by all maintainers.
List of maintainers:
Primary reviewers per component:
- UCP: brminich, dmitrygx
- UCS: brminich, hoopoepg
- UCM: hoopoepg
- UCP/wireup: evgeny-leksikov, dmitrygx
- UCT/rdmacm: evgeny-leksikov
- UCT/ib: Artemy-Mellanox, brminich
- UCT/shm: hoopoepg
- UCT/tcp: dmitrygx
- Cuda: Akshay-Venkatesh, bureddy
- uGNI: MattBBaker