<?xml version="1.0"?>
<!--
   Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License.
-->

<!-- Description: http://maven.apache.org/plugins/maven-changes-plugin/changes.html -->

<document>
  <properties>
    <title>Apache Commons Build Plugin Changes</title>
    <author email="dev@commons.apache.org">Apache Commons Developers</author>
  </properties>

  <body>
    <release version="1.9" date="2018-06-16" description="Feature release">
      <action dev="ggregory" type="fix">
        Fix in src/main/resources/commons-xdoc-templates/readme-md-template.md for components that have a major version number in their artifact IDs.
      </action>
      <action dev="ggregory" type="add" issue="COMMONSSITE-109">
        Add a goal for creating all items for pre-release.
      </action>
      <action dev="ggregory" type="add" issue="COMMONSSITE-116">
        Add a goal for creating the NOTICE.txt file.
      </action>
      <action dev="ggregory" type="add">
        Fix README.md generation typo: 'JavaDoc' -> 'Javadoc'.
      </action>
      <action dev="ggregory" type="update">
        Change the Maven goal prefix from "commons" to "commons-build".
      </action>
      <action dev="ggregory" type="update">
        Update platform requirement from Java 7 to Java 8.
      </action>
    </release>
    <release version="1.8" date="2018-04-02" description="Feature release">
      <action dev="sebb" type="update">
        Use sha1 signatures as opposed to md5 signatures in download page.
      </action>
      <action dev="britter" type="add" issue="COMMONSSITE-94">
        Include Javadoc badge in README.md file.
      </action>
      <action dev="sebb" type="fix">
        Add eol-style:native otherwise generated files can cause commit errors
      </action>
    </release>
    <release version="1.7" date="2016-11-18" description="Feature release">
      <action dev="ggregory" type="add" issue="COMMONSSITE-90">
        Include badges in the README.md file. 
      </action>
      <action dev="ggregory" type="add" issue="COMMONSSITE-91">
        Build plugin does not pass the JIRA_ID property when generating README.md.
      </action>
    </release>

    <release version="1.6" date="2016-04-24" description="Feature release">
      <action dev="sebb" type="add">
        Added new download-page subdir property: set this (e.g. to '1.2' or 'lang-1.2' etc) to override the default of binaries/source 
      </action>
    </release>

    <release version="1.5" date="2015-11-28" description="Feature and fix release">
      <action dev="ecki" type="update" issue="COMMONSSITE-81">
        commons-build-plugin README/CONTRIBUTING.md handle multi-modules
      </action>
      <action dev="ecki" type="update">
        Download Page - Better describes KEYS file (and uses https links).
      </action>
      <action dev="britter" type="add">
        CONTRIBUTING.md/README.md - New Goals to build Markdown formatted intro files for GitHub.
      </action>
    </release>

    <release version="1.4" date="3 March 2012" description="Feature and fix release.">
      <action dev="ggregory" type="fix" issue="COMMONSSITE-66">
        Add support for a "commons.release.3" set of properties to offer a 3rd download option.
      </action>
      <action type="update">
        Mailing List Page - Make it clear that you have to be subscribed to post.
      </action>
      <action type="fix">
        Fix announce mod_mbox link
      </action>
    </release>
  </body>
</document>
