[katello-devel] Summary: Breaking up Codebase

Eric Helms ehelms at redhat.com
Wed Aug 15 14:11:04 UTC 2012


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.

Section I: Original Proposal

    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)


Section II: General Summary

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.

Thoughts:

  * 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.
  * Feels natural that I should be able to checkout or install the CLI
    without having to setup a Katello server myself.
  * 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.


Questions:

  * 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?
  * How would broken out components affect ability to build cohesive set
    of packages?
  * 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.
  * Does this break-up really make contribution easier?
  * 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?


Other Thoughts:

  * 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.
  * 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)


Section III: Summary of points for and against.

Points For:

  * Previously listed ones above
  * Since we use Github, easier to offer different repository
    permissions, easier to browse and see progress of each component
  * This is how Foreman community works and it seems it made it easier
    for people to contribute
  * OpenStack takes similar approach to proposal and works well for them
  * Layout of source tree currently, and the way each is packaged lends
    themselves to individual package per repo


Points Against:

  * Git repository is currently not large
  * Working on Katello requires knowledge of katello-configure and
    working on katello-configure requires knowledge of Katello
  * One package per git repository means managing more /rel-eng/
    directories and keeping them in sync
  * When we deliver Katello, we deliver all components
  * Does breaking it up really make it easier to contribute?
  * If we eventually build on EC2, more repositories could mean getting
    charged more for increased internet traffic
  * Feeling that it would be harder to ensure correct version in all
    repositories


General Notes:

  * Delay until current build setup is stable
  * Break out each component one-by-one instead of "big bang" approach
  * Could we go a step further and think about other re-usable chunks
    that can be broken out into gems, helpers, generators, engines?
  * Adding a README to describe project layout


- Eric

[1] https://www.redhat.com/archives/katello-devel/2012-August/msg00071.html
[2] https://github.com/Katello/katello/issues/450
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://listman.redhat.com/archives/katello-devel/attachments/20120815/3591cabd/attachment.htm>


More information about the katello-devel mailing list