---
title: Developer Resources for Apache CloudStack
---

# CloudStack Developer Resources

## Contributing as a Non-Committer

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 <a href="https://github.com/apache/cloudstack"
target="_blank">GitHub</a> pull requests. If you are new to Git and GitHub,
check these two links:

- [GitHub in 15 minutes](https://try.github.io/levels/1/challenges/1)
- [Creating GitHub Pull Request](https://help.github.com/articles/creating-a-pull-request/)

The Apache CloudStack repository is on <a
href="https://github.com/apache/cloudstack" target="_blank">GitHub</a> 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: <a
href="https://github.com/apache/cloudstack/blob/main/CONTRIBUTING.md"
target="_blank">CloudStack GitHub Contribution Guidelines</a>.

### Submitting a patch

While we encourage you to submit your contribution through GitHub pull requests,
you can also attach a patch in a GitHub issue/ticket. For the purpose of these
instructions, we'll assume that you already have a system with <a
href="http://git-scm.com/" target="_blank">Git</a> 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 <a
href="http://www.apache.org/licenses/LICENSE-2.0.html" target="_blank">Apache
License 2.0</a>.

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 <a
href="mailto:dev@cloudstack.apache.org">dev@cloudstack.apache.org</a> 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 <a
href="/mailing-lists">here</a>.

In short, communication is a vital part of making a contribution to an Apache
project.

## Getting Started

### Fork the code

In your browser, navigate to: <a
href="https://github.com/apache/cloudstack">https://github.com/apache/cloudstack</a>.

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 '<b>HTTPS</b> clone
URL'.

You will paste this URL when doing the following <code>git clone</code> command.

On your computer, follow these steps to setup a local repository for working on ACS:

```
$ 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
```

### Making Changes

It is important that you create a new branch to make changes on and that you do
not change the <code>main</code> branch (other than to rebase in changes from
<code>upstream/main</code>).  In this example I will assume you will be making
your changes to a branch called <code>feature_x</code>. This
<code>feature_x</code> 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"
```

<blockquote>The <code>-b</code> specifies that you want to create a new branch
called <code>feature_x</code>.  You only specify <code>-b</code> the first time
you
checkout because you are creating a new branch.  Once the <code>feature_x</code>
branch exists, you can later switch to it with only <code>git checkout
feature_x</code>.</blockquote>

### Rebase <code>feature_x</code> to include updates from <code>upstream/main</code>

It is important that you maintain an up-to-date <code>main</code> branch in
your local repository.  This is done by rebasing in the code
changes from <code>upstream/main</code> (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:

- Checkout your local <code>main</code> branch;
- Synchronize your local <code>main</code> branch with the <code>upstream/main</code> so you have all the latest changes from the project;
- Rebase the latest project code into your <code>feature_x</code> 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
```

<blockquote>Now your <code>feature_x</code> branch is up-to-date with all the
code in <code>upstream/main</code>.</blockquote>

### Make a GitHub pull request to contribute your changes

<p>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 <code>origin</code>) and then initiating a pull request on GitHub.</p>

<p>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.</p>

<blockquote><b>IMPORTANT:</b>Make sure you have rebased your
<code>feature_x</code> branch to include the latest code from
<code>upstream/main</code> <b>before</b>
you do this.</blockquote>

```
$ git push origin main
$ git push origin feature_x
```

<p>Now that the <code>feature_x</code> branch has been pushed to your GitHub
repository, you can initiate the pull request.</p>

<p>To initiate the pull request, do the following:</p>

- In your browser, navigate to your forked repository: <b>https://github.com/YOUR_ACCOUNT/cloudstack</b>;
- Click the new button called '<b>Compare & pull request</b>' that showed up just above the main area in your forked repository;
- Validate the pull request will be into the upstream <code>main</code> and will be from your <code>feature_x</code> branch;
- Enter a detailed description of the work you have done and then click '<b>Send pull request</b>'.

<p>If you are requested to make modifications to your proposed changes, make the
changes locally on your <code>feature_x</code> branch, re-push
the <code>feature_x</code> branch to your fork. The existing pull request should
automatically pick up the change and update accordingly.</p>

#### Cleaning up after a successful pull request

<p>Once the <code>feature_x</code> branch has been committed into the
<code>upstream/main</code> branch, your local <code>feature_x</code> branch
and the <code>origin/feature_x</code> branch are no longer needed. If you want
to make additional changes, restart the process with a new branch.</p>

<blockquote><b>IMPORTANT:</b>Make sure that your changes are in
<code>upstream/main</code>before you delete your <code>feature_x</code>
and <code>origin/feature_x</code> branches!</blockquote>

<p>You can delete these deprecated branches with the following:</p>

```
$ git checkout main
$ git branch -D feature_x
$ git push origin :feature_x
```

### Further Reading

<p>You might want to peruse the <a
href="http://www.apache.org/foundation/getinvolved.html" target="_blank">Get
Involved</a> 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).</p>

## Resources

- [Public repository (on GitHub)](https://github.com/apache/cloudstack/)
- [Contribution Guidelines](https://github.com/apache/cloudstack/blob/main/CONTRIBUTING.md)
- [ASF Jenkins](https://builds.apache.org/view/A-D/view/Cloudstack/)
- [CloudStack Jenkins](http://jenkins.buildacloud.org/)
- [CloudStack Development 101](https://cwiki.apache.org/confluence/display/CLOUDSTACK/Development+101)
- [Setting up a Dev Environment](https://cwiki.apache.org/confluence/display/CLOUDSTACK/Setting+up+CloudStack+Development+Environment)
- [Code Conventions](https://cwiki.apache.org/confluence/display/CLOUDSTACK/Coding+conventions)
- [Testing CloudStack](https://cwiki.apache.org/confluence/display/CLOUDSTACK/Testing)
- [Obsolete Jira issue tracker](https://issues.apache.org/jira/browse/CLOUDSTACK)
- [Hackerbook - opensource CloudStack Developer training course](https://github.com/shapeblue/hackerbook)
- [mbx - build and run appliance based CloudStack env for development and QA](https://github.com/shapeblue/mbx)

### CloudStack Git Repositories

The git repositories are hosted on Apache infrastructure, and can be found here:

- https://github.com/apache/cloudstack
- https://github.com/apache/cloudstack-cloudmonkey
- https://github.com/apache/cloudstack-go
- https://github.com/apache/cloudstack-terraform-provider
- https://github.com/apache/cloudstack-kubernetes-provider
- https://github.com/apache/cloudstack-ec2stack
- https://github.com/apache/cloudstack-documentation
- https://github.com/apache/cloudstack-www

To get the most recent source for Apache CloudStack, use:

```
git clone https://github.com/apache/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 <a href="https://github.com/cloudstack-extras" target="_blank">CloudStack-extras repositories on GitHub</a>.
