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