Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 1 | <!DOCTYPE html> |
| 2 | <html lang="en"> |
| 3 | <head> |
| 4 | <meta charset="utf-8"> |
| 5 | <meta http-equiv="X-UA-Compatible" content="IE=edge"> |
| 6 | <meta name="viewport" content="width=device-width, initial-scale=1"> |
| 7 | <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags --> |
| 8 | <meta name="description" content=""> |
| 9 | <meta name="author" content=""> |
Ian Maxon | f84cb81 | 2015-12-07 15:09:45 -0800 | [diff] [blame] | 10 | <link rel="icon" href="favicon.ico"> |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 11 | |
| 12 | <title>Contributing to AsterixDB</title> |
| 13 | |
| 14 | <!-- Bootstrap core CSS --> |
Ian Maxon | f84cb81 | 2015-12-07 15:09:45 -0800 | [diff] [blame] | 15 | <link href="css/bootstrap.min.css" rel="stylesheet"> |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 16 | <!-- Bootstrap theme --> |
| 17 | |
| 18 | <!-- Custom styles for this template --> |
Ian Maxon | f84cb81 | 2015-12-07 15:09:45 -0800 | [diff] [blame] | 19 | <link href="css/theme.css" rel="stylesheet"> |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 20 | |
| 21 | <!-- HTML5 shim and Respond.js for IE8 support of HTML5 elements and media queries --> |
| 22 | <!--[if lt IE 9]> |
| 23 | <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script> |
| 24 | <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script> |
| 25 | <![endif]--> |
| 26 | <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/font-awesome/4.3.0/css/font-awesome.min.css"> |
| 27 | </head> |
| 28 | |
| 29 | <div class="container theme-showcase" role="main"> |
Till Westmann | 00f9bf2 | 2016-03-14 13:59:27 -0700 | [diff] [blame^] | 30 | <div class="masthead"> |
| 31 | <p class="lead"> |
| 32 | <a href="index.html"> |
| 33 | <img src="img/asterixdb_tm.png" style="height:75px; width:auto; vertical-align:bottom; margin-top:10px;"/> |
| 34 | </a> |
| 35 | </p> |
| 36 | </div> |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 37 | |
Till Westmann | 00f9bf2 | 2016-03-14 13:59:27 -0700 | [diff] [blame^] | 38 | <nav class="navbar navbar-default"> |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 39 | <div class="container"> |
| 40 | <div class="navbar-header"> |
| 41 | <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target=".navbar-collapse"> |
| 42 | <span class="sr-only">Toggle navigation</span> |
| 43 | <span class="icon-bar"></span> |
| 44 | <span class="icon-bar"></span> |
| 45 | <span class="icon-bar"></span> |
| 46 | </button> |
Ian Maxon | f84cb81 | 2015-12-07 15:09:45 -0800 | [diff] [blame] | 47 | <a class="navbar-brand" href="index.html">Overview</a> |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 48 | </div> |
| 49 | <div class="navbar-collapse collapse"> |
| 50 | <ul class="nav navbar-nav"> |
Ian Maxon | f84cb81 | 2015-12-07 15:09:45 -0800 | [diff] [blame] | 51 | <li><a href="download.html">Download</a></li> |
Ian Maxon | a9643c8 | 2015-09-01 11:15:57 -1000 | [diff] [blame] | 52 | <li class="dropdown"> |
| 53 | <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Documentation<span class="caret"></span></a> |
| 54 | <ul class="dropdown-menu" role="menu"> |
| 55 | <li class="dropdown-header">Stable release</li> |
Till Westmann | e617e52 | 2016-02-29 12:42:51 -0800 | [diff] [blame] | 56 | <li><a href="docs/0.8.8-incubating/index.html">Documentation for 0.8.8-incubating<i class="fa fa-external-link fa-sm"></i></a></li> |
Ian Maxon | a9643c8 | 2015-09-01 11:15:57 -1000 | [diff] [blame] | 57 | <li class="divider"></li> |
| 58 | <li class="dropdown-header">Snapshot release</li> |
Ian Maxon | e2b799e | 2015-11-24 18:20:03 -0800 | [diff] [blame] | 59 | <li><a href="https://ci.apache.org/projects/asterixdb/index.html">Documentation for 0.8.8-SNAPSHOT <i class="fa fa-external-link fa-sm"></i></a></li> |
Ian Maxon | a9643c8 | 2015-09-01 11:15:57 -1000 | [diff] [blame] | 60 | </ul> |
| 61 | </li> |
Ian Maxon | f84cb81 | 2015-12-07 15:09:45 -0800 | [diff] [blame] | 62 | <li><a href="about.html">About</a></li> |
| 63 | <li><a href="community.html">Community</a></li> |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 64 | <li class="dropdown"> |
| 65 | <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">Contributing <span class="caret"></span></a> |
| 66 | <ul class="dropdown-menu" role="menu"> |
| 67 | <li class="dropdown-header">For New Contributors</li> |
Ian Maxon | f84cb81 | 2015-12-07 15:09:45 -0800 | [diff] [blame] | 68 | <li><a href="dev-setup.html">Development Setup</a></li> |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 69 | <li class="divider"></li> |
| 70 | <li class="dropdown-header">For Committers</li> |
Ian Maxon | f84cb81 | 2015-12-07 15:09:45 -0800 | [diff] [blame] | 71 | <li><a href="pushing.html">Pushing changes</a></li> |
| 72 | <li><a href="site.html">Editing this site</a></li> |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 73 | </ul> |
| 74 | </li> |
| 75 | </ul> |
Till Westmann | 00f9bf2 | 2016-03-14 13:59:27 -0700 | [diff] [blame^] | 76 | <ul class="nav navbar-nav navbar-right"> |
| 77 | <li class="dropdown"> |
| 78 | <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false" |
| 79 | style="padding-right: 30px"> |
| 80 | <img src="img/feather.png" style="height:20px"/>Apache Software Foundation<span class="caret"/> |
| 81 | </a> |
| 82 | <ul class="dropdown-menu dropdown-menu-right" role="menu"> |
| 83 | <li><a href="http://www.apache.org/"><b>ASF Homepage</b></a></li> |
| 84 | <li><a href="http://www.apache.org/licenses/">License</a></li> |
| 85 | <li><a href="http://www.apache.org/foundation/sponsorship.html">Donate</a></li> |
| 86 | <li><a href="http://www.apache.org/foundation/thanks.html">Thanks</a></li> |
| 87 | <li><a href="http://www.apache.org/security/">Security</a></li> |
| 88 | </ul> |
| 89 | </li> |
| 90 | </ul> |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 91 | </div><!--/.nav-collapse --> |
| 92 | </div> |
| 93 | </nav> |
| 94 | |
| 95 | |
Till Westmann | 00f9bf2 | 2016-03-14 13:59:27 -0700 | [diff] [blame^] | 96 | <div class="row"> |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 97 | <div class="col-md-8 col-centered"> |
| 98 | <h2>Contributing to AsterixDB</h2> |
| 99 | <hr /> |
| 100 | |
| 101 | <ul id="markdown-toc"> |
| 102 | <li><a href="#introduction" id="markdown-toc-introduction">Introduction</a></li> |
Ian Maxon | acb5849 | 2015-10-16 19:12:28 -0700 | [diff] [blame] | 103 | <li><a href="#master-snapshots" id="markdown-toc-master-snapshots">Master snapshots</a> <ul> |
| 104 | <li><a href="#managix-installer" id="markdown-toc-managix-installer">Managix Installer</a></li> |
| 105 | <li><a href="#yarn-installer" id="markdown-toc-yarn-installer">YARN Installer</a></li> |
| 106 | </ul> |
| 107 | </li> |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 108 | <li><a href="#setting-up-an-asterix-development-environment-in-eclipse" id="markdown-toc-setting-up-an-asterix-development-environment-in-eclipse">Setting up an Asterix Development environment in Eclipse</a> <ul> |
| 109 | <li><a href="#prerequisites" id="markdown-toc-prerequisites">Prerequisites</a></li> |
| 110 | <li><a href="#steps" id="markdown-toc-steps">Steps</a></li> |
| 111 | </ul> |
| 112 | </li> |
| 113 | <li><a href="#signing-up-for-gerrit" id="markdown-toc-signing-up-for-gerrit">Signing Up for Gerrit</a></li> |
| 114 | <li><a href="#configuring-your-local-working-environment-for-gerrit" id="markdown-toc-configuring-your-local-working-environment-for-gerrit">Configuring your local working environment for Gerrit</a> <ul> |
| 115 | <li><a href="#one-time-tasks" id="markdown-toc-one-time-tasks">One-time tasks</a></li> |
| 116 | <li><a href="#once-per-repository-tasks" id="markdown-toc-once-per-repository-tasks">Once-per-repository tasks</a></li> |
| 117 | </ul> |
| 118 | </li> |
| 119 | <li><a href="#making-changes---working-method" id="markdown-toc-making-changes---working-method">Making Changes - working method</a></li> |
| 120 | <li><a href="#making-more-changes" id="markdown-toc-making-more-changes">Making More Changes</a></li> |
| 121 | <li><a href="#using-jenkins-with-gerrit" id="markdown-toc-using-jenkins-with-gerrit">Using Jenkins with Gerrit</a> <ul> |
| 122 | <li><a href="#verification" id="markdown-toc-verification">Verification</a></li> |
| 123 | <li><a href="#retrigggering-builds-and-triggering-builds-manually" id="markdown-toc-retrigggering-builds-and-triggering-builds-manually">Retrigggering builds and triggering builds manually</a></li> |
| 124 | <li><a href="#cross-project-dependencies" id="markdown-toc-cross-project-dependencies">Cross-project Dependencies</a></li> |
| 125 | </ul> |
| 126 | </li> |
| 127 | </ul> |
| 128 | |
| 129 | <hr /> |
| 130 | |
| 131 | <h2 id="introduction">Introduction</h2> |
Till Westmann | 00f9bf2 | 2016-03-14 13:59:27 -0700 | [diff] [blame^] | 132 | <p>We warmly welcome any contributions to the Apache AsterixDB™ (incubating) or related (Hyracks, Pregelix) projects. |
| 133 | A great way to start contributing is to pick a bug labelled starter in JIRA and submit a patch for it, to get acquainted with our codebase and development process.</p> |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 134 | |
| 135 | <hr /> |
| 136 | |
Ian Maxon | acb5849 | 2015-10-16 19:12:28 -0700 | [diff] [blame] | 137 | <h2 id="master-snapshots">Master snapshots</h2> |
| 138 | <p>If you are a developer simply looking for a snapshot of the latest development version of AsterixDB to test out your application that is based on top of AsterixDB, snapshots from the latest successful push to our master branch are available below. These are non ASF-release, automatic builds.</p> |
| 139 | |
| 140 | <h3 id="managix-installer">Managix Installer</h3> |
Ian Maxon | 1bd6777 | 2015-11-12 16:14:20 -0800 | [diff] [blame] | 141 | <p><a class="btn btn-md btn-warning" href="https://asterix-jenkins.ics.uci.edu/job/asterix-test-full/lastStableBuild/org.apache.asterix$asterix-installer/artifact/org.apache.asterix/asterix-installer/0.8.8-SNAPSHOT/asterix-installer-0.8.8-SNAPSHOT-binary-assembly.zip" role="button">Download AsterixDB 0.8.8-SNAPSHOT <i class="fa fa-download fa-lg"></i> </a></p> |
Ian Maxon | acb5849 | 2015-10-16 19:12:28 -0700 | [diff] [blame] | 142 | |
| 143 | <h3 id="yarn-installer">YARN Installer</h3> |
Ian Maxon | 1bd6777 | 2015-11-12 16:14:20 -0800 | [diff] [blame] | 144 | <p><a class="btn btn-md btn-warning" href="https://asterix-jenkins.ics.uci.edu/job/asterix-test-full/lastStableBuild/org.apache.asterix$asterix-yarn/artifact/org.apache.asterix/asterix-yarn/0.8.8-SNAPSHOT/asterix-yarn-0.8.8-SNAPSHOT-binary-assembly.zip" role="button">Download AsterixDB 0.8.8-SNAPSHOT <i class="fa fa-download fa-lg"></i> </a></p> |
Ian Maxon | acb5849 | 2015-10-16 19:12:28 -0700 | [diff] [blame] | 145 | |
| 146 | <hr /> |
| 147 | |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 148 | <h2 id="setting-up-an-asterix-development-environment-in-eclipse">Setting up an Asterix Development environment in Eclipse</h2> |
| 149 | |
| 150 | <h3 id="prerequisites">Prerequisites</h3> |
| 151 | <ul> |
| 152 | <li>A suitable *nix environment (Linux, OSX)</li> |
Ian Maxon | 1bd6777 | 2015-11-12 16:14:20 -0800 | [diff] [blame] | 153 | <li>JDK 1.8+</li> |
| 154 | <li>Maven 3.1.1 or greater</li> |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 155 | <li>A relatively recent version of Eclipse</li> |
| 156 | </ul> |
| 157 | |
| 158 | <h3 id="steps">Steps</h3> |
| 159 | |
| 160 | <ol> |
Till Westmann | 0cf3663 | 2015-12-08 21:57:33 -0800 | [diff] [blame] | 161 | <li> |
| 162 | <p>Check out Hyracks and Asterix master in two folders via git in the command line. Assume that the path is <code>$HOME/workspace</code>.</p> |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 163 | |
Till Westmann | 0cf3663 | 2015-12-08 21:57:33 -0800 | [diff] [blame] | 164 | <pre><code> git clone https://github.com/apache/incubator-asterixdb/ |
| 165 | git clone https://github.com/apache/incubator-asterixdb-hyracks/ |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 166 | </code></pre> |
| 167 | |
Till Westmann | 0cf3663 | 2015-12-08 21:57:33 -0800 | [diff] [blame] | 168 | <p>You will now have <code>$HOME/workspace/incubator-asterixdb/</code> and <code>$HOME/workspace/incubator-asterixdb-hyracks/</code>.</p> |
| 169 | </li> |
| 170 | <li> |
| 171 | <p>Go to the hyracks and install it’s artifacts to the local Maven repository by executing the following commands:</p> |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 172 | |
Till Westmann | 0cf3663 | 2015-12-08 21:57:33 -0800 | [diff] [blame] | 173 | <pre><code> cd incubator-asterixdb-hyracks/ |
| 174 | mvn install -DskipTests |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 175 | </code></pre> |
Till Westmann | 0cf3663 | 2015-12-08 21:57:33 -0800 | [diff] [blame] | 176 | </li> |
| 177 | <li> |
| 178 | <p>Go to the asterixdb folder and perform the same action:</p> |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 179 | |
Till Westmann | 0cf3663 | 2015-12-08 21:57:33 -0800 | [diff] [blame] | 180 | <pre><code> cd ../incubator-asterixdb/asterix-maven-plugins/ |
| 181 | mvn install -DskipTests |
| 182 | cd ../ |
| 183 | mvn install -DskipTests |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 184 | </code></pre> |
Till Westmann | 0cf3663 | 2015-12-08 21:57:33 -0800 | [diff] [blame] | 185 | </li> |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 186 | <li>In Eclipse, import hyracks as an existing Maven Project. |
| 187 | <ul> |
| 188 | <li><code>File -> Import -> Maven -> Existing Maven Projects -> Next</code></li> |
Ian Maxon | 4baed87 | 2015-10-06 19:01:17 -0700 | [diff] [blame] | 189 | <li>Specify the Root directory as <code>incubator-asterixdb-hyracks</code> and then click Next until Finish is enabled.</li> |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 190 | <li>If Eclipse tries to install the <code>m2e</code> (Maven To Eclipse) connector, let it do so.</li> |
| 191 | <li>There might be some plugin errors; however, that is not a big deal. Wait until the job finishes.</li> |
| 192 | <li>Then, click Finish.</li> |
| 193 | </ul> |
| 194 | </li> |
| 195 | <li>Then import asterixdb as an existing Maven Project. |
| 196 | <ul> |
| 197 | <li><code>File -> Import -> Maven -> Existing Maven Projects -> Next</code></li> |
| 198 | <li>Specify root directory as <code>$HOME/workspace/asterixdb</code> and then click Next until Finish is enabled.</li> |
| 199 | <li>Eclipse may try installing <code>m2e</code> or other plugins again; let it do so.</li> |
| 200 | <li>Then, click Finish.</li> |
| 201 | </ul> |
| 202 | </li> |
| 203 | <li>Fix Eclipse’s build path to include compile-time generated sources. |
| 204 | <ul> |
| 205 | <li>Right click the project where a red X mark is shown(e.g. <code>asterix-algebra</code>. Then resolve by applying the following: |
| 206 | <ul> |
| 207 | <li>Right click asterix-algebra. Click Build Path and Configure Build Path. Click Add Folder.</li> |
| 208 | <li>Under the <code>target -> generated sources</code>, check the parent folder of the <code>edu</code> folder and click OK.</li> |
Ian Maxon | 4baed87 | 2015-10-06 19:01:17 -0700 | [diff] [blame] | 209 | <li>For example, if the directory structure is “target - generated-sources - javacc - org - apache …”, check the javacc directory and click OK. Then X mark will dissapear.</li> |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 210 | </ul> |
| 211 | </li> |
| 212 | <li>Repeat this step to all projects which show a red X mark except “asterix-fuzzyjoin” and “asterix-transactions”.</li> |
| 213 | <li>It may be the case that only “asterix-algebra” and “asterix-runtime” will require these steps.</li> |
| 214 | </ul> |
| 215 | </li> |
| 216 | <li>Set up Eclipse code formatting rules |
| 217 | <ul> |
Till Westmann | 0cf3663 | 2015-12-08 21:57:33 -0800 | [diff] [blame] | 218 | <li>Download files <a href="https://cwiki.apache.org/confluence/download/attachments/61322291/AsterixCodeFormatProfile.xml">AsterixCodeFormatProfile.xml</a> |
| 219 | <a href="https://cwiki.apache.org/confluence/download/attachments/61322291/AsterixCleanupFormatProfile.xml">AsterixCleanupFormatProfile.xml</a></li> |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 220 | <li>Import profiles into Eclipse |
| 221 | <ul> |
| 222 | <li>Preferences -> Java -> Code style -> Formatter -> Import -> Select AsterixCodeFormatProfile.xml</li> |
| 223 | <li>Preferences -> Java -> Code style -> Clean up -> Import -> Select AsterixCleanupFormatProfile.xml</li> |
| 224 | <li>Preferences -> Java -> Editor -> Save actions -> Perform the selected action on save -> Format source code</li> |
| 225 | </ul> |
| 226 | </li> |
| 227 | </ul> |
| 228 | </li> |
| 229 | </ol> |
| 230 | |
| 231 | <hr /> |
| 232 | |
| 233 | <h2 id="signing-up-for-gerrit">Signing Up for Gerrit</h2> |
| 234 | |
Ian Maxon | 4baed87 | 2015-10-06 19:01:17 -0700 | [diff] [blame] | 235 | <p>First, to contribute patches to AsterixDB, you should have an ICLA on file with the Apache Software Foundation. |
| 236 | For details see the ASF website <a href="https://www.apache.org/dev/new-committers-guide.html#cla">here</a> |
| 237 | You should only need to perform the following steps once.</p> |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 238 | |
| 239 | <p>Our Gerrit server is <a href="https://asterix-gerrit.ics.uci.edu/">here</a></p> |
| 240 | |
| 241 | <ol> |
| 242 | <li>Visit the above URL, and click on “Register” in the upper right.</li> |
| 243 | <li>Gerrit uses OpenID; you may create an account using any OpenID provider, or with a Yahoo! account.</li> |
| 244 | <li>Click on “Sign in with a Yahoo! ID”. You will be taken to a page to log in to Yahoo!.</li> |
| 245 | <li>From there, you will get a page asking you to allow asterix-gerrit.ics.uci.edu to access your email and basic information. Approve this request.</li> |
| 246 | <li>You will be directed back to Gerrit to complete the account signup. Make sure to fill out this page! It is necessary to allow you to push code changes to Gerrit for review.</li> |
| 247 | <li>For “Full Name” and “Preferred Email”, enter what you like. If you would like to register a different email address such as an @uci.edu address, you may do so. This is where Gerrit will send you notifications about code review requests, voting, and so on.</li> |
| 248 | <li>For “Select a unique username”, choose a short alphanumeric ID. This will be your ssh username for git access. Be sure to click “Select Username” to verify that the name is unique and allowed.</li> |
| 249 | <li>Also provide a ssh public key here. There is information on the page on creating one if you do not have one. Click “Add” when done. |
| 250 | * Note that you can create a new ssh public key just for Gerrit if you like; if you do so you will need to modify your .ssh/config file to ensure the right key is selected.</li> |
| 251 | <li>Click “Continue” at the bottom of the page.</li> |
| 252 | <li> |
| 253 | <p>Finally, verify that you have everything set up: From a command-line, type |
| 254 | <code> |
| 255 | ssh -p 29418 username@asterix-gerrit.ics.uci.edu |
| 256 | </code></p> |
| 257 | </li> |
| 258 | <li>You should see</li> |
| 259 | </ol> |
| 260 | |
| 261 | <pre><code> **** Welcome to Gerrit Code Review **** |
| 262 | |
| 263 | Hi Full Name, you have successfully connected over SSH. |
| 264 | |
| 265 | Unfortunately, interactive shells are disabled. |
| 266 | To clone a hosted Git repository, use: |
| 267 | |
| 268 | git clone ssh://username@asterix-gerrit.ics.uci.edu:29418/REPOSITORY_NAME.git |
| 269 | |
| 270 | </code></pre> |
| 271 | |
| 272 | <p>At this point, please send an email to Chris or Ian, specifying the email address of your new account, and ask to be added to the “AsterixDB Devs” group. You may push change proposals to Gerrit, and vote +1/-1 Code Review on any proposals without being in AsterixDB Devs, but you cannot vote +2 on anything to allow a change to be merged.</p> |
| 273 | |
| 274 | <hr /> |
| 275 | |
| 276 | <h2 id="configuring-your-local-working-environment-for-gerrit">Configuring your local working environment for Gerrit</h2> |
| 277 | |
| 278 | <h3 id="one-time-tasks">One-time tasks</h3> |
| 279 | |
| 280 | <ol> |
| 281 | <li>At the command-line, run the following. Replace “username” with the user name you chose in step 7 above. |
| 282 | <code> |
| 283 | git config --global gerrit.url ssh://username@asterix-gerrit.ics.uci.edu:29418/ |
| 284 | </code></li> |
| 285 | <li>Download my “git-gerrit” utility library: |
| 286 | <code> |
| 287 | git clone https://github.com/ceejatec/git-gerrit |
| 288 | </code></li> |
| 289 | <li>Ensure that the <code>git-gerrit/git-gerrit</code> script is on your PATH. You could copy it to somewhere, but it would be best to leave it inside the github clone so you can easily get updates.</li> |
| 290 | </ol> |
| 291 | |
| 292 | <h3 id="once-per-repository-tasks">Once-per-repository tasks</h3> |
| 293 | |
| 294 | <ol> |
Till Westmann | 0cf3663 | 2015-12-08 21:57:33 -0800 | [diff] [blame] | 295 | <li> |
| 296 | <p>To work on (say) Asterix, first clone the GitHub mirror or the ASF repository (if you already have a local clone, great!), e.g.</p> |
| 297 | |
| 298 | <p>git clone https://github.com/apache/incubator-asterixdb</p> |
| 299 | </li> |
| 300 | <li> |
| 301 | <p><code>cd</code> into the clone repo directory, and then run the following command to create the “gerrit” remote.</p> |
| 302 | |
| 303 | <p>git gerrit init</p> |
| 304 | </li> |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 305 | </ol> |
| 306 | |
| 307 | <hr /> |
| 308 | |
| 309 | <h2 id="making-changes---working-method">Making Changes - working method</h2> |
| 310 | |
| 311 | <ol> |
Till Westmann | 0cf3663 | 2015-12-08 21:57:33 -0800 | [diff] [blame] | 312 | <li> |
| 313 | <p>When you want to start working on a bug, feature, etc, first make a local <code>git</code> branch. Never work directly on |
| 314 | <code>master</code>! <code>master</code> should always be a pure mirror of <code>origin/master</code>, i.e., the GitHub mirror or the ASF repository.</p> |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 315 | |
Till Westmann | 0cf3663 | 2015-12-08 21:57:33 -0800 | [diff] [blame] | 316 | <pre><code> git checkout -b my_branch |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 317 | </code></pre> |
Till Westmann | 0cf3663 | 2015-12-08 21:57:33 -0800 | [diff] [blame] | 318 | </li> |
| 319 | <li> |
| 320 | <p>Make your changes, test them, etc. Feel free to <code>git commit</code> as often as you like.</p> |
| 321 | </li> |
| 322 | <li> |
| 323 | <p><strong>Optional</strong>: If you like, you can push your branch up to another git repository (e.g. in your own GitHub account), either to share it with others or as a backup. You may do this at whatever point in time you like.</p> |
| 324 | </li> |
| 325 | <li> |
| 326 | <p>Every so often, you should update your local <code>master</code> mirror, and then merge that onto your working branch. This will prevent your branch from falling too far out of date, and ensure that your code review proposals will merge successfully with <code>master</code>. There are a number of ways to do this, but <code>git-gerrit</code> provides a convenience function:</p> |
Ian Maxon | f84cb81 | 2015-12-07 15:09:45 -0800 | [diff] [blame] | 327 | |
Till Westmann | 0cf3663 | 2015-12-08 21:57:33 -0800 | [diff] [blame] | 328 | <pre><code> git gerrit update |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 329 | </code></pre> |
Till Westmann | 0cf3663 | 2015-12-08 21:57:33 -0800 | [diff] [blame] | 330 | </li> |
| 331 | <li> |
| 332 | <p>When you are ready to submit changes for code review, first ensure that you have committed everything locally that is necessary (<code>git status</code> should report “nothing to commit, working directory clean”). This is also a good time to update (see step 4). Then run:</p> |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 333 | |
Till Westmann | 0cf3663 | 2015-12-08 21:57:33 -0800 | [diff] [blame] | 334 | <pre><code> git gerrit submit |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 335 | </code></pre> |
Till Westmann | 0cf3663 | 2015-12-08 21:57:33 -0800 | [diff] [blame] | 336 | </li> |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 337 | <li>This will pop open your editor to invite you to create a good commit message. This will be the single commit message which will be the only one to appear in the project’s master git history. Take the time to make it clear. The editor will contain the log messages of everything you committed on your branch as a reminder, but generally you will want to delete all this and replace it with a comprehensive message. Also: As noted in the initial message, the last line of the buffer will contain a <code>Change-Id</code> field. Do not delete that line! It is used by Gerrit to identify this particular merge proposal.</li> |
Till Westmann | 0cf3663 | 2015-12-08 21:57:33 -0800 | [diff] [blame] | 338 | <li> |
| 339 | <p>When you save your commit message, git-gerrit will push all of the changes from your working branch up to Gerrit. Assuming no errors, you should see output similar to the following:</p> |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 340 | |
Till Westmann | 0cf3663 | 2015-12-08 21:57:33 -0800 | [diff] [blame] | 341 | <pre><code> remote: Resolving deltas: 100% (1/1) |
| 342 | remote: Processing changes: new: 1, refs: 1, done |
| 343 | remote: |
| 344 | remote: New Changes: |
| 345 | remote: http://fulliautomatix.ics.uci.edu:8443/30 |
| 346 | remote: |
| 347 | To ssh://ceej@fulliautomatix.ics.uci.edu:29418/ceej-gerrit-test |
| 348 | * [new branch] HEAD -> refs/for/master |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 349 | </code></pre> |
Till Westmann | 0cf3663 | 2015-12-08 21:57:33 -0800 | [diff] [blame] | 350 | </li> |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 351 | <li>That URL under “New Changes” is your code review! Send it to others to request reviews.</li> |
| 352 | <li>If you get any negative code reviews and need to make changes, you can just repeat steps 2 - 6 of the working method. Your local branch will still have all the history you put there, if you need to revert changes or look back and see what you did, etc.</li> |
| 353 | <li>When you repeat step 6, you will notice two things: First, git-gerrit keeps the change message for you, including the Change-Id, so you don’t have to re-invent it every time. Second, the output from <code>git gerrit submit</code> will not include the URL of the review this time. I’m not sure why; I wish it did. But if you re-visit the old URL in your browser, you should see an additional “Patch Set” containing your revised changes for people to review.</li> |
| 354 | </ol> |
| 355 | |
| 356 | <h2 id="making-more-changes">Making More Changes</h2> |
| 357 | |
| 358 | <p>You may have as many feature branches as you want locally, and each may be at any point in the review cycle.</p> |
| 359 | |
| 360 | <p>Once you are done with a change (that is, it has been Code Reviewed and approved in Gerrit and merged), it is probably best to start work on the next big thing on a new branch. However, git-gerrit attempts to be smart if you choose to re-use a branch. For example, it should notice if the “current” Change-Id for a branch has been merged to master, and it will create a new Change-Id and a new fresh commit message the next time you run <code>git gerrit submit</code>.</p> |
| 361 | |
| 362 | <p>In that case, you may notice that the list of changes on the branch still contains older commits which have been merged. That is due to the unfortunate way Gerrit works; it requires squashing to a single git commit for review, which loses the association with the original commits in your history.</p> |
| 363 | |
| 364 | <p>It is also possible that you may want to re-use a branch and git-gerrit fails to notice that the older change has been merged - or perhaps the change was Abandoned on Gerrit and not merged, and you want to continue working on the same branch to create a new proposal. In this case, run |
| 365 | <code> |
| 366 | git gerrit new |
| 367 | </code> |
| 368 | on your branch. This will force git-gerrit to create a new Change-Id and commit message the next time you run <code>git gerrit submit</code>.</p> |
| 369 | |
| 370 | <hr /> |
| 371 | |
| 372 | <h2 id="using-jenkins-with-gerrit">Using Jenkins with Gerrit</h2> |
| 373 | |
| 374 | <h3 id="verification">Verification</h3> |
| 375 | |
| 376 | <p>As of right now, whenever a patch set is submitted to Gerrit (i.e. whenever a user performs ‘git gerrit submit’) are automatically picked up by Jenkins, which runs <code>mvn verify</code> to test the patch fully. Once the build finishes, Jenkins comments on the patchset and votes with the result (+1 for all tests passing, -1 for anything less). Ideally, and in most cases, verifocation of a patchset reqires no intervention. However there are a few exceptions to this as detailed below.</p> |
| 377 | |
| 378 | <h3 id="retrigggering-builds-and-triggering-builds-manually">Retrigggering builds and triggering builds manually</h3> |
| 379 | |
| 380 | <h4 id="retriggering">Retriggering</h4> |
| 381 | <p>Occasionally, there are builds in which tests failed, but perhaps not for a reason that has anything to do with the proposed patch’s changes. For example, on occasion the Integration tests can have issues with ports on the build server already being bound. The simple work around to this is to try building again.</p> |
| 382 | |
| 383 | <p>One way to perform this is by simply visiting the link that is posted on Gerrit by Jenkins, and hitting the ‘Retrigger’ link on the left-hand side of the page. This will try retesting the build with the exact same parameters as last time, hopefully with a different result.</p> |
| 384 | |
| 385 | <h4 id="manual-trigger">Manual Trigger</h4> |
| 386 | <p>Builds of Gerrit patches can also be fully manually triggered from Jenkins. This can be desirable if a change is now dependent on a Hyracks change (via the Topic field feature described below), or if the patch is a draft or is not triggered automatically for any other reason. To manually trigger a build of a patchset, visit the Jenkins front-page, and click the ‘Query and Trigger Gerrit patches’ link. This should link to a page allowing you to manually trigger Gerrit patches. In the search field any query that can be searched in the Gerrit web interface can be used, but the default query of all open patchsets is likely fine. Hit the ‘Search’ button, and then click the checkbox that represents the patch that needs to be built. Then simply click ‘Trigger Selected’ and the patch will start building.</p> |
| 387 | |
| 388 | <h3 id="cross-project-dependencies">Cross-project Dependencies</h3> |
| 389 | |
| 390 | <p>It is sometimes the case that a change in one related project alters interfaces or expected results that an upstream project relies on. The converse can be true as well, such as an AsterixDB change that needs a Hyracks feature. In these sorts of situations, there is a mechanism to describe to Jenkins this dependenc of one project’s patchset to a particular Hyracks Change, by using the ‘Topic’ field in Gerrit. To utilize |
| 391 | this feature, perform the following steps:</p> |
| 392 | |
| 393 | <ol> |
| 394 | <li>First submit the Hyracks change which the upstream (AsterixDB,etc..) change depends on if you have not done so already</li> |
| 395 | <li>In the Hyracks change details on the Gerrit web interface, take note of the refspec in the <em>Download</em> field of the patchset details. It will look something like <code>refs/changes/07/207/1</code>. This is what uniquely identifies the Hyracks change in Gerrit.</li> |
| 396 | <li>Submit the dependent change now, if you have not done so already. In the Gerrit web interface, view the change’s details. In the upper left-hand corner, there will be an empty field in a table, labeled <code>Topic</code>, with a notepad icon right-justified in the second column of the table. Click the notepad Icon, and in the resulting dialog box, enter in the refspec (<code>refs/changes/07/207/1</code>) as the Topic value.</li> |
| 397 | <li>Now, manually trigger the dependent change in Jenkins (see previous section for details)</li> |
| 398 | </ol> |
| 399 | |
| 400 | <hr /> |
| 401 | |
| 402 | </div> |
| 403 | </div> |
| 404 | |
| 405 | |
Till Westmann | 00f9bf2 | 2016-03-14 13:59:27 -0700 | [diff] [blame^] | 406 | <hr/> |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 407 | |
Till Westmann | 00f9bf2 | 2016-03-14 13:59:27 -0700 | [diff] [blame^] | 408 | <footer> |
| 409 | <div class="row"> |
| 410 | <div class="col-md-9 col-centered"> |
| 411 | <div class="col-md-9 text-left"> |
| 412 | <p>Apache AsterixDB is an effort undergoing incubation at The Apache Software Foundation (ASF), sponsored |
| 413 | by the Apache Incubator. |
| 414 | Incubation is required of all newly accepted projects until a further review indicates that the |
| 415 | infrastructure, communications, and decision making process have stabilized in a manner consistent with |
| 416 | other successful ASF projects. |
| 417 | While incubation status is not necessarily a reflection of the completeness or stability of the code, it |
| 418 | does indicate that the project has yet to be fully endorsed by the ASF.</p> |
| 419 | </div> |
| 420 | <div class="col-md-3 text-right"> |
| 421 | <img src="img/egg-logo.png" style="height:auto; width:200px; vertical-align:bottom;"/> |
| 422 | </div> |
| 423 | </div> |
| 424 | </div> |
| 425 | <div class="row"> |
| 426 | <div class="col-md-9 col-centered text-center"> |
| 427 | <p/> |
| 428 | <p>© Copyright 2016 The Apache Software foundation. All Rights Reserved. </p> |
| 429 | <p>Apache AsterixDB, the Apache AsterixDB logo, Apache, and the Apache feather logo are trademarks of the |
| 430 | Apache Software Foundation</p> |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 431 | </div> |
Till Westmann | 00f9bf2 | 2016-03-14 13:59:27 -0700 | [diff] [blame^] | 432 | </div> |
| 433 | </footer> |
| 434 | </div> <!-- /container --> |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 435 | |
| 436 | <!-- Bootstrap core JavaScript |
| 437 | ================================================== --> |
| 438 | <!-- Placed at the end of the document so the pages load faster --> |
| 439 | <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> |
Ian Maxon | f84cb81 | 2015-12-07 15:09:45 -0800 | [diff] [blame] | 440 | <script src="js/bootstrap.min.js"></script> |
Ian Maxon | 3dffc85 | 2015-07-13 20:17:09 -0700 | [diff] [blame] | 441 | </body> |
| 442 | </html> |