blob: 9c05295c31316bdd6e498ac61f8df9715b1de8b3 [file] [log] [blame]
<md-content layout="column" layout-align="center stretch" class="content">
<h2>Can't wait to contribute?</h2>
<h3>Useful links</h3>
<p>
For those who are familiar with the Eclipse development process, you can find here a set of useful links to contribute to EEF. For newcomers, don't forget to read the instructions below.
</p>
<ul>
<li><a href="http://git.eclipse.org/c/eef/org.eclipse.eef.git">Code</a></li>
<li><a href="https://git.eclipse.org/r/#/q/status:open+project:eef/org.eclipse.eef">Gerrit</a></li>
<li><a href="https://bugs.eclipse.org/bugs">Bugzilla</a></li>
<li><a href="https://hudson.eclipse.org/eef">Hudson</a></li>
<li><a href="#/contribute/checklist">Checklist</a></li>
<li><a href="https://wiki.eclipse.org/EEF">Wiki</a></li>
</ul>
<h3>Get started</h3>
<p>
Due to the fact that Eclipse Sirius has the most advanced integration of Eclipse EEF, most of the guidelines detailed here to contribute to Eclipse EEF are similar to those for Eclipse Sirius. In order to get started, you will need to install Java 7. You can use Java 8 if you want but you need at least Java 7 to get started. If you plan on using Eclipse Neon (or more recent) to contribute to EEF, Java 8 will be required.
</p>
<h3>Configure your development environment</h3>
<p>
You can then download Eclipse Luna SR2 (4.4.2) directly from the <a href="http://download.eclipse.org/eclipse/downloads/">download page of the Eclipse Platform</a>. In this freshly download version of Eclipse, you can install the following plugins:
</p>
<ul>
<li>
<a href="https://www.eclipse.org/mpc/">Marketplace Client</a>, available from the Luna update site. It will be used in order to download additional tools like EclEmma.
</li>
<li>
<a href="http://eclipse-cs.sourceforge.net/">Checkstyle</a>, available from the <a href="http://eclipse-cs.sf.net/update/">Eclipse CS update site</a>. It is used to enforce a set of specific rules to follow in the project.
</li>
<li>
<a href="http://eclemma.org">EclEmma</a>, available from the Eclipse Marketplace Client. It will be used in order to see the code coverage of the unit tests.
</li>
<li>
<a href="https://www.eclipse.org/egit">EGit</a>, available from the Eclipse Marketplace Client. It provides a great integration of Git inside of Eclipse.
</li>
<li>
<a href="https://github.com/mbarbero/fr.obeo.releng.targetplatform">Target Platform Definition DSL and Generator 2.0</a>, available from <a href="http://mbarbero.github.io/fr.obeo.releng.targetplatform/p2/latest/">its dedicated update site</a>. This tool is used to generate the target platform of the project. The target platform is the set of all the dependencies against which we want to compile the projet. The EEF development team uses multiple target platforms in order to ensure that the code compiles against all of our targets.
</li>
</ul>
<p>
The following development tools are strongly recommended in order to contribute efficiently to Eclipse EEF:
</p>
<ul>
<li><a href="https://git-scm.com">Git</a>, the source code management tool used by the development team.</li>
<li><a href="https://maven.apache.org">Maven</a>, the software management tool used to build the project.</li>
</ul>
<p>
You are of course free to use any additional tools you want to make your development experience more pleasant for you. However, do not commit anything which adds new requirements without getting approval from the development team.
</p>
<h3>Retrieve the source code</h3>
<p>
Once you have installed all those tools, you can retrieve the source code of the project. Just like any project of the Eclipse Foundation, the source code of Eclipse EEF is visible on its dedicated <a href="http://git.eclipse.org/c/eef/org.eclipse.eef.git">dashboard</a>. At the bottom of this page, you can find several URLs in order to clone the Git repository containing the source code of the project.
</p>
<p>
Clone the source code in a dedicated folder (not in the workspace of any of your Eclipse), then add the local Git repository to EGit (Git Repositories view). In the Git repository of EEF, there are two kinds of projects, those using the namespace "org.eclipse.emf.eef" and those using the namespace "org.eclipse.eef". All the projects using the namespace "org.eclipse.eef" are the projects used for the new version of the EEF runtime and unless you want to work on the legacy version of EEF, those are the online project that you will need to import and manipulate. To import the projects in your workspace, expand the EEF repository in the "Git Repositories" and right-click on "Working Directory". The EEF source code should now be visible in your workspace but it should fail to compile.
</p>
<h3>Set the target platform</h3>
<p>
Open the project named "org.eclipse.eef.releng" (not to be confused with org.eclipse.emf.eef.releng) and open one of the ".target" file. They are named after the version of Eclipse against which they will make your code compile. Once opened and resolved, set the target platform as the current target platform of your Eclipse. The source code should now compile in your workspace.
</p>
<h3>Try to build the project</h3>
<p>
Open a terminal in the root folder of the EEF repository that you have previsouly cloned. Now use maven with the following command line in order to build the project:
</p>
<ul>
<li>mvn clean verify -f releng/org.eclipse.eef.releng/pom.xml</li>
</ul>
<p>
The build should compile all the projects, run the unit tests and it should produce an update site that you can publish to install a new version of EEF.
</p>
<h3>Workflow for your first contribution</h3>
<p>
Now you can edit the source code of EEF and build it localy, it's time for you to start you first contribution. First start by introducing yourself on the mailing list of the project in order to have a first contact with the existing contributors and specify the kind of contribution that you would like to realize. If you don't know what you want to work on, just ask for something to do.
</p>
<p>
Once you know what you want to work on, find its issue in the Eclipse Bugzilla or create a new issue in the Eclipse Bugzilla. You can now start to work on your contribution to the source code of EEF. Do not forget to reference the identifier of the Bugzilla issue. In order to accept your contribution, you need to sign an <a href="https://eclipse.org/legal/CLA.php">Eclipse Contributor Agreement (CLA)</a> and you need to sign your commit with your username and email. Once you are done, you can submit a review to the development team thanks to our Gerrit server. You can always look for the reviews available for EEF on <a href="https://git.eclipse.org/r/#/q/status:open+project:eef/org.eclipse.eef">the Gerrit server</a>.
</p>
<h3>Checklist</h3>
<p>
Before a release of a new version of Eclipse EEF, we need to ensure that a set of procedures has been properly realized. As a result, a <a href="#/contribute/checklist">checklist</a> is available in order to help during the release.
</p>
<h3>Prepare a release</h3>
<p>In order to schedule a release, some steps have to be completed for the Eclipse Foundation:</p>
<ul>
<li>Create or update the release record for the release using the <a href="https://projects.eclipse.org/projects/modeling.emft.eef/governance">Eclipse PMI</a></li>
<li>Use the committer tools <a href="https://projects.eclipse.org/projects/modeling.emft.eef/generate-iplog">to send the IP Log to EMO</a></li>
<li>Once the IP Log has been validated by the EMO, attach it to the release record</li>
<li>Ask the Eclipse Modeling PMC for the approval of the release review</li>
<li>Schedule the release using the Eclipse PMI</li>
</ul>
<h3>Contribute the code</h3>
<p>
In order to deliver the code to our end users, you will need to publish an update site with our plugins and features. First, you will need to build a nightly build containing all the changes that you want to release. This nightly build will be available on build.eclipse.org in the "updates/nightly" folder of the EEF project:
</p>
<ul>
<li>Nightly - /home/data/httpd/download.eclipse.org/modeling/emft/eef/updates/nightly</li>
<li>Milestones - /home/data/httpd/download.eclipse.org/modeling/emft/eef/updates/milestones/</li>
<li>Releases - /home/data/httpd/download.eclipse.org/modeling/emft/eef/updates/releases</li>
</ul>
<p>
Once this nightly build has been tested and approved, you can promote it in order to be retrieved by the end users. For that, you can promote the nightly build to a milestone build by copying the update site of the nightly build as a stable build. The stable build in the milestones repository must be located under the major version number of the milestone.
</p>
<ul>
<li>Nightly Build - /home/data/httpd/download.eclipse.org/modeling/emft/eef/updates/nightly/1.7.0-N20160624-102030/neon/</li>
<li>Stable Build - /home/data/httpd/download.eclipse.org/modeling/emft/eef/updates/milestones/1.7/S20160624102030</li>
</ul>
<p>
Finally, in order to promote a build to a final release, you will have to copy the content of the milestone build in the release build. You will also need to update the composite artifacts and composite content files for the composite update site of the release.
</p>
<ul>
<li>Stable Build - /home/data/httpd/download.eclipse.org/modeling/emft/eef/updates/milestones/1.7/S20160624102030</li>
<li>Release Build - /home/data/httpd/download.eclipse.org/modeling/emft/eef/updates/releases/1.7/R20160624102030</li>
</ul>
<p>
In order to update the content of the composite update site, you can use the code below. This code will need to be run in the folder of the version of the release, for example "/home/data/httpd/download.eclipse.org/modeling/emft/eef/updates/releases/1.6/" and you will need to replace the URLs of the repository that needs to be accessible:
</p>
<pre><code>export P2_TIMESTAMP=$(date +"%s000")
cat &gt; "compositeArtifacts.xml" &lt;&lt;EOF
&lt;?xml version='1.0' encoding='UTF-8'?&gt;
&lt;?compositeArtifactRepository version='1.0.0'?&gt;
&lt;repository name='Eclipse EEF 1.6' type='org.eclipse.equinox.internal.p2.artifact.repository.CompositeArtifactRepository' version='1.0.0'&gt;
&lt;properties size='1'&gt;
&lt;property name='p2.timestamp' value='$P2_TIMESTAMP'/&gt;
&lt;/properties&gt;
&lt;children size='1'&gt;
&lt;child location='http://download.eclipse.org/modeling/emft/eef/updates/releases/1.6/R20160525090447'/&gt;
&lt;/children&gt;
&lt;/repository&gt;
EOF
cat &gt; "compositeContent.xml" &lt;&lt;EOF
&lt;?xml version='1.0' encoding='UTF-8'?&gt;
&lt;?compositeMetadataRepository version='1.0.0'?&gt;
&lt;repository name='Eclipse EEF 1.6' type='org.eclipse.equinox.internal.p2.metadata.repository.CompositeMetadataRepository' version='1.0.0'&gt;
&lt;properties size='1'&gt;
&lt;property name='p2.timestamp' value='$P2_TIMESTAMP'/&gt;
&lt;/properties&gt;
&lt;children size='1'&gt;
&lt;child location='http://download.eclipse.org/modeling/emft/eef/updates/releases/1.6/R20160525090447'/&gt;
&lt;/children&gt;
&lt;/repository&gt;
EOF
</code></pre>
</md-content>