On Fri, Jan 17, 2014 at 9:47 PM, Nirmal Fernando <nir...@wso2.com> wrote:

> Huge +1 for the proposed solution. One small question, when you say
> components/features are those imply dependencies (in current terms) as
> well?
>

With respect to orbit bundles, we will create them and immediately upload
them to Nexus. With respected to forked code (dependencies such as
Axis2/Synapse etc. we will need to maintain separate repos. In addition,
forking should be a final resort. Such dependencies will also be uploaded
to Nexus several times a day by Bamboo.


>
>
> On Fri, Jan 17, 2014 at 9:26 PM, Afkham Azeez <az...@wso2.com> wrote:
>
>>  [Sorry for the very long mail. I want to document all that I had in
>> mind & the stuff we discussed. I would recommend all devs to take some time
>> to read this]
>>
>>
>> I would like to summarize he discussion we had a couple of days back.
>>
>> *The Problems*
>> The problems we are trying to solve are as follows:
>>
>> 1. Trunk & branches structures being completely different
>> 2. Branches containing directories with version numbers
>> 3. It is impossible to move to GitHub with the current structure because
>> of #2
>> 4. It is very easy to break the build by changing already released code.
>> The room for human error is high.
>> 5. Bamboo builds are eternally broken because the build fails at some
>> point & Bamboo cannot continue any further
>> 6. When we branch, the trunk quickly becomes obsolete, and remains in
>> that broken state until the next major platform release.
>> 7. Everybody has to build all components/features, even if those are not
>> related to their products
>> 8. Fixed versions in branches instead of using SNAPSHOT versions. This
>> makes it impossible to upload build artifacts to Maven/Nexus repos. This
>> leads to #7.
>> 9. Impossible to integrate code quality tools such as EraInsight because
>> of #5
>>
>> *Proposed solution*
>> We have come up with the following solution after much deliberation &
>> thought.
>>
>> Rationale:
>> We started looking at other open source projects out there. We took Axis2
>> as an example. Axis2 had many dependencies including Axiom, XmlSchema,
>> Woden, WSS4J etc. Those 3rd party dependencies were also developed by some
>> Axis2 contributors, but we never branched all of those together and brought
>> them into the same code branch. We used to start what we used to call a
>> release train, where the upstream code would have to be released first
>> before the downstream code such as Axis2 & Synapse could be released. This
>> way, we never had any of the problems outlined above.
>>
>> If you look at the WSO2 product releases, again, the scenario is not that
>> much different from the Axis2/Synapse releases. Components & features are
>> simply dependencies of the products. In order to get product releases out,
>> we first need releases of those dependencies (components/features). So the
>> proposal is to identify the top level components/features, and first
>> release that code before doing product releases. Each of those components
>> will have a GitHub repo. All active development will be done on the main
>> branch of those components, and will be branched when they are close to the
>> release. Instead of granting commit rights to all, we could only allow the
>> primary developers of those components to commit, and others can send pull
>> requests, which will be merged in by the primary owners after reviewing.
>> These component teams could even have an internal Git repo or clone, and
>> commit to that, run all tests, and when they are satisfied that the code is
>> in a good state to be merged into the main branch, they can send a pull
>> request & merge the changes. We would run Bamboo which would build the
>> components several times a day & deploy them to the Nexus repo. That way,
>> you would not have to build code that is not directly related to what you
>> are working on, which would save 100s of valuable dev hours.
>>
>> In the majority of the cases, the P2 features correspond to one or more
>> related components. So we would keep the feature close to the component.
>> There are some cases where these components & features belong in the
>> product itself. AppFactory components are a good example.
>>
>> Products will also have their own GitHub repos. We will have separate
>> GitHub repos for platform integration tests. Products such as API Manager
>> may opt to have the API Management feature in the product itself. We would
>> have a separate P2-repo GitHub repo which would build & deploy the
>> compatible set of P2 features.
>>
>> We will have Bamboo plans at multiple levels; components, products,
>> platform, p2-repo and so on.
>>
>> We will not change any package structures at this time. We would defer
>> that to Carbon 5 (if necessary). We will get rid of the chunk based release
>> model. Continuous delivery is our ultimate aim & for that to happen, we
>> have to release a compatible set of features. We are going to rely heavily
>> on automation, automated builds & deploys to Maven. The developers will do
>> the majority of the QA (just like the Apache Stratos team is doing now).
>>
>> We will use the Maven release plugin to create releases & upload them to
>> the Maven repo.
>>
>> *Implications to WSO2 code developers*
>> 1. Life becomes easier because you don't have to spend a lot of time
>> building unrelated stuff
>> 2. General development would happen in the main branch.
>> 3. Close to a release, branches would be cut.
>> 4. Once release branches are cut, fixes would be done in the main branch,
>> and pull requests would be sent to the branch & merged in. This will be
>> easy because we no longer have the trunk & branch structure being different.
>>
>>
>> *Implications to users*
>> Users will not see any difference in the components & features because we
>> are not changing packages or binary structure. In fact, we would have a P2
>> repo with compatible features which all work together.
>>
>> Senaka, Isuruwan & Harshana have already started working on a PoC.
>>
>> Thoughts welcome. Those who were in these discussions, please add
>> anything I may have missed.
>>
>> --
>> *Afkham Azeez*
>> Director of Architecture; WSO2, Inc.; http://wso2.com
>> Member; Apache Software Foundation; http://www.apache.org/
>> * <http://www.apache.org/>*
>> *email: **az...@wso2.com* <az...@wso2.com>
>> * cell: +94 77 3320919 <%2B94%2077%203320919> blog: *
>> *http://blog.afkham.org* <http://blog.afkham.org>
>> *twitter: **http://twitter.com/afkham_azeez*<http://twitter.com/afkham_azeez>
>> * linked-in: **http://lk.linkedin.com/in/afkhamazeez
>> <http://lk.linkedin.com/in/afkhamazeez>*
>>
>> *Lean . Enterprise . Middleware*
>>
>> _______________________________________________
>> Architecture mailing list
>> Architecture@wso2.org
>> https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture
>>
>>
>
>
> --
>
> Thanks & regards,
> Nirmal
>
> Senior Software Engineer- Platform Technologies Team, WSO2 Inc.
> Mobile: +94715779733
> Blog: http://nirmalfdo.blogspot.com/
>
>
> _______________________________________________
> Dev mailing list
> d...@wso2.org
> http://wso2.org/cgi-bin/mailman/listinfo/dev
>
>


-- 
*Afkham Azeez*
Director of Architecture; WSO2, Inc.; http://wso2.com
Member; Apache Software Foundation; http://www.apache.org/
* <http://www.apache.org/>*
*email: **az...@wso2.com* <az...@wso2.com>
* cell: +94 77 3320919 blog: **http://blog.afkham.org*<http://blog.afkham.org>
*twitter: **http://twitter.com/afkham_azeez*<http://twitter.com/afkham_azeez>
* linked-in: **http://lk.linkedin.com/in/afkhamazeez
<http://lk.linkedin.com/in/afkhamazeez>*

*Lean . Enterprise . Middleware*
_______________________________________________
Architecture mailing list
Architecture@wso2.org
https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture

Reply via email to