                         Apache Commons Release Plugin
                                  Version 1.4
                                 Release Notes

INTRODUCTION
============
This document contains the release notes for the 1.4 version of Apache commons-release-plgin.
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:

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: http://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:

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

Have fun!
-Apache Commons Release Plugin team

