Hello Igniters,

We have a lot of Ignite extensions waiting to be released (e.g. aws,
gce, topology-validator, ignite-spring-tx-ext etc.). I think it is a
good point in time to make some kind of automation and simplify our
release process for Ignite extension modules removing manual steps
from it.


During the investigation I've found some issues that we have:

1. Ignite extensions have their own parent pom file [2]. The code and
dependency versions are fully duplicated with the Ignite parent pom
[1], however, these properties must be shared for Ignite Extension
project. Take a look at the <jetty.version>:
- master Apache Ignite: 9.4.39.v20210325
- master Apache Ignite Extensions: 9.4.11.v20180605

2. The checkstyle configuration between these two repositories are
different [3] [4]. Each of Apache Ignite and Apache Ignite Extensions
projects have their own checkstyle config file, however, it must be
shared the same as the maven checkstyle profile.

3. The Extensions have a dependency on the latest Apache Ignite
version in the master branch (e.g. 2.13-SNAPSHOT), but without
deploying it in the local repository the Extension projects can be
built. It seems the latest version should be published to the maven
snapshots repository [5].

4. log4j-test.xml, tests.properties these files from the ignite-core
module required to run tests and it seems they should be shared
between projects also as tests resources.

5. The apache-release profile [7] from the apache parent which will
prepare the sources, checksums, gpg sign is not used in the release
process at all.


Here are my suggestions to fix all the issues mentioned above:

1. Create the `ignite-parent` module that will be released each time
with the latest release version. This module will be based on the
parent/pom.xml [1]. This will allow us to share all common
configurations, profiles, dependency versions and properties to the
Ignite Extensions.

2. Create the `ignite-plugin-bom` bill of materials [8] module with
the common Ignite dependencies required for developing a new
extension. This is a common practice for companies that have their own
parent pom file and can't inherit from Ignite's one (e.g.
spring-boot-bom example [9] with all spring dependencies).

3. Create the additional `ignite-resources` jar file to share
checkstyle configuration, resources, tests resources and etc. for the
Extension project.

4. Configure Travis [10] to deploy a new snapshot version to the
apache maven snapshots repository [5] each time the Ignite master
branch is updated.

5. Clean up the pom.xml Extensions file from profiles and dependencies
that are not required to release extensions e.g. the release profile
[11].

6. Reuse the `apache-release` profile for preparing sources of the
extensions during the release.


WDYT?


[1] https://github.com/apache/ignite/blob/master/parent/pom.xml#L35
[2] https://github.com/apache/ignite-extensions/blob/master/parent/pom.xml#L36
[3] 
https://github.com/apache/ignite-extensions/blob/master/checkstyle/checkstyle.xml
[4] https://github.com/apache/ignite/blob/master/checkstyle/checkstyle.xml
[5] https://repository.apache.org/content/repositories/snapshots
[6] 
https://github.com/apache/ignite-extensions/tree/master/modules/aws-ext/modules/core/src/test/config
[7] https://github.com/apache/maven-apache-parent/blob/apache-24/pom.xml#L375
[8] 
https://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#bill-of-materials-bom-poms
[9] https://github.com/snowdrop/spring-boot-bom/blob/sb-2.5.x/pom.xml#L31
[10] https://blog.travis-ci.com/2017-03-30-deploy-maven-travis-ci-packagecloud/
[11] https://github.com/apache/ignite-extensions/blob/master/pom.xml#L242

Reply via email to