mirror of
https://github.com/apache/cloudstack.git
synced 2025-10-26 08:42:29 +01:00
Create CONTRIBUTING.md
Signed-off-by: Rohit Yadav <rohit.yadav@shapeblue.com>
This commit is contained in:
parent
882861250e
commit
c4d20938f7
122
ui/CONTRIBUTING.md
Normal file
122
ui/CONTRIBUTING.md
Normal file
@ -0,0 +1,122 @@
|
||||
# Contributing to Primate
|
||||
|
||||
## Summary
|
||||
|
||||
This document covers how to contribute to the Primate project. Primate uses Github PRs to manage code contributions.
|
||||
These instructions assume you have a GitHub.com account, so if you don't have one you will have to create one.
|
||||
Your proposed code changes will be published to your own fork of the Primate project and you will submit a Pull Request for your changes to be added.
|
||||
|
||||
*Lets get started!!!*
|
||||
|
||||
### Bug fixes
|
||||
|
||||
It's very important that we can easily track bug fix commits, so their hashes should remain the same in all branches.
|
||||
Therefore, a pull request (PR) that fixes a bug, should be sent against a release branch.
|
||||
This can be either the "current release" or the "previous release", depending on which ones are maintained.
|
||||
Since the goal is a stable master, bug fixes should be "merged forward" to the next branch in order: "previous release" -> "current release" -> master (in other words: old to new)
|
||||
|
||||
### New features
|
||||
|
||||
Development should be done in a feature branch, branched off of master.
|
||||
Send a PR (steps below) to get it into master (at least 1x LGTM applies).
|
||||
PR will only be merged when master is open, will be held otherwise until master is open again.
|
||||
No back porting / cherry-picking features to existing branches!
|
||||
|
||||
## Forking
|
||||
|
||||
In your browser, navigate to: [https://github.com/shapeblue/primate](https://github.com/shapeblue/primate)
|
||||
|
||||
Fork the repository by clicking on the 'Fork' button on the top right hand side.
|
||||
The fork will happen and you will be taken to your own fork of the repository.
|
||||
Copy the Git repository URL by clicking on the clipboard next to the URL on the right hand side of the page under '**HTTPS** clone URL'. You will paste this URL when doing the following `git clone` command.
|
||||
|
||||
On your workstation, follow these steps to setup a local repository for working on Primate:
|
||||
|
||||
``` bash
|
||||
$ git clone https://github.com/YOUR_ACCOUNT/primate.git
|
||||
$ cd primate
|
||||
$ git remote add upstream https://github.com/shapeblue/primate.git
|
||||
$ git checkout master
|
||||
$ git fetch upstream
|
||||
$ git rebase upstream/master
|
||||
```
|
||||
|
||||
## Making changes
|
||||
|
||||
|
||||
It is important that you create a new branch to make changes on and that you do not change the `master` branch (other than to rebase in changes from `upstream/master`). In this example I will assume you will be making your changes to a branch called `feature_x`.
|
||||
This `feature_x` branch will be created on your local repository and will be pushed to your forked repository on GitHub. Once this branch is on your fork you will create a Pull Request for the changes to be added to the Primate project.
|
||||
|
||||
It is best practice to create a new branch each time you want to contribute to the project and only track the changes for that pull request in this branch.
|
||||
|
||||
``` bash
|
||||
$ git checkout -b feature_x
|
||||
(make your changes)
|
||||
$ git status
|
||||
$ git add .
|
||||
$ git commit -a -m "descriptive commit message for your changes"
|
||||
```
|
||||
|
||||
> The `-b` specifies that you want to create a new branch called `feature_x`. You only specify `-b` the first time you checkout because you are creating a new branch. Once the `feature_x` branch exists, you can later switch to it with only `git checkout feature_x`.
|
||||
|
||||
|
||||
### Updating your branch
|
||||
|
||||
It is important that you maintain an up-to-date `master` branch in your local repository. You may do this by either rebasing against the upstream repository or merging the upstream branch.
|
||||
For example:
|
||||
|
||||
1. Checkout your local `master` branch
|
||||
2. Synchronize your local `master` branch with the `upstream/master` so you have all the latest changes from the project
|
||||
3. Merge or Rebase the latest project code into your `feature_x` branch so it is up-to-date with the upstream code
|
||||
|
||||
``` bash
|
||||
$ git checkout master
|
||||
$ git fetch upstream
|
||||
$ git rebase upstream/master
|
||||
$ git checkout feature_x
|
||||
$ git merge master
|
||||
```
|
||||
|
||||
> Now your `feature_x` branch is up-to-date with all the code in `upstream/master`.
|
||||
|
||||
|
||||
## Sending a Pull Request
|
||||
|
||||
When you are happy with your changes and you are ready to contribute them, you will create a Pull Request on GitHub to do so.
|
||||
This is done by pushing your local changes to your forked repository (default remote name is `origin`) and then initiating a pull request on GitHub.
|
||||
|
||||
Please include relevant issue ids, links, detailed information about the bug/feature, what all tests are executed, how the reviewer can test this feature etc. A screenshot is preferred.
|
||||
|
||||
> **IMPORTANT:** Make sure you have rebased your `feature_x` branch to include the latest code from `upstream/master` _before_ you do this.
|
||||
|
||||
``` bash
|
||||
$ git push origin master
|
||||
$ git push origin feature_x
|
||||
```
|
||||
|
||||
Now that the `feature_x` branch has been pushed to your GitHub repository, you can initiate the pull request.
|
||||
|
||||
To initiate the pull request, do the following:
|
||||
|
||||
1. In your browser, navigate to your forked repository: [https://github.com/YOUR_ACCOUNT/primate](https://github.com/YOUR_ACCOUNT/primate)
|
||||
2. Click the new button called '**Compare & pull request**' that showed up just above the main area in your forked repository
|
||||
3. Validate the pull request will be into the upstream `master` and will be from your `feature_x` branch
|
||||
4. Enter a detailed description of the work you have done and then click '**Send pull request**'
|
||||
|
||||
If you are requested to make modifications to your proposed changes, make the changes locally on your `feature_x` branch, re-push the `feature_x` branch to your fork. The existing pull request should automatically pick up the change and update accordingly.
|
||||
|
||||
|
||||
Cleaning up after a successful pull request
|
||||
-------------------------------------------
|
||||
|
||||
Once the `feature_x` branch has been committed into the `upstream/master` branch, your local `feature_x` branch and the `origin/feature_x` branch are no longer needed. If you want to make additional changes, restart the process with a new branch.
|
||||
|
||||
> **IMPORTANT:** Make sure that your changes are in `upstream/master` before you delete your `feature_x` and `origin/feature_x` branches!
|
||||
|
||||
You can delete these deprecated branches with the following:
|
||||
|
||||
``` bash
|
||||
$ git checkout master
|
||||
$ git branch -D feature_x
|
||||
$ git push origin :feature_x
|
||||
``
|
||||
Loading…
x
Reference in New Issue
Block a user