<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<body link="#355491" alink="#4262a1" vlink="#355491" style="background: #e2e2e2; margin: 0; padding: 20px;">

<div>
        <table cellpadding="0" bgcolor="#FFFFFF" border="0" cellspacing="0" style="border: 1px solid #dadada; margin-bottom: 30px; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                <tbody>
                        <tr>

                                <td>

                                        <table border="0" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" style="border: solid 2px #ccc; background: #dadada; width: 100%; -moz-border-radius: 6px; -webkit-border-radius: 6px;">
                                                <tbody>
                                                        <tr>
                                                                <td bgcolor="#000000" valign="middle" height="58px" style="border-bottom: 1px solid #ccc; padding: 20px; -moz-border-radius-topleft: 3px; -moz-border-radius-topright: 3px; -webkit-border-top-right-radius: 5px; -webkit-border-top-left-radius: 5px;">
                                                                        <h1 style="color: #333333; font: bold 22px Arial, Helvetica, sans-serif; margin: 0; display: block !important;">
                                                                        <!-- To have a header image/logo replace the name below with your img tag -->
                                                                        <!-- Email clients will render the images when the message is read so any image -->
                                                                        <!-- must be made available on a public server, so that all recipients can load the image. -->
                                                                        <a href="https://community.jboss.org/index.jspa" style="text-decoration: none; color: #E1E1E1">JBoss Community</a></h1>
                                                                </td>

                                                        </tr>
                                                        <tr>
                                                                <td bgcolor="#FFFFFF" style="font: normal 12px Arial, Helvetica, sans-serif; color:#333333; padding: 20px;  -moz-border-radius-bottomleft: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 5px; -webkit-border-bottom-left-radius: 5px;"><h3 style="margin: 10px 0 5px; font-size: 17px; font-weight: normal;">
    Integration Tooling Release Process
</h3>
<span style="margin-bottom: 10px;">
    modified by <a href="https://community.jboss.org/people/pleacu">Paul Leacu</a> in <i>JBoss Tools Development</i> - <a href="https://community.jboss.org/docs/DOC-48326">View the full document</a>
</span>
<hr style="margin: 20px 0; border: none; background-color: #dadada; height: 1px;">

