Skip to main content
Jump to: navigation, search

CDO/Release Engineering



The CDO project produces consumable builds for two separate streams. The integration stream build relates to the HEAD development and the maintenance stream build relates to the CVS branch (currently R2_0_maintenance) that always gets forked from HEAD after the yearly GA release. The builds are defined in terms of a Buckminster releng component and are executed by two Hudson CI build jobs.

This article is not meant to be a complete description of the various used concepts from Buckminster and Hudson. It's rather supposed to be an ongoing work to record the experiences with these builds and the actions taken to address particular issues.

The Releng Component

The CDO releng component is the org.eclipse.emf.cdo.releng project in your workspace if you followed CDO Source Installation. There are versions for both streams in CVS. The HEAD version looks roughly like this:


The remainder of this section lists some typical releng tasks that lead to modification of one or several of the files in the releng component. Here is an overview of how they relate to each other:


Adding components to the build

Buckminster calculates the overall set of the needed components through the buckminster.cspec file. The feature defines the content of the produced p2 repository (build output). This top-level feature in turn includes all the other CDO and Net4j features and their included bundles. The remainder of the dependencies list specifies additional components that are to be materialized in the workspace or the target platform but that are not meant to become part of the build result (i.e. the site feature and the related p2 repository).

Hence there are two ways of adding components. Either add them directly to an existing source feature or bundle in the workspace (no need to update a releng file then) or add them to the buckminster.cspec file in the releng component.

If you add to either one make sure that the new component is found with the specifications in the build.rmap file!

       <cs:dependency name="" componentType="eclipse.feature"/>
       <cs:dependency name="org.eclipse.emf.cdo.formatchecker" componentType="osgi.bundle"/>
       <cs:dependency name="org.eclipse.emf.cdo.server.product" componentType="eclipse.feature"/>
       <cs:dependency name="org.gastro" componentType="eclipse.feature"/>
       <cs:dependency name="org.eclipse.equinox.executable" componentType="eclipse.feature"/>
       <cs:dependency name="org.eclipse.platform" componentType="eclipse.feature"/>
       <cs:dependency name="org.eclipse.platform.source" componentType="eclipse.feature"/>
       <cs:dependency name="org.eclipse.emf" componentType="eclipse.feature"/>
       <cs:dependency name="org.eclipse.emf.source" componentType="eclipse.feature"/>
       <cs:dependency name="org.eclipse.emf.teneo.hibernate" componentType="eclipse.feature"/>
       <cs:dependency name="org.eclipse.emf.teneo.hibernate.source" componentType="eclipse.feature"/>
       <cs:dependency name="org.eclipse.zest" componentType="eclipse.feature"/>
       <cs:dependency name="org.eclipse.zest.source" componentType="eclipse.feature"/>
       <cs:dependency name="com.mysql.jdbc" componentType="eclipse.feature"/>
       <cs:dependency name="org.hsqldb" componentType="eclipse.feature"/>
       <cs:dependency name="org.postgresql.jdbc3" componentType="eclipse.feature"/>
       <cs:dependency name="org.hibernate" componentType="eclipse.feature"/>

Excluding components from the build

Sometimes external components or the p2 repositories they reside in are partially corrupt. In these cases only the corrupt parts need to be excluded from the build (of course only if these parts are not directly or indirectly needed by the build). To exclude particular components from a build add an advisor node to the build.cquery file. Example:

  <cq:advisorNode namePattern="org\.eclipse\.swt\.gtk\.linux\.s390x\.source" skipComponent="true"/>

The Hudson Jobs

Buckminster Hints

  • Do not update the RMAP to select source branches! Add <cq:advisorNode> elements to the CQUERY instead: [1]
  • Only use branches located directly beneath "/branches"! "/branches/team1/bug-123" is not allowed.
  • If the branchTagPath attribute on a <cq:advisorNode> element starts with a slash "/" it denotes a tag, a branch otherwise.
  • If using branches do not forget to add "?moduleAfterTag&moduleAfterBranch" to all RMAP SVN URIs, e.g. <rm:uri format="{0}/trunk/features/{1}-feature?moduleAfterTag&moduleAfterBranch">
  • Do not use "buckminster import -T" or loglevel DEBUG will not work! Unzip the workspace template manually before the import.

Back to the top