                         Apache Commons Release Plugin
                                  Version 1.7
                                 Release Notes

INTRODUCTION
============
This document contains the release notes for the 1.7 version of Apache commons-release-plugin.
The commons-release-plugin is meant to be a mechanism for automating The Apache Commons Project's
release process.

The Apache Commons Release Plugin is a collection of Java based Maven mojos for Apache Commons
Release process. These mojos are intended to be used as a collection of steps to be strung
together for the purpose of removing the manual steps required to produce an Apache Commons Release.


Changes in this version include:

CHANGES
=======
o checkstyle.version from 8.10.1 to 8.18
o VOTE.txt: Sample git clone command should checkout in a folder named after the tag
o VOTE.txt: Sort the file names being hashed
o maven.dependency.version from 3.5.3 to 3.6.0
o org.apache.maven.scm from 1.10.0 to 1.11.2
o maven-pmd-plugin from 3.9.0 to 3.11.0
o commons-build-plugin from 1.8 to 1.10
o commons.jacoco.version from 0.8.2 to 0.8.3
o velocity-engine-core from 2.0 to 2.1
o maven.dependency.version from 3.6.0 to 3.6.1
o checkstyle.version from 8.18 to 8.19
o maven-pmd-plugin from 3.11.0 to 3.12.0
o com.puppycrawl.tools:checkstyle from 8.19 to 8.20
o Update Apache Commons Collections from 4.3 to 4.4
o Update Apache Commons Compress from 1.18 to 1.19

=============================================================================

                         Apache Commons Release Plugin
                                  Version 1.6
                                 Release Notes

INTRODUCTION
============
This document contains the release notes for the 1.6 version of Apache commons-release-plugin.
The commons-release-plugin is meant to be a mechanism for automating The Apache Commons Project's
release process.

The Apache Commons Release Plugin is a collection of Java based Maven mojos for Apache Commons
Release process. These mojos are intended to be used as a collection of steps to be strung
together for the purpose of removing the manual steps required to produce an Apache Commons Release.


Changes in this version include:

NEW FEATURES
============
o COMMONSSITE-128:  Release plugin cleans up staging area before staging


CHANGES
=======
o Update Apache Commons Codec from 1.11 to 1.12.

=============================================================================

                         Apache Commons Release Plugin
                                  Version 1.5
                                 Release Notes

INTRODUCTION
============
This document contains the release notes for the 1.5 version of Apache commons-release-plugin.
The commons-release-plugin is meant to be a mechanism for automating The Apache Commons Project's
release process.

The Apache Commons Release Plugin is a collection of Java based Maven mojos for Apache Commons
Release process. These mojos are intended to be used as a collection of steps to be strung
together for the purpose of removing the manual steps required to produce an Apache Commons Release.


Changes in this version include:

NEW FEATURES
============
o COMMONSSITE-123:  introduce configuration parameter to perfom distribution checkin using Maven settings server credentials

FIXED BUGS
==========
o ReadmeHtmlVelocityDelegate, accommodate for artifactIds ending in numbers
o ReadmeHtmlVelocityDelegate, bcel's artifactId != commons-bcel, but is just bcel
o COMMONSSITE-122:  stage-distributions mojo assumes site directory has basename 'site'

CHANGES
=======
o vote-txt, use github as opposed to git-wip
o Drop sha-256 and leave sha-512 only
o commons.jacoco.version: 0.8.0 -> 0.8.2; java 11 compatibility

=============================================================================

                         Apache Commons Release Plugin
                                  Version 1.4
                                 Release Notes

FIXED BUGS
==========
o Check the result of checking out files from the SCM.

CHANGES
=======
o Better error message when files cannot be checked in to the SCM.
o COMMONSSITE-120: [release-plugin] Use SHA-256 and SHA-512, not MD5, not SHA-1.
o Update Apache Commons Compress from 1.17 to 1.18.


=============================================================================

                         Apache Commons Release Plugin
                                  Version 1.3
                                 Release Notes

NEW FEATURES
============
o COMMONSSITE-112:  Add a vote.txt file.
o COMMONSSITE-108:  Adding README.html and HEADER.html to staged release


CHANGES
=======
o COMMONSSITE-117: Remove md5 signatures from release artifacts.
o COMMONSSITE-113: Put unpacked site in scm dev dist directory for navigating purposes.
o Update platform requirement from Java 7 to Java 8.


=============================================================================

                         Apache Commons Release Plugin
                                  Version 1.2
                                 Release Notes

FIXED BUGS
==========

o COMMONSSITE-107: Adding ./target/commons-release-plugin/scm/RELEASE-NOTES.txt
                   to svn as opposed to ./RELEASE-NOTES.txt


=============================================================================

                         Apache Commons Release Plugin
                                  Version 1.1
                                 Release Notes

NEW FEATURES
============

o COMMONSSITE-98:  Making the project more multi-module compatible

FIXED BUGS
==========

o COMMONSSITE-104: Sha1 signature files now reflect actual signatures.
o COMMONSSITE-102: Commons Release Plugin doesn't work with Commons Release Plugin
o COMMONSSITE-101: Make -Dcommons.release.dryRun=true our commit toggle



=============================================================================

                         Apache Commons Release Plugin
                                  Version 1.0
                                 Release Notes

NEW FEATURES
============

o COMMONSSITE-96:   Create commons-release-component project skeleton.
o COMMONSSITE-99:   Prepare Standard Build integrations, travis, jacoco, checkstyle, etc.
o COMMONSSITE-97:   Documentation for commons-release-plugin.


Historical list of changes: https://commons.apache.org/release-plugin/changes-report.html

For complete information on the Apache commons-release-plugin, including instructions on how
to submit bug reports, patches, or suggestions for improvement, see the Apache commons-release-plugin's
website:

https://commons.apache.org/release-plugin/

Have fun!
-Apache Commons Release Plugin team