<div class="jive-rendered-content"><h1>Overview</h1><p>This document details the process for building and releasing composite/aggregate update sites for the JBoss integration tooling (formerly SOA tools).</p><h2>Goals</h2><ul><li>Provide a light-weight process with minimal overhead for component owners.</li><li>Provide an ever-current update site containing the latest, stable releases of integration tooling components.</li><li>Allow component owners to independently manage their release schedules.</li><li>Allow component owners to manage their own dependency stack.</li></ul><h2>Assumptions</h2><ul><li>Components use released versions of dependencies (i.e. stable builds).</li><li>Component owners manage their own interdependencies with other integration components.</li><li>Components and dependencies adhere to Eclipse API versioning rules.</li></ul><h2>Implications</h2><ul><li>Aggregate releases will be driven by component releases.</li><li>Aggregate releases should manage themselves.</li><li>Component nightly/milestone builds should always be compatible with other components in the aggregate.</li></ul><h2>Definitions</h2><ul><li style="text-align: start;"><strong>Integration Stack (IS)</strong> - all JBoss middleware integration tooling</li><li style="text-align: start;"><strong>IS configuration</strong> - the definition of specific components and versions that make up the IS</li><li style="text-align: start;"><strong>IS build</strong> - an update site (p2 repo) aggregating specific versions of integration tooling components.</li><li style="text-align: start;"><strong>Release types:</strong><ul><li><strong>stable</strong> - an IS build aggregating stable (i.e. final) builds of all components that has been certified/tested by QA.</li><li><strong>development</strong> - an IS build aggregating stable builds of all components that has not been certified/tested by QA.</li><li><strong>integration</strong> - an IS build aggregating stable, development (e.g. beta) and/or integration builds of all components</li><li><strong>next</strong> - an internal IS build incorporating the latest integration builds of all components (i.e. the current "trunk" build).&#160; This will be used for identifying potential future incompatibilities.</li></ul></li></ul><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>Stable builds will align&#160; with a JBDS release in the same way JBT core builds do today.&#160; Development builds will reflect the current state of all stable components.&#160; Theoretically, any development build could be QA'd and promoted to stable (assuming no test failures).&#160; Integration builds allow for an "interim" stack which may be useful during a QA cycle (e.g. verifying a fix that requires updates to multiple components; a single component can be updated via the component update site).&#160; Next builds are used to identify potential incompatiblilities among components before they are integrated into a release and would occur weekly/monthly via a Hudson job (e.g. targeting JBT integration builds).</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>An IS build only needs to occur when the IS configuration changes.&#160; Because the IS stack is composed of stable components, configuration changes will only occur when individual components are released.&#160; For this reason, it is assumed the build would be invoked manually.</p><h1>Roles and Responsibilities</h1><h2>Component Owners</h2><ol><li style="text-align: start;"><strong>Component update site:</strong>&#160; Component owners must provide an update site for each release of their component that is included in an IS build.</li><li style="text-align: start;"><strong>Updating IS configuration:</strong>&#160; Component owners must update the IS build configuration when a new version of their component is released.&#160; This ensures the IS is up-to-date.</li><li style="text-align: start;"><strong>Respond to change requests:</strong>&#160; Component owners must review IS configuration change requests and respond in a timely manner.&#160; If a requested change is incompatible with the current version of your component, provide details regarding when your component will be compatible, along with a patch containing changes to the IS configuration for your compatible release.</li></ol><h2 style="text-align: start;">Release Engineers</h2><ol><li style="text-align: start;"><strong>Maintain build infrastructure:</strong>&#160; Release engineers will be responsible for maintianing the build infrastructure, primarily the Jenkins jobs.</li><li style="text-align: start;"><strong>Processing pull requests:</strong>&#160; Release engineers will be responsible processing all pull requests related to IS configuration.&#160; This is to ensure consistency in the composition of the stack (e.g. components, component versions, IS version, etc.).</li><li style="text-align: start;"><strong>Initiate IS builds:</strong>&#160; Release engineers will be responsible for initiating IS builds.</li><li style="text-align: start;"><strong>Build promotion:</strong>&#160; Release engineers will be responsible for the promotion of IS builds (e.g. from development to stable).</li></ol><h1>Release Process</h1><h2>Component Updates</h2><p>The following outlines the basic process for updating the IS configuration.&#160; Typically, this would occur when a component is released, but the same process is also used for updating shared dependencies (e.g. JBT core, third-party plugins, etc.).</p><ol><li>Create a branch in the user repository for your IS configuration changes.</li><li>Modify the Integration Stack configuration for your updates, e.g. update URL for SwitchYard from 0.5.0.Final to 0.6.0.Final; update IS version from 0.9.0 to 0.9.1 (see versioning rules)<ol><li>For changes to your component within the aggregate: <a class="jive-link-external-small" href="https://github.com/jbosstools/jbosstools-integration-stack/tree/master/aggregate-site">https://github.com/jbosstools/jbosstools-integration-stack/tree/master/aggregate-site</a><ol><li>Modify the <a class="jive-link-external-small" href="https://github.com/jbosstools/jbosstools-integration-stack/blob/master/aggregate-site/compositeArtifacts.xml">compositeArtifacts.xml</a> and <a class="jive-link-external-small" href="https://github.com/jbosstools/jbosstools-integration-stack/blob/master/aggregate-site/compositeContent.xml">compositeContent.xml</a> files to point to the new component update site.</li><li>Modify the <a class="jive-link-external-small" href="https://github.com/jbosstools/jbosstools-integration-stack/blob/master/aggregate-site/category.xml">category.xml</a> file as necessary for any feature changes (e.g. adding a feature).</li><li>Modify the project version in <a class="jive-link-external-small" href="https://github.com/jbosstools/jbosstools-integration-stack/blob/master/aggregate-site/pom.xml">pom.xml</a>.</li></ol></li><li>For changes to dependencies:&#160; <a class="jive-link-external-small" href="https://github.com/jbosstools/jbosstools-integration-stack/tree/master/target-platform">https://github.com/jbosstools/jbosstools-integration-stack/tree/master/target-platform</a><ol><li>Modify <a class="jive-link-external-small" href="https://github.com/jbosstools/jbosstools-integration-stack/blob/master/target-platform/base.target">base.target</a> or <a class="jive-link-external-small" href="https://github.com/jbosstools/jbosstools-integration-stack/blob/master/target-platform/community.target">community.target</a> </li><li>Modify project version in <a class="jive-link-external-small" href="https://github.com/jbosstools/jbosstools-integration-stack/blob/master/target-platform/pom.xml">pom.xml</a> </li><li>Ensure plugins are mirrored on jboss.org</li></ol></li></ol></li><li>Build locally to validate stack dependencies.</li><li>Create a <a class="jive-link-external-small" href="https://issues.jboss.org/browse/JBTIS">JBTIS JIRA</a> task requesting update, e.g. update SwitchYard to 0.6.0.Final<ul><li>Include link to github branch in task</li><li>Include build&#160; results (e.g. SUCCESS or specific dependency resolution errors)</li></ul></li><li>Create subtasks against each IS component for verification/approval<ul><li>For components that failed the consistency check, mark subtasks appropriately, e.g. m2e-wtp version is inconsistent</li></ul></li><li>Merge any changes required by other components from subtasks (e.g. update Savara to 2.1.0.Final)</li><li>Build IS locally to validate dependency consistency</li><li>Issue pull request against upstream IS configuration project</li><li>Process pull (by release engineer)</li><li>Invoke build job (by release engineer)</li></ol><h2>Platform Updates</h2><p><strong>Goal: </strong>release updated IS within four weeks of JBT/JBDS core release.</p><ol><li>Initiate platform update during JBT beta phase</li><li>Follow the component update process above (e.g. update JBT core from 3.3 to 4.0)</li></ol><h2>Dependency Updates</h2><p>The process for updating a shared dependency is the same as that for updating any other component, with the following additions:</p><ol><li style="text-align: start;">Make sure the dependency is mirrored on jboss.org.</li><li style="text-align: start;">Make sure the dependency is not already included through JBT core.</li></ol><p style="text-align: start;">If a dependency is included through JBT core, you will need to coordinate with the core team on the upgrade, as the change may impact components outside the IS.</p><h2>Versioning Rules - major.minor.update.build</h2><p><strong>Major</strong> should be updated for:</p><ul><li>Base platform changes, e.g. Eclipse Indigo-&gt;Juno, JBT 3.3-&gt;4.0</li><li>Major component updates, e.g. SwitchYard 1.0-&gt;2.0</li></ul><p><strong>Minor</strong> should be updated for minor component updates, e.g. SwitchYard 0.5-&gt;0.6</p><p><strong>Update</strong> should be updated for minor component updates, e.g. SwitchYard 0.5.0-&gt;0.5.1</p><p><strong>Build</strong> should be updated for each build, e.g. when building against nightly/integration/development repositories</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p>** Note, the basic assumption here is that components are adhering to basic API rules (per Eclipse; e.g. minor includes bug fixes and api additions, major may include breaking api changes).</p><h1>Update Site Locations</h1><ul><li style="text-align: start;"><strong>Integration builds: <a class="jive-link-external-small" href="http://download.jboss.org/jbosstools/updates/integration/juno/integration-stack/aggregate">http://download.jboss.org/jbosstools/updates/integration/juno/integration-stack/aggregate</a></strong></li><li style="text-align: start;"><strong>Development builds: <a class="jive-link-external-small" href="http://http://download.jboss.org/jbosstools/updates/development/juno/integration-stack/aggregate" rel="nofollow">http://http://download.jboss.org/jbosstools/updates/development/juno/integration-stack/aggregate</a></strong></li><li style="text-align: start;"><strong>Stable builds: <a class="jive-link-external-small" href="http://http://download.jboss.org/jbosstools/updates/stable/juno/integration-stack/aggregate" rel="nofollow">http://http://download.jboss.org/jbosstools/updates/stable/juno/integration-stack/aggregate</a></strong></li></ul><h1>Infrastructure</h1><ul><li><strong>JIRA - </strong><a class="jive-link-external-small" href="https://issues.jboss.org/browse/JBTIS">https://issues.jboss.org/browse/JBTIS</a></li><li><strong>Source - </strong><a class="jive-link-external-small" href="https://github.com/jbosstools/jbosstools-integration-stack">https://github.com/jbosstools/jbosstools-integration-stack</a><ul><li><strong>target-platform</strong> - provides a target platform defining all upstream dependencies for use by IS components (e.g. JBT core, third-party plugins)</li><li><strong>aggregate-site</strong> - provides category and feature definitions for the IS update site</li></ul></li><li><strong>Jenkins</strong> - </li></ul><h2>Target Platforms</h2><p>The provided target platforms define all upstream dependencies available to an IS component.&#160; Two target platforms are provided: base and community.&#160; The base target platform includes all dependencies which are also included as part of JBDS.&#160; The community target extends the base target by including dependencies which are only available in&#160; community JBT releases.&#160; If your component needs to be included in a JBDS release, DO NOT use the community target platform.</p><h1>Future Plans</h1><ol><li style="text-align: start;">Add support for executing component unit tests as part of the aggregate build.&#160; The goal being to help ensure the stability of the aggregate.</li><li style="text-align: start;">Add a "next" build that will build against upcoming core platforms (e.g. Kepler, JBT 5).&#160; This should serve as an early warning system to identify platform incompatibilities early in the process.</li><li><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p><p style="min-height: 8pt; height: 8pt; padding: 0px;">&#160;</p></li></ol></div>

<div style="background-color: #f4f4f4; padding: 10px; margin-top: 20px;">
    <p style="margin: 0;">Comment by <a href="https://community.jboss.org/docs/DOC-48326">going to Community</a></p>

        <p style="margin: 0;">Create a new document in JBoss Tools Development at <a href="https://community.jboss.org/choose-container!input.jspa?contentType=102&containerType=14&container=2129">Community</a></p>
</div></td>
                        </tr>
                    </tbody>
                </table>


                </td>
            </tr>
        </tbody>
    </table>

</div>

</body>
</html>