On Fri, Aug 7, 2015 at 2:35 PM, Kavith Lokuhewage <[email protected]> wrote:

> Hi All,
>
> Since now we are going to support multiple goals of release plugin and
> it's anymore not only about pre-prepare, shall we rename the plugin as
> "wso2-maven-release-plugin" instead of calling it
> "wso2-release-pre-prepare-plugin"?
>

above suggested name make sense that this plugin can be used along to
release a repository, but that's not true right ,so  still maven release
plugin also needs to do a release , so renaming into
"wso2-maven-release-plugin" is misleading.

IMO Actually, this plugin is helping to complete maven-release-plugin goals
, so this is a helper plugin something similar to the maven build helper
plugin. we can rename this as a wso2-maven-release-helper plugin


>
> Also shall we assign a plugin goal prefix to this plugin? So that it is
> possible to invoke goals using the prefix instead of full plugin name
> (similar to Apache maven release plugin).
>

+1

Thanks and Regards
/Jasintha

>
>   eg: wso2-release:rollback
>
> WDYT?
>
> Thanks.
>
> On Fri, Aug 7, 2015 at 12:01 PM, Kavith Lokuhewage <[email protected]>
> wrote:
>
>> Hi all,
>>
>> WSO2 maven release prepare plugin [1]  was introduced to help Apache
>> maven release plugin to prepare releases of WSO2 specific maven projects
>> (ESB and Registry). These projects contain *artifact.xml* files which
>> consists of meta-data (including versions) of the project artifacts and
>> they need to be updated for both release version (tag) and the next
>> development version(trunk) during the release preparation. WSO2 maven
>> release prepare plugin addresses this requirement.
>>
>> *Current implementation*
>>
>> With Apache maven release plugin, it's possible to configure additional
>> maven plugins as completion goals of preparation goal[2].
>>
>> Currently, pre-prepare goal of wso2 maven release prepare plugin should
>> be executed as a completion goal of Apache maven release plugin. Current
>> implementation only supports svn. Current implementation
>> is summarized below.
>>
>>    - Check out already committed svn tag to a temporary location
>>    - Iterate though all maven projects and identify ESB and Registry
>>    projects
>>    - Read release.properties[3] file and identify release version for
>>       that particular project.
>>       - Update *artifact.xml *file with release version.
>>    - Commit the changes to tag.
>>    - Check out trunk to a temporary location.
>>    - Iterate though ESB and Registry projects.
>>    - Read release.properties[3] file and identify next development
>>       version for that particular project.
>>       - Update *artifact.xml* file with
>>    - commit the changes to trunk.
>>
>> *Current drawbacks and limitations *
>>
>>    - Only supports svn.
>>    - Implementing support for other scm providers require a lot of
>>    effort.
>>       - Even-though a common scm-api[4] was used for svn related tasks,
>>       implementation is too tied to svn way of doing things (Eg. Tagging in 
>> svn
>>       vs git).
>>    - Checking out a remote repository temporary may affect performance
>>    with large repositories and introduces an unnecessary complexity.
>>    - doesn't support rollback mode [5]
>>    - doesn't support dryRun mode [2]
>>
>> *Proposed implementation*
>>
>> Main goals are to support other scm providers (avoid any scm provider
>> specific implementations) and avoid cloning remote repositories.
>> Rollback and dryRun modes can also be supported with this design.
>>
>> As mentioned under[2], in the release:prepare goal, Apache maven release
>> plugin provides two entry points for other plugins as below.
>>
>>
>>    - preparationGoals - Goals to run as part of the preparation step,
>>    after transformation from snapshot versions to release version, but before
>>    committing.
>>    - completionGoals - Goals to run on completion of the preparation
>>    step, after transformation back to the next development version but before
>>    committing.
>>
>> These two entry points can be used to access already modified projects in
>> the two phases - release preparation and next snapshot preparation - but
>> before committing them to remote repo. New two different goals will be
>> introduced for WSO2 maven release prepare plugin as below. These two can
>> be executed as a preparation goal and a completion goal of Apache maven
>> release plugin.
>>
>>    - prepare-release : find ESB and Registry projects in local repo and
>>    update *artifact.xml* files with release version for each particular
>>    project (captured from release.properties[3] file)
>>    - prepare-snapshot : find ESB and Registry projects in local repo and
>>    update *artifact.xml* files with next dev version for each particular
>>    project (captured from release.properties[3] file)
>>
>> This way, it's possible to have *artifact.xml* files
>> also modified before Apache maven release plugin commits the changes.
>> Yet, Apache maven release plugin does not commit all the changed files
>> in the repository but only commit changed pom.xml files. As of now, there
>> is no way to include changed *artifact.xml* files in Apache maven
>> release plugin commits (there's a configuration to exclude files though).
>>
>> To address above issue, we need to commit changed *artifact.xml*  file
>> before Apache maven release plugin commits. It is possible to use
>> scm:checkin goal of maven scm plugin[6] to commit changed files to remote
>> repository. It is possible to use mojo-executor [7] to execute this within
>> mojos in WSO2 maven release prepare plugin. This way it is possible to
>> avoid any scm  related logic inside WSO2 maven release prepare plugin
>> and it will have OOB support for all scm providers which are currently
>> supported by maven scm plugin[6].
>>
>> *rollback **support*
>>
>> A new goal called rollback will also be introduced for WSO2 release
>> prepare plugin. However, Apache release plugin does not provide any
>> entry point for other plugins in release:rollback goal. Hence, this
>> rollback goal of WSO2 maven release prepare plugin will have to be
>> manually invoked in order to rollback changed *artifact.xml* files.
>>
>> Implementation of rollback goal can be done similar to prepare-release
>> and prepare-snapshot goals (using release.properties files and maven scm
>> plugin).  However, this introduces the constraint that
>> wso2-release:rollback goal should be executed before executing rollback
>> goal Apache release plugin (since release.properties file will be
>> deleted after rollback of Apache release plugin ).
>>
>> Alternatively, it is possible to introduce a backup file for each
>> modified *artifact.xml* (similar to what Apache release plugin does).
>> Then again an another issue rises - How to cleanup these backup files after
>> a successful release:prepare and a release:perform (release:perform also
>> does not provide an entry point for other plugins)?
>>
>> Please share your thoughts on this.
>>
>> Thanks,
>>
>> [1]
>> https://docs.wso2.com/display/DVS371/Using+Maven+with+Developer+Studio#UsingMavenwithDeveloperStudio-MavenReleaseplug-in
>>
>> [2]
>> http://maven.apache.org/maven-release/maven-release-plugin/prepare-mojo.html
>>
>> [3] Maven release plugin creates a file called release.properties in the
>> root of the repository after finalizing release versions and next
>> development versions for each maven project in the repository. This file
>> also consists of the tag name for the release and scm connection details.
>> This file is created during release : prepare goal of apache maven release
>> plugin and will be cleaned after executing release : perform.
>>
>> [4] http://maven.apache.org/scm/maven-scm-api/
>>
>> [5]
>> http://maven.apache.org/maven-release/maven-release-plugin/rollback-mojo.html
>>
>> [6] http://maven.apache.org/scm/
>>
>> [ 7 ] http://timmoore.github.io/mojo-executor/
>> --
>> *Kavith Lokuhewage*
>> Software Engineer
>> WSO2 Inc. - http://wso2.com
>> lean . enterprise . middleware
>> Mobile - +9477-9-145-123 | +9471-455-6-401
>> Linkedin <http://www.linkedin.com/pub/kavith-lokuhewage/49/473/419>
>> Twitter <https://twitter.com/KavithThiranga>
>>
>
>
>
> --
> *Kavith Lokuhewage*
> Software Engineer
> WSO2 Inc. - http://wso2.com
> lean . enterprise . middleware
> Mobile - +9477-9-145-123 | +9471-455-6-401
> Linkedin <http://www.linkedin.com/pub/kavith-lokuhewage/49/473/419>
> Twitter <https://twitter.com/KavithThiranga>
>



-- 

*Jasintha Dasanayake*

*Senior Software EngineerWSO2 Inc. | http://wso2.com <http://wso2.com/>lean
. enterprise . middleware*


*mobile :- 0711368118*
_______________________________________________
Architecture mailing list
[email protected]
https://mail.wso2.org/cgi-bin/mailman/listinfo/architecture

Reply via email to