<html>
  <head>

    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1">
  </head>
  <body bgcolor="#FFFFFF" text="#000000">
    This is a summary of the proposal "Breaking up Codebase" originally
    started here [1] and continued here [2].  The following is broken up
    such that Section I contains the original proposal, Section II
    contains a general summary and thoughts post-discussion and lastly
    Section III provides a more in-depth summary of the conversation
    thus far.<br>
    <br>
    <big>Section I: Original Proposal</big><br>
    <meta http-equiv="content-type" content="text/html;
      charset=ISO-8859-1">
    <blockquote>
      <pre style="color: rgb(0, 0, 0); font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; ">Prior to using Github for source control management, the project had one logical repository available that made 
sense for keeping the various components of Katello contained within.  As the project has grown, and as our 
community efforts increase I propose we break out code base elements from our mainline repository for the 
following reasons:

1) Reduces the overall size of the project repository.
2) Provides smaller, logical components that users and developers can work from and on.  This makes it easier 
   for the community to contribute as they can work on components that are important to them, that they are 
   more comfortable working on and are smaller (a.k.a less imposing due to size).
3) Decreases "tag-mania" on the mainline repository and lets the tags and the packages they are associated 
   with live on their own.  Provides direct connection between package and repository (e.g. katello-cli.rpm is 
   derived from katello-cli git repository)
4) Some components just have no logical reason to be contained within the same repository.  (e.g. I don't need 
   the CLI code to run and work on Katello)
5) The Github Organization concept with multiple repositories makes it easy to manage multiple applications and 
    pull requests associated with each.


Components I currently see that could be stand-alone repositories:

cli/
agent/
certs-tools/
puppet/
repos/
src/ (a.k.a Katello)</pre>
    </blockquote>
    <br>
    <big>Section II: General Summary</big><br>
    <br>
    There is an even mix of +1 and apprehensive -1's around this topic. 
    The general feel of the points against is how it affects the ability
    to build the Katello RPMs and keep proper versions in check.  The
    general feel for points for is that it would make components more
    logical, mimic the seeming successes other projects have seen with
    broken out components with regards to community, and make viewing of
    component progress easier with regards to development.<br>
    <br>
    Thoughts:<br>
    <ul>
      <li>Broken out packages would allow each to have a more cohesive
        development focused around the package, pull requests, and tags
        are specific to the repository/package contained within.  And
        would reduce the number of PRs and potentially the time to
        accept sitting in our central Katello repository and let those
        focused on certain areas focus on the areas they want to focus
        on.<br>
      </li>
      <li>Feels natural that I should be able to checkout or install the
        CLI without having to setup a Katello server myself.</li>
      <li>While Git repository currently is not large in bytes, it is
        large in layout which can be overwhelming or confusing and will
        only grow from here on out.<br>
      </li>
    </ul>
    <br>
    Questions:<br>
    <ul>
      <li>Pardon any ignorance on how building is done here, do all
        packages, rel-eng, tags and spec files get managed centrally in
        the current layout? Or does each require its own editing,
        maintenance and tagging?</li>
      <li>How would broken out components affect ability to build
        cohesive set of packages?</li>
      <li>Does working on Katello really required knowledge about
        katello-configure?  I have never worked on katello-configure but
        manage to work on Katello everyday.  The same was true with
        regards to the CLI.</li>
      <li>Does this break-up really make contribution easier?</li>
      <li>Would this break-up of the codebase feel weird if it had been
        done from the start or are we just accepting the status quo?<br>
      </li>
    </ul>
    <br>
    Other Thoughts:<br>
    <ul>
      <li>Breaking out components could allow for language-specific
        packaging install for those who prefer it. For example, allowing
        CLI to stand-alone and be installed via python-disutils or being
        able to install Katello via a gem.</li>
      <li>We should consider the idea of not only breaking out logical
        package based components but potentially other areas of code
        (e.g. api, ui, backend layer, APIs down to backend services)<br>
      </li>
    </ul>
    <br>
    <big>Section III: Summary of points for and against.</big><br>
    <br>
    Points For:<br>
    <ul>
      <li>Previously listed ones above</li>
      <li>Since we use Github, easier to offer different repository
        permissions, easier to browse and see progress of each component</li>
      <li>This is how Foreman community works and it seems it made it
        easier for people to contribute</li>
      <li>OpenStack takes similar approach to proposal and works well
        for them</li>
      <li>Layout of source tree currently, and the way each is packaged
        lends themselves to individual package per repo<br>
      </li>
    </ul>
    <br>
    Points Against:<br>
    <ul>
      <li>Git repository is currently not large</li>
      <li>Working on Katello requires knowledge of katello-configure and
        working on katello-configure requires knowledge of Katello</li>
      <li>One package per git repository means managing more /rel-eng/
        directories and keeping them in sync</li>
      <li>When we deliver Katello, we deliver all components</li>
      <li>Does breaking it up really make it easier to contribute?</li>
      <li>If we eventually build on EC2, more repositories could mean
        getting charged more for increased internet traffic</li>
      <li>Feeling that it would be harder to ensure correct version in
        all repositories<br>
      </li>
    </ul>
    <br>
    General Notes:<br>
    <ul>
      <li>Delay until current build setup is stable</li>
      <li>Break out each component one-by-one instead of "big bang"
        approach</li>
      <li>Could we go a step further and think about other re-usable
        chunks that can be broken out into gems, helpers, generators,
        engines?</li>
      <li>Adding a README to describe project layout</li>
    </ul>
    <br>
    - Eric<br>
    <br>
    <small>[1]
      <a
href="https://www.redhat.com/archives/katello-devel/2012-August/msg00071.html">https://www.redhat.com/archives/katello-devel/2012-August/msg00071.html</a><br>
      [2]</small>
    <small> <a href="https://github.com/Katello/katello/issues/450">https://github.com/Katello/katello/issues/450</a></small><br>
  </body>
</html>