If you're a committer on an Apache project, it means that you can commit directly to the project's repository. For instance, with Apache CloudStack committers are allowed to directly push commits into the git repository.
Non-committers, however, have to submit patches for review. Apache CloudStack accepts GitHub pull requests. If you are new to Git and GitHub, check these two links:
Apache CloudStack has a read-only mirror on GitHub that is kept in sync with the
canonical Git repo maintained by the Apache Software Foundation. Submitting GitHub pull requests is the easiest way to get your contribution upstream.
For detailed instructions see the link below:
GitHub Contribution Guidelines
While we encourage you to submit your contribution through GitHub pull requests, you can also attach a patch in a JIRA ticket. For the purpose of these instructions, we'll assume that you already have a system with Git and have found a bug to fix or have a feature that you'd like to submit, and you're willing to contribute that code or documentation under the Apache License 2.0.
Further, if you're fixing a bug we'll assume that you've either filed a bug report (where you will attach your patch) or are submitting a fix for a known bug. If you find a bug and would like to fix it, that's awesome! Please be sure to file the bug too, though.
If you want to add a feature, you should bring it up for discussion on the dev@cloudstack.apache.org mailing list before implementing it. This ensures that it meshes with the plans that other contributors have for Apache CloudStack, and that you're not doing redundant work. Other developers may also have ideas for the feature or suggestions that will help you land the feature without having to re-do the work. More information about our mailing lists can be found here.
In short, communication is a vital part of making a contribution to an Apache project.
In your browser, navigate to: https://github.com/apache/cloudstack.
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.
$ git clone https://github.com/YOUR_ACCOUNT/cloudstack.git $ cd cloudstack $ git remote add upstream https://github.com/apache/cloudstack.git $ git checkout main $ git fetch upstream $ git rebase upstream/main
It is important that you create a new branch to make changes on and that you do not change the
main
branch (other than to rebase in changes from upstream/main
). 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 ACS 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.
$ 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 calledfeature_x
. You only specify-b
the first time you checkout because you are creating a new branch. Once thefeature_x
branch exists, you can later switch to it with onlygit checkout feature_x
.
feature_x
to include updates from upstream/main
It is important that you maintain an up-to-date main
branch in your local repository. This is done by rebasing in the code
changes from upstream/main
(the official ACS project repository) into your local repository. You will want to do this before you start
working on a feature as well as right before you submit your changes as a pull request. We recommend you do this process periodically while you work to make
sure you are working off the most recent project code.
This process will do the following:
main
branch;main
branch with the upstream/main
so you have all the latest changes from the project;feature_x
branch so it is up-to-date with the upstream code.$ git checkout main $ git fetch upstream $ git rebase upstream/main $ git checkout feature_x $ git rebase main
Now yourfeature_x
branch is up-to-date with all the code inupstream/main
.
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 JIRA ID or GitHub ID, detailed information about the bug/feature, what all tests are executed, how the reviewer can test this feature etc. In case of UI PRs, a screenshot is preferred.
IMPORTANT:Make sure you have rebased yourfeature_x
branch to include the latest code fromupstream/main
before you do this.
$ git push origin main $ 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:
main
and will be from your feature_x
branch;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.
Once the feature_x
branch has been committed into the upstream/main
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 inupstream/main
before you delete yourfeature_x
andorigin/feature_x
branches!
You can delete these deprecated branches with the following:
$ git checkout main $ git branch -D feature_x $ git push origin :feature_x
You might want to peruse the Get Involved page on Apache.org. Please, respect the original style of the CloudStack code, and ensure that you're using spaces rather than tabs, and your code have Unix line endings (LF) rather than Windows-type line endings (CRLF).
The git repositories are hosted on Apache infrastructure, and can be found here:
To get the most recent source for Apache CloudStack, use:
git clone https://github.com/apache/cloudstack.gitor
git clone https://gitbox.apache.org/repos/asf/cloudstack.git
Similarly, clone the cloudstack-cloudmonkey repository or the other repositories to get access to the most recent source of all CloudStack subprojects.
For projects related to Apache CloudStack but not under ASF governance, see the CloudStack-extras repositories on GitHub.