<?php  																														require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	$App 	= new App();	$Nav	= new Nav();	$Menu 	= new Menu();		include($App->getProjectCommon());    # All on the same line to unclutter the user's desktop'
/*******************************************************************************
 * Copyright (c) 2015 Eclipse Foundation and others.
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 *
 * Contributors:
 *    Stuart McCulloch (Sonatype, Inc.) - Custom content for Sisu
 *******************************************************************************/

$pageTitle = "Get Involved";

ob_start();
?>

<div id="midcolumn">

<h3 id="wiki">Wiki</h3>
<p>
  Information about building, testing and debugging <?php print $projectName;?> can be found in our <a href="<?php print $wiki;?>">wiki space</a>.
</p>

<h3 id="sources">Source Code</h3>
<p>
  The source files of the project are stored in <a href="<?php print $sources;?>">Git repositories</a>. Please
  see the summary tab of a repository for details about the URL required to clone a repository to your local machine. 
</p>
<p>
  In addition to the Git repositories hosted by the Eclipse Foundation, there are also
  <a href="https://github.com/eclipse">mirror repositories at GitHub</a>. Please note that due to legal requirements, 
  we will not accept pull requests from these repositories. Instead, contributors are asked to create a patch file and
  attach it to an entry in our issue tracker.
</p>
<p>
  When editing sources files, please respect our existing code style. Formatter styles for some IDEs are available below:
</p>
<ul>
  <li><a href="http://maven.apache.org/developers/maven-eclipse-codestyle.xml">Eclipse 3.2+ formatter settings</a></li>
  <li><a href="http://maven.apache.org/developers/maven-idea-codestyle.xml">IntelliJ IDEA 4.5+ formatter settings</a></li>
</ul>
<p>
  Building the sources requires <a href="http://maven.apache.org/">Apache Maven 3.0 or newer</a> and a Java Developer
  Kit for Java 6 or higher (this is needed to compile the optional annotation processing support).
</p>

<h3 id="iplog">Intellectual Property Log</h3>
<p>
  All Eclipse projects are required to maintain an
  <a href="http://wiki.eclipse.org/Development_Resources/IP_Log">IP log</a> for the employed intellectual property.
  Committers should especially pay attention to the
  <a href="http://wiki.eclipse.org/Development_Resources/IP_Log#Contributions">IP due diligence process</a>
  when handling external contributions.
</p>
<p>
  We use the <a href="http://wiki.eclipse.org/Development_Resources/Automatic_IP_Log">automatic IP log tool</a>
  to track code contributions and third-party dependencies. See <a href="<?php print $iplog;?>"><?php print $projectName;?>'s tentative IP log</a>
  for the list of currently approved dependencies. 
</p>

<h3 id="issues">Bug Tracker</h3>
<p>
  The project uses Bugzilla to manage <a href="<?php print $issueTracker;?>">bugs and feature requests</a>.
</p>

<h3 id="mail">Mailing Lists</h3>
<p>
  <a href="http://dev.eclipse.org/mailman/listinfo/sisu-dev/">developer mailing list</a>
</p>
<p>
  <a href="http://dev.eclipse.org/mailman/listinfo/sisu-users/">user mailing list</a>
</p>

<h3 id="ci">Continuous Integration</h3>
<p>
  We use <a href="<?php print $ci;?>">Hudson</a> for our continuous integration
  builds. Hudson is configured to periodically poll our Git repositories for changes and automatically starts a new
  build when required. We also have a daily <a href="https://hudson.eclipse.org/sisu/job/sisu-sonar/">Sonar job</a>
  to track <a href="https://dev.eclipse.org/sonar/dashboard/index/org.eclipse.sisu:sisu-inject">code quality</a>.
</p>
<p>
  Besides cross-platform testing, CI is also used to automatically deploy snapshot/nightly builds. Those builds are
  generally not production-ready but only enable feedback from early access users. The following Maven repository can
  be used to access these snapshot builds:
</p>
<pre>
  &lt;repository&gt;
    &lt;id&gt;sonatype-nexus-snapshots&lt;/id&gt;
    &lt;url&gt;https://oss.sonatype.org/content/repositories/snapshots&lt;/url&gt;
    &lt;releases&gt;&lt;enabled&gt;false&lt;/enabled&gt;&lt;/releases&gt;
    &lt;snapshots&gt;&lt;enabled&gt;true&lt;/enabled&gt;&lt;/snapshots&gt;
  &lt;/repository&gt;
</pre>
<p>
  Note: This repository contains snapshots of many projects, not just those produced by <?php print $projectName;?>.
</p>

<h3 id="website">Website</h3>
<p>
  Committers that wish to author the contents on the project's website will find the relevant instructions in the
  documents listed below:
</p>
<ul>
  <li><a href="http://wiki.eclipse.org/IT_Infrastructure_Doc#Website">IT Infrastructure</a></li>
  <li><a href="http://wiki.eclipse.org/Using_Phoenix">Using Phoenix</a></li>
  <li><a href="http://wiki.eclipse.org/Configuring_Eclipse_to_Edit_your_eclipse.org_Website">Configuring Eclipse to Edit your eclipse.org Website</a></li>
</ul>
</div>

<div id="rightcolumn">
<?php print $incubation;?>
</div>

<?php
$html = ob_get_clean();
# Generate the web page
$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>
