blob: ac2406a52e7ac26c8cf7928f4ebf78be81e058c8 [file] [log] [blame]
<!doctype html>
<html>
<head>
<title>Apache CloudStack: Open Source Cloud Computing</title>
<meta name="description" content="CloudStack is open source cloud computing software for creating, managing, and deploying infrastructure cloud services">
<meta itemprop="name" content="Apache Cloudstack">
<meta itemprop="description" content="CloudStack is open source cloud computing software for creating, managing, and deploying infrastructure cloud services">
<meta itemprop="image" content="https://cloudstack.apache.org/images/monkey-144.png">
<meta property="og:title" content="Apache Cloudstack">
<meta property="og:description" content="CloudStack is open source cloud computing software for creating, managing, and deploying infrastructure cloud services">
<meta property="og:site_name" content="Apache Cloudstack"/>
<meta property="og:image" content="https://cloudstack.apache.org/images/monkey-144.png">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Apache Cloudstack">
<meta name="twitter:description" content="CloudStack is open source cloud computing software for creating, managing, and deploying infrastructure cloud services">
<meta name="twitter:image:src" content="https://cloudstack.apache.org/images/monkey-144.png">
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=1">
<link href="stylesheets/bootstrap.css" rel="stylesheet" media="screen">
<link href="stylesheets/font-awesome.css" rel="stylesheet">
<link href="stylesheets/bootswatch.min.css" rel="stylesheet">
<link rel="shortcut icon" href="images/favicon.ico">
<link rel="icon" href="images/favicon.ico">
<!-- Commenting out this template stuff until we figure out how to make it work with middleman
{% if headers.atom %}
<link rel="alternate" href="{{ headers.atom.url }}"
type="application/atom+xml" title="{{ headers.atom.title }}" />
{% endif %}
{% if headers.base %}<base href="{{ headers.base }}" />{% endif %}
-->
<!-- {% if headers.notice %}{{ headers.notice }}{% endif %} -->
<!-- Twitter Bootstrap and jQuery after this line. -->
<script src="https://code.jquery.com/jquery-latest.js"></script>
<script src="https://netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script>
<script>
$('.dropdown-toggle').dropdown();
$('.nav-collapse').collapse();
</script>
</head>
<body>
<div class="navbar navbar-default navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<a href="index.html" class="navbar-brand"><img class="" src="images/new-logo-sm.png" style="width: 200px" alt="Apache Cloudstack"></a>
<button class="navbar-toggle collapsed" type="button" data-toggle="collapse" data-target="#navbar-main">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
</div>
<div class="navbar-collapse collapse" id="navbar-main">
<ul class="nav navbar-nav">
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#" id="about">About <span class="caret"></span></a>
<ul class="dropdown-menu" aria-labelledby="about">
<li><a tabindex="-1" href="about.html">About</a></li>
<li class="divider"></li>
<li><a tabindex="-1" href="https://blogs.apache.org/cloudstack/" target="_blank">Blog<span class="glyphicon glyphicon-share-alt pull-right"></span></a></li>
<li><a tabindex="-1" href="http://planet.apache.org/cloudstack/" target="_blank">Planet</a></li>
<li><a tabindex="-1" href="history.html">History</a></li>
<li><a tabindex="-1" href="http://cloudstack.apache.org/software/features.html" target="_blank">Features<span class="glyphicon glyphicon-share-alt pull-right"></span></a></li>
<li><a tabindex="-1" href="cloudstack-faq.html">FAQ</a></li>
<li><a tabindex="-1" href="who.html">Who We Are</a></li>
<li><a tabindex="-1" href="security.html">Security</a></li>
</ul>
</li>
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#" id="community">Community <span class="caret"></span></a>
<ul class="dropdown-menu" aria-labelledby="community">
<li><a tabindex="-1" href="contribute.html">Get Involved</a></li>
<li><a tabindex="-1" href="developers.html">Developers</a></li>
<li><a tabindex="-1" href=/mailing-lists.html">Mailing Lists</a></li>
<li><a tabindex="-1" href="http://lanyrd.com/topics/apache-cloudstack/" target="_blank">Events &amp; Meetups <span class="glyphicon glyphicon-share-alt pull-right"></span></a></li>
</ul>
</li>
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#" id="users">Users <span class="caret"></span></a>
<ul class="dropdown-menu" aria-labelledby="users">
<li><a tabindex="-1" href="users.html">Known Users</a></li>
<li><a tabindex="-1" href="https://cwiki.apache.org/confluence/display/CLOUDSTACK/Case+Studies" target="_blank">Case Studies <span class="glyphicon glyphicon-share-alt pull-right"></span></a></li>
<li><a tabindex="-1" href="survey.html">Take Survey</a></li>
</ul>
</li>
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#" id="docs">Documentation <span class="caret"></span></a>
<ul class="dropdown-menu" aria-labelledby="docs">
<li><a tabindex="-1" href="http://docs.cloudstack.apache.org" target="_blank">Getting Started Docs</span></a></li>
<li><a tabindex="-1" href="http://docs.cloudstack.apache.org/projects/cloudstack-installation" target="_blank">Installation Docs</a></li>
<li><a tabindex="-1" href="http://docs.cloudstack.apache.org/projects/cloudstack-administration" target="_blank">Administration Docs</a></li>
<li><a tabindex="-1" href="http://docs.cloudstack.apache.org/projects/cloudstack-release-notes" target="_blank">Release Notes</a></li>
<li><a tabindex="-1" href="https://cwiki.apache.org/confluence/display/CLOUDSTACK/Home" target="_blank">Wiki</a></li>
<li><a tabindex="-1" href="https://cwiki.apache.org/confluence/display/CLOUDSTACK/CloudStack+Books" target="_blank">Books</a></li>
<li><a tabindex="-1" href="docs/" target="_blank">Obsolete Docs</a></li>
<li><a tabindex="-1" href="docs/api/">API Documentation</a></li>
</ul>
</li>
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#" id="download">Download <span class="caret"></span></a>
<ul class="dropdown-menu" aria-labelledby="download">
<li><a tabindex="-1" href="downloads.html">CloudStack Releases</a></li>
<li><a tabindex="-1" href="downloads.html#cloudmonkey">CloudMonkey</a></li>
<li><a tabindex="-1" href="downloads.html#archives">Release Archive</a></li>
</ul>
</li>
<li class="dropdown">
<a class="dropdown-toggle" data-toggle="dropdown" href="#" id="apache">Apache <span class="caret"></span></a>
<ul class="dropdown-menu" aria-labelledby="apache">
<li><a tabindex="-1" href="http://apache.org">Apache Software Foundation</a></li>
<li><a tabindex="-1" href="http://www.apache.org/licenses/">License</a></li>
<li><a tabindex="-1" href="http://www.apache.org/foundation/sponsorship.html">Sponsorship</a></li>
<li><a tabindex="-1" href="http://www.apache.org/foundation/thanks.html">Thanks</a></li>
</ul>
</li>
</ul>
</div>
</div>
</div>
<div class="container">
<div class="bs-docs-section">
<div class="row">
<div class="col-lg-12">
<div class="page-header">
<h1 id="indicators">Developer Resources for Apache CloudStack</h1>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-8">
<h2>Contributing as a Non-Committer</h2>
<p>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.</p>
<p>Non-committers, however, have to submit patches for review. Don't worry, it's not an onerous process at all. The first time you submit a patch, it will take a minute or two to create an account on <a href="http://reviews.apache.org/">Review Board</a>, but it's a piece of cake from start to finish.</p>
<h3> Assumptions </h3>
<p>For the purpose of this post, we'll assume that you already have a system with <a href="http://git-scm.com/">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">Apache License 2.0</a>.</p>
<p>Further, if you're fixing a bug we'll assume that you've either filed a bug report 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.</p>
<p>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.html">here</a>.</p>
<p>In short, communication is a vital part of making a contribution to an Apache project.</p>
<h3> Getting Started </h3>
<p>First, lets make sure that you've added your name and email to your `~/.gitconfig`:</p>
<pre>
$ git config --global user.name "Your Name"
$ git config --global user.email you@domain.com
</pre>
<p>You'll grab the CloudStack source with git:</p>
<pre>
$ git clone https://git-wip-us.apache.org/repos/asf/cloudstack.git
</pre>
<p>If you already have the source, make sure you're working with the most recent version. Do a `git pull` if you cloned the source more than a few hours ago. (Apache CloudStack development can move pretty fast!)</p>
<pre>
$ git checkout -b mybranch
</pre>
<p>This does two things: One, it creates the branch <em>mybranch</em> and two, it changes your working branch to <em>mybranch</em>. Running `git branch` will show you which branch you're working on, with an asterisk next to the active branch, like so:</p>
<pre>
[user@localhost cloudstack]$ git branch
master
* mybranch
</pre>
<p>Make whatever changes you're going to make, be sure to use <code>git add</code> to stage the changes, and then you're going to commit the changes to your working branch:</p>
<pre>git commit -m "Insert a meaningful summary of changes here."</pre>
<p>Finally, you're going to create a patch to upload to <a href="http://reviews.apache.org/">Review Board</a>:</p>
<pre>git format-patch master --stdout &gt; ~/patch-name.patch</pre>
<h3>Using Review Board</h3>
<p>Review Board is the main method of sending patches to the Apache CloudStack project. That's not to say that a patch sent directly to the mailing list will be ignored, but the <em>strong preference</em> is that patches be submitted through Review Board. Don't worry, it's a very easy tool to use.</p>
<p>If you haven't already, create an account with Review Board. Registering only requires an email address, first name, and last name. After you're registered, head to <a href="https://reviews.apache.org/r/new/">New Review Request</a> and select the repository (<strong>cloudstack-git</strong>) and upload the patch (diff) created with git.</p>
<p>Click <strong>Create Review Request</strong> and then fill out the information required. Specifically:</p>
<ol>
<li>Summary</li>
<li>Groups (choose cloudstack)</li>
<li>People (only use if you need specific committers to review changes)</li>
<li>Description</li>
<li>Testing Done</li>
</ol>
<p>The <strong>Summary</strong> will be the subject that's sent to the cloudstack-dev mailing list. So if your summary is "fixed feature foo" the subject of the mail sent to the list will be "Review Request: fixed feature foo". Try to be descriptive with the Summary. If you're submitting a patch for a bug, please be sure to include the bug number in the summary. (Like "Bugfix CS-15942: Fixing problem with redundant routers.")</p>
<p>The description should be a full description of what you've done. Please be specific, and include enough information that any reviewer will be able to look at your patch without asking for follow-up information. You need to include the bug ID that your patch relates to as well (ex: CLOUDSTACK-XXX ).</p>
<p>If you're submitting a patch that modifies code, adds features, etc. you should test before submitting. Please be sure to describe your tests here.</p>
<p>Once you're sure everything is OK, go ahead and submit the patch. But that's <em>not</em> the end of the process. The work isn't done until the patch is committed!</p>
<h3> Review </h3>
<p>Once you've submitted your patch, you should receive a response within a few days. If you receive no response within a week, please ping the cloudstack-dev mailing list. One of the features of Review Board is that shows all of the requests and when they were posted, and the committers know that they should be responsible for reviewing patches in a timely fashion.</p>
<p>When your patch is reviewed, it may be accepted as-is or you may be asked to make changes. If you're asked to make changes, please work with the committer to see the patch through to acceptance.</p>
<p>If the patch is accepted and committed, you have one last task (don't worry, it's minor and kind of satisfying).</p>
<p>Go back to Review Board, click <strong>My Dashboard</strong> and then <strong>Outgoing Reviews</strong>. Go to your submission, you should see a "Ship it!" message from the reviewer. Click the <strong>Close</strong> button and choose <strong>Submitted</strong>. The status has now changed from <em>pending</em> to <em>submitted</em>.</p>
<p>That's it &ndash; you've helped make Apache CloudStack a better project. Thanks!</p>
<h3>Screencast</h3>
<p>If you are new to git you might want to watch this screencast:</p>
<iframe width="560" height="315" src="//www.youtube.com/embed/3c5JIW4onGk?list=PLb899uhkHRoZCRE00h_9CRgUSiHEgFDbC" frameborder="0" allowfullscreen=""></iframe>
<h3>Further Reading</h3>
<p>You might want to peruse the <a href="http://www.apache.org/foundation/getinvolved.html">Get Involved</a> page on Apache.org, and the <a href="http://commons.apache.org/patches.html">On Contributing Patches</a> doc as well. Note that some of that does not apply to Apache CloudStack, as we're using git rather than Subversion. But do respect the original style of the CloudStack code, and ensure that you're using spaces rather than tabs, and your patches have Unix line endings (LF) rather than Windows-type line endings (CRLF).</p>
</div>
<div class="col-lg-4">
<div class="list-group">
<div class="list-group-item active">Resources</div>
<a href="https://issues.apache.org/jira/browse/CLOUDSTACK" class="list-group-item">Jira</a>
<a href="https://reviews.apache.org/dashboard/" class="list-group-item">Reviewboard</a>
<a href="https://builds.apache.org/view/A-D/view/Cloudstack/" class="list-group-item">ASF Jenkins</a>
<a href="http://jenkins.buildacloud.org/" class="list-group-item">CloudStack Jenkins</a>
<a href="https://cwiki.apache.org/confluence/display/CLOUDSTACK/Development+101" class="list-group-item">CloudStack Development 101</a>
<a href="https://cwiki.apache.org/confluence/display/CLOUDSTACK/Setting+up+CloudStack+Development+Environment" class="list-group-item">Setting up a Dev Environment</a>
<a href="https://cwiki.apache.org/confluence/display/CLOUDSTACK/Coding+conventions" class="list-group-item">Code Conventions</a>
<a href="https://cwiki.apache.org/confluence/display/CLOUDSTACK/Testing" class="list-group-item">Testing CloudStack</a>
</div>
<div class="panel panel-success">
<div class="panel-heading">
<h3 class="panel-title">Git Repositories</h3>
</div>
<div class="panel-body">
<p>The git repositories are hosted on Apache infrastructure, and can be found here:</p>
<ul>
<li>Apache CloudStack <a href="https://git-wip-us.apache.org/repos/asf/cloudstack.git">https://git-wip-us.apache.org/repos/asf/cloudstack.git</a></li>
<li>Apache CloudStack CloudMonkey <a href="https://git-wip-us.apache.org/repos/asf/cloudstack-cloudmonkey.git">https://git-wip-us.apache.org/repos/asf/cloudstack-cloudmonkey.git</a></li>
</ul>
<p>To get the most recent source for Apache CloudStack, use:</p>
<pre>
git clone https://git-wip-us.apache.org/repos/asf/cloudstack.git
</pre>
<p>Similarly, clone the cloudstack-cloudmonkey repository to get access to the most recent source for CloudMonkey.</p>
<p>For projects related to Apache CloudStack, see the <a href="https://github.com/cloudstack-extras">CloudStack-extras repositories on GitHub</a>.</p>
</div>
</div>
</div>
</div>
<footer>
<p>Copyright © 2015 The Apache Software Foundation, Licensed under the Apache License, Version 2.0. <br/>
"Apache", "CloudStack", "Apache CloudStack", the Apache CloudStack logo, the Apache CloudStack Cloud Monkey logo and the Apache feather logos are registered trademarks or trademarks of The Apache Software Foundation.</p>
<p><a href="/trademark-guidelines.html">Apache CloudStack Trademark Usage</a> - <a href="/bylaws.html">Apache CloudStack Community ByLaws</a></p>
</footer>
</div>
</div>
</div>
</body>
</html>