
Apache Commons Release Plugin Version 1.8.2 Release Notes
---------------------------------------------------------

This document contains the release notes for the 1.8.2 version of Apache Commons Release Plugin: 
An Apache Maven Mojo for Apache Commons Release tasks.

Apache Maven Mojo for Apache Commons Release tasks.

Version 1.8.2.

Changes
-------

*                   Bump org.apache.maven:maven-* from 3.9.1 to 3.9.5. Thanks to Gary Gregory.
*                   Bump org.apache.maven.scm:maven-scm-* from 2.0.0 to 2.0.1. Thanks to Gary Gregory.
*                   Bump org.apache.maven.plugin-tools:maven-plugin-tools-ant from 3.9.0 to 3.10.1. Thanks to Gary Gregory.
*                   Bump org.apache.commons:commons-parent 58 to 69 #257. Thanks to Gary Gregory.
*                   Bump org.apache.commons:commons-compress 1.23.0 to 1.26.1. Thanks to Gary Gregory.
*                   Bump commons-io:commons-io from 2.13.0 to 2.16.1 #253, #260. Thanks to Gary Gregory.
*                   Bump maven.plugin.version from 3.10.1 to 3.12.0 #258. Thanks to Dependabot.
*                   Bump org.apache.maven.plugins:maven-pmd-plugin from 3.20.0 to 3.21.2 #220. Thanks to Dependabot.
*                   Bump maven.dependency.version from 3.9.5 to 3.9.6 #218. Thanks to Dependabot.
*                   Bump org.apache.commons:commons-build-plugin from 1.12 to 1.13 #219. Thanks to Dependabot.
*                   Bump org.codehaus.plexus:plexus-velocity from 2.0 to 2.1.0 #225. Thanks to Dependabot.
*                   Bump commons-codec:commons-codec from 1.16.0 to 1.16.1 #237. Thanks to Dependabot.


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

For complete information on Apache Commons Release Plugin, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Commons Release Plugin website:

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

Download page: https://commons.apache.org/proper/commons-release-plugin//download_release-plugin.cgi

Have fun!
-Apache Commons Team

-----------------------------------------------------------------------------

Apache Commons Release Plugin Version 1.8.1 Release Notes
---------------------------------------------------------

This document contains the release notes for the 1.8.1 version of Apache Commons Release Plugin: 
An Apache Maven Mojo for Apache Commons Release tasks.

Apache Maven Mojo for Apache Commons Release tasks.

Version 1.8.1

Fixed Bugs
----------

o                   Fix the signature validation script
o                   Fix minor typos #131. Thanks to Marc Wrobel.
o                   [StepSecurity] ci: Harden GitHub Actions #187. Thanks to step-security-bot, Gary Gregory.

Changes
-------

o                   Bump actions/cache. Thanks to Gary Gregory.
o                   Bump actions/checkout. Thanks to Gary Gregory, Dependabot.
o                   Bump actions/setup-java. Thanks to Dependabot.
o                   Bump github/codeql-action. Thanks to Dependabot.
o                   Bump commons-parent from 52 to 58 #111, #137, #153, #162. Thanks to Dependabot, Gary Gregory.
o                   Bump jacoco-maven-plugin from 0.8.7 to 0.8.8 #112. Thanks to Dependabot.
o                   Bump plexus-velocity from 1.3 to 2.0 #116. Thanks to Dependabot.
o                   Bump maven-scm.version from 1.12.2 to 2.0.0 #117, #180. Thanks to Dependabot.
o                   Bump maven.dependency.version from 3.8.5 to 3.9.1 #120, #161, #172, #179. Thanks to Dependabot.
o                   Bump maven-pmd-plugin from 3.16.0 to 3.19.0 #119, #129, #135. Thanks to Dependabot.
o                   Bump junit-vintage-engine from 5.8.2 to 5.9.1 #125, #136. Thanks to Dependabot.
o                   Bump spotbugs-maven-plugin from 4.5.3.0 to 4.7.3.0 #106, #115, #122, #124, #133, #142, #150. Thanks to Dependabot.
o                   Bump spotbugs from 4.6.0 to 4.7.3 #114, #134, #145. Thanks to Gary Gregory, Dependabot.
o                   Bump maven-checkstyle-plugin from 3.1.2 to 3.2.1 #130, #166. Thanks to Dependabot.
o                   Bump commons-compress from 1.21 to 1.23.0 #148, #181. Thanks to Dependabot.
o                   Bump maven.plugin.version from 3.6.4 to 3.8.2 #149, #168, #174, #185. Thanks to Dependabot.
o                   Bump commons-io from 2.11.0 to 2.13.0. Thanks to Gary Gregory.
o                   Bump commons-codec:commons-codec from 1.15 to 1.16.0. Thanks to Gary Gregory.


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

For complete information on Apache Commons Release Plugin, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Commons Release Plugin website:

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

Download page: https://commons.apache.org/proper/commons-release-plugin/download_release-plugin.cgi

Have fun!
-Apache Commons Team

-----------------------------------------------------------------------------

Apache Commons Release Plugin Version 1.8.0 Release Notes
---------------------------------------------------------

This document contains the release notes for the 1.8.0 version of Apache Commons Release Plugin: 
An Apache Maven Mojo for Apache Commons Release tasks.

Changes in this version include:

New features
------------

o COMMONSSITE-138:  Create signature validation script for releases.

Fixed Bugs
----------

o                   Fail if commons.nexus.repo.id is not defined.
o                   Allow for old-style group ids in vote-txt.
o                   Don't create hash for .asc files.
o                   Replace construction of FileInputStream and FileOutputStream objects with Files NIO APIs. #44. Thanks to Arturo Bernal, Bruno P. Kinoshita.
o                   Replace FindBugs with SpotBugs.
o                   Minor Improvements #34. Thanks to Arturo Bernal.
o                   Workaround UnsupportedOperationException in CommonsDistributionDetachmentMojo.execute due to https://issues.apache.org/jira/browse/MNG-7316. Thanks to Gary Gregory.

Changes
-------

o                   Bump maven-checkstyle-plugin from 3.1.1 to 3.1.2 #36.
o                   Bump maven-pmd-plugin from 3.13.0 to 3.15.0 #29 #72.
o                   Bump commons-build-plugin from 1.11 to 1.12 #25.
o                   Bump actions/setup-java from v1.4.0 to v2 #11 #19 #49.
o                   Bump spotbugs from 4.1.1 to 4.6.0 #10 #24 #30 #37 #41 #51 #59 #68 #71 #80 #93 #98. Thanks to Gary Gregory.
o                   Bump spotbugs-maven-plugin from 4.1.1 to 4.5.3.0 #20 #26 #33 #45 #52 #61 #74 #79 #81 #88 #94 #99.
o                   Update JUnit from 4.12 to 4.13.2, #23 #39.
o                   Bump maven.dependency.version from 3.6.1 to 3.8.4 #47 #76 #86. Thanks to Gary Gregory, Dependabot.
o                   Update commons-io:commons-io from 2.6 to 2.11.0 #13 #63.
o                   Update checkstyle from 8.34 to 9.3 #5, #12, #14, #27, #31, #35, #40, #46, #53, #58, #64, #65, #69, #77, #84, #91, #95, #101.
o                   Update actions/checkout from v2.3.1 to v3 #8, #16, #28, #78, #83, #103.
o                   Update velocity-engine-core from 2.1 to 2.3 #4 #43.
o                   Update commons-codec from 1.13 to 1.15.
o                   Bump actions/cache from v2 to v2.1.7 #38, #50, #56, #87. Thanks to Dependabot.
o                   Bump maven.plugin.version from 3.6.0 to 3.6.4 #54, #89, #97. Thanks to Dependabot.
o                   Bump jacoco-maven-plugin from 0.8.5 to 0.8.7 (Fixes Java 15 builds) #55. Thanks to Gary Gregory, Dependabot.
o                   Bump plexus-velocity from 1.2 to 1.3 #60. Thanks to Dependabot.
o                   Bump commons-compress from 1.19 to 1.21 #62. Thanks to Gary Gregory, Dependabot.
o                   Replace JUnit from 4.13.2 to 5.7.2 vintage. Thanks to Gary Gregory.
o                   Bump maven-scm.version from 1.11.2 to 1.12.2 #66, #73, #96. Thanks to Dependabot.
o                   Bump junit-vintage-engine from 5.7.2 to 5.8.2 #70, #75, #90. Thanks to Dependabot.
o                   Bump taglist-maven-plugin from 2.4 to 3.0.0 #100. Thanks to Dependabot.


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

For complete information on Apache Commons Release Plugin, including instructions on how to submit bug reports,
patches, or suggestions for improvement, see the Apache Commons Release Plugin website:

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

Download page: https://commons.apache.org/proper/commons-release-plugin/download_release-plugin.cgi

Have fun!
-Apache Commons Team

-----------------------------------------------------------------------------

Apache Commons Release Plugin Version 1.7 Release Notes
-------------------------------------------------------

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
-------

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
-------------------------------------------------------

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.

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

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.


New Features
------------

o COMMONSSITE-123:  introduce configuration parameter to perform 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

-----------------------------------------------------------------------------
