{"id":6652,"date":"2014-03-06T05:55:14","date_gmt":"2014-03-06T13:55:14","guid":{"rendered":"http:\/\/localhost\/exoblog\/?p=6652"},"modified":"2023-06-05T16:50:34","modified_gmt":"2023-06-05T14:50:34","slug":"back-sources-organizing-900000-lines-code-projects","status":"publish","type":"post","link":"https:\/\/www.exoplatform.com\/blog\/back-sources-organizing-900000-lines-code-projects\/","title":{"rendered":"Back To The Sources &#8211; Organizing 900,000 Lines of Code into Projects"},"content":{"rendered":"<p>Before being the awesome platform you know&#8230;<\/p>\n<p><a href=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/03\/01-eXo-Platform-4.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-6665\" src=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/03\/01-eXo-Platform-4.jpg\" alt=\"01-eXo-Platform-4\" width=\"300\" srcset=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/03\/01-eXo-Platform-4.jpg 1396w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/03\/01-eXo-Platform-4-300x136.jpg 300w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/03\/01-eXo-Platform-4-1024x464.jpg 1024w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/03\/01-eXo-Platform-4-768x348.jpg 768w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/03\/01-eXo-Platform-4-1250x567.jpg 1250w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/03\/01-eXo-Platform-4-720x326.jpg 720w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/03\/01-eXo-Platform-4-500x227.jpg 500w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/03\/01-eXo-Platform-4-360x163.jpg 360w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/03\/01-eXo-Platform-4-200x91.jpg 200w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/03\/01-eXo-Platform-4-100x45.jpg 100w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/03\/01-eXo-Platform-4-66x30.jpg 66w\" sizes=\"(max-width: 1396px) 100vw, 1396px\" \/><\/a><\/p>\n<p>eXo platform is approximatively (excluding comments) 900 000 lines of code (Source : <a href=\"https:\/\/sonar.exoplatform.org\/\" target=\"_blank\" rel=\"noopener\" class=\"broken_link\">SonarQube<\/a>) like this:<\/p>\n<p><a href=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/03\/02-900k-lines-code.png\"><img decoding=\"async\" class=\"aligncenter size-medium wp-image-6654\" src=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/03\/02-900k-lines-code.png\" alt=\"02-900k-lines-code\" width=\"650\" srcset=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/03\/02-900k-lines-code.png 1489w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/03\/02-900k-lines-code-300x182.png 300w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/03\/02-900k-lines-code-1024x620.png 1024w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/03\/02-900k-lines-code-768x465.png 768w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/03\/02-900k-lines-code-1250x756.png 1250w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/03\/02-900k-lines-code-720x436.png 720w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/03\/02-900k-lines-code-500x303.png 500w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/03\/02-900k-lines-code-360x218.png 360w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/03\/02-900k-lines-code-200x121.png 200w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/03\/02-900k-lines-code-100x61.png 100w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/03\/02-900k-lines-code-50x30.png 50w\" sizes=\"(max-width: 1489px) 100vw, 1489px\" \/><\/a><\/p>\n<p>In this set of articles I will present how we are managing our sources and various tools that helping us.<\/p>\n<p><!--more--><\/p>\n<p>In this first part, we will see the organization and dependencies between platform components. In a second article we\u2019ll discover where to find all sources repositories. In a third part we\u2019ll cover workflows used by our teams to manage our codebase. Then in a last post we\u2019ll see the tools we are using to manage our sources (edition, code review&#8230;).<\/p>\n<h2>Projects organization<\/h2>\n<p>As shown below eXo platform isn\u2019t a unique project including all these lines of code. This is the arrangement of various subprojects for various reasons :<\/p>\n<ul>\n<li><b>Historical<\/b> (we are talking about many years ago) : The product was more fragmented and was offering various independent services (CMS, Forum, \u2026) on top of a standard platform (JCR\/Portal). Nowadays we are offering an homogenous integrated platform built on the top of these historical services.<\/li>\n<li><b>Architectural<\/b> : Under the large set of features offered by the platform there are many technical pieces with their own lifecycle, their own constraints that we have the possibility to compound for our needs. Also it enforces teams to clearly define the frontier of each component and to design backward compatible APIs exposed to others. Also it avoids to rebuild all the platform for each change (while our teams are focusing on the stability of each project and its integration with others, our continuous build\/integration\/deployment platform will describe in a future article is taking care to validate the whole platform).<\/li>\n<li><b>Organizational<\/b> : With several dozen of developers working on platform (and related projects), and nearly 900k lines of codes it could be quickly a nightmare to manage all of this in a unique code base. It avoids to have too many people working on the same lines of codes (even if it is really more easier today to manage branches in DVCS systems) and thus we have little teams (3-6 persons) working on projects with fewer lines of code.<\/li>\n<\/ul>\n<p><a href=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/03\/03-eXo-Projecs-repositories.png\"><img decoding=\"async\" class=\"aligncenter size-medium wp-image-6655\" src=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/03\/03-eXo-Projecs-repositories.png\" alt=\"03-eXo-Projecs-repositories\" width=\"433\" srcset=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/03\/03-eXo-Projecs-repositories.png 433w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/03\/03-eXo-Projecs-repositories-251x300.png 251w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/03\/03-eXo-Projecs-repositories-395x473.png 395w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/03\/03-eXo-Projecs-repositories-274x328.png 274w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/03\/03-eXo-Projecs-repositories-197x236.png 197w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/03\/03-eXo-Projecs-repositories-110x131.png 110w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/03\/03-eXo-Projecs-repositories-75x90.png 75w, https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/03\/03-eXo-Projecs-repositories-25x30.png 25w\" sizes=\"(max-width: 433px) 100vw, 433px\" \/><\/a><\/p>\n<p>We\u2019ll see in a second article that this fragmentation of the code base doesn\u2019t have only positive points and brings it\u2019s set of drawbacks especially to manage feature or maintenance branches.<\/p>\n<p><!--begin adv-events--><\/p>\n<div class=\"adv-events\" style=\"background: #476fad; padding: 30px 20px; color: white; border-radius: 3px;\">\n<div class=\"media\">\n<div class=\"pull-right\"><a href=\"#\"><br \/>\n<img decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-6587 alignright\" src=\"https:\/\/www.exoplatform.com\/blog\/wp-content\/uploads\/2014\/02\/how-to-make-the-most-of-eXo-platform41.png\" alt=\"make-the-most-out-of-eXo-platform4\" width=\"161\" height=\"85\" \/><br \/>\n<\/a><\/div>\n<div class=\"media-body\">\n<h4 class=\"media-heading\">Make the most out of eXo Platform 4<\/h4>\n<p>Register to the next webinar and get a complete overview of what you can do with eXo Platform 4. <strong><a href=\"https:\/\/www.exoplatform.com\/contact-us\/\">Reserve your seat now!<\/a><\/strong><\/p>\n<\/div>\n<\/div>\n<\/div>\n<p><!--end adv-events--><\/p>\n","protected":false},"excerpt":{"rendered":"Before being the awesome platform you know&#8230; eXo platform is approximatively (excluding comments) 900 000 lines of code (Source : SonarQube) like this: In this set of articles I will present how we are managing our sources and various tools that helping us.","protected":false},"author":7,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[699],"tags":[],"lang":"en","translations":{"en":6652},"pll_sync_post":[],"_links":{"self":[{"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/posts\/6652"}],"collection":[{"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/users\/7"}],"replies":[{"embeddable":true,"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/comments?post=6652"}],"version-history":[{"count":0,"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/posts\/6652\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/media?parent=6652"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/categories?post=6652"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.exoplatform.com\/blog\/wp-json\/wp\/v2\/tags?post=6652"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}