= July 2017 Board report

* Apache Aries delivers a set of pluggable Java components enabling an enterprise OSGi application programming model.

== Issues:

* None to report this quarter.

== Activity:

* As a community we made 9 releases this quarter.
* We have added a new project: Aries Containers for manage container deployments from a Java API.

== Health report:

* The dev@ list traffic is back to the level from 2 quarters after a spike last quarter.
* The dev@ mailing list seems to be the channel most people communicate over.

== PMC changes:

* Currently 38 PMC members.
* Dominik Przybysz was added to the PMC on Tue May 30 2017

== Committer base changes:

* Currently 55 committers.
* New commmitters:
 ** Raymond Augé was added as a committer on Mon Apr 24 2017
 ** Tom De Wolf was added as a committer on Wed May 03 2017

== Releases:

* aries-rsa 1.11.0 was released on Fri Jul 07 2017
* blueprint-core 1.8.1 was released on Fri May 12 2017
* blueprint-core 1.8.2 was released on Thu Jul 06 2017
* blueprint-maven-plugin 1.7.0 was released on Fri May 19 2017
* blueprint-maven-plugin-spring-handlers 1.0.0 was released on Fri May 19 2017
* blueprint-spring 0.4.0 was released on Thu Jul 06 2017
* proxy-impl 1.1.1 was released on Fri May 12 2017
* transaction-manager 1.3.3 was released on Fri May 12 2017
* tx-control 0.0.3 was released on Mon Jun 26 2017

== Mailing list activity:

* dev@aries.apache.org:
 ** 137 subscribers (up 0 in the last 3 months):
 ** 324 emails sent to list (586 in previous quarter)
* user@aries.apache.org:
 ** 241 subscribers (up 4 in the last 3 months):
 ** 34 emails sent to list (38 in previous quarter)

== JIRA activity:

* 15 JIRA tickets created in the last 3 months
* 22 JIRA tickets closed/resolved in the last 3 months
