Dear Wiki user, You have subscribed to a wiki page or wiki category on "Httpcomponents Wiki" for change notification.
The "HttpComponentsReleaseProcess" page has been changed by GaryGregory: https://wiki.apache.org/HttpComponents/HttpComponentsReleaseProcess?action=diff&rev1=19&rev2=20 Comment: Update URLs to https: from http: ##language:en #pragma section-numbers off - = HttpComponents Release Process = - == Preparations for using Nexus and uploading files == - See MavenConfiguration for details on how to set up Maven. This only has to be done once. == Release preparation == - * Make sure there are no open Jira issues targeted for this release - - * HttpCore - https://issues.apache.org/jira/browse/HTTPCORE + * HttpCore - https://issues.apache.org/jira/browse/HTTPCORE - * HttpClient - https://issues.apache.org/jira/browse/HTTPCLIENT + * HttpClient - https://issues.apache.org/jira/browse/HTTPCLIENT - * HttpAsyncClient - https://issues.apache.org/jira/browse/HTTPASYNC + * HttpAsyncClient - https://issues.apache.org/jira/browse/HTTPASYNC * Review RELEASE_NOTES.txt and make sure all important issues closed since the previous release are included in the release notes * Write an opening statement for the release highlighting the most changes, bug fixed and improvements - * Make sure you are using the minimal JDK required by the release compatibility requirements and Maven 3.0.3 + * Make sure you are using the minimal JDK required by the release compatibility requirements and Maven 3.0.3 {{{ mvn -version }}} - - * If this is a non-ALPHA release, verify binary compatibility with the previous stable baseline version. Baseline version is the latest stable xx.yy.00 release + * If this is a non-ALPHA release, verify binary compatibility with the previous stable baseline version. Baseline version is the latest stable xx.yy.00 release {{{ mvn clirr:check }}} - - Please note Clirr currently can't handle Java 5 constructs very well and it can generate bogus errors about incompatibility of {{{Enum}}}s + . Please note Clirr currently can't handle Java 5 constructs very well and it can generate bogus errors about incompatibility of {{{Enum}}}s {{{ [INFO] [clirr:check {execution: default-cli}] @@ -41, +34 @@ [ERROR] org.apache.http.impl.nio.reactor.SSLMode: Method 'public org.apache.http.impl.nio.reactor.SSLMode[] values()' is now final [ERROR] org.apache.http.nio.reactor.IOReactorStatus: Method 'public org.apache.http.nio.reactor.IOReactorStatus[] values()' is now final }}} - * Generate release javadocs - {{{ + {{{ mvn javadoc:aggregate }}} - Make sure the command completes successfully and there are no warnings. - * Generate tutorial if included in this release. Presently only HttpCore and HttpClient have tutorials. + * Generate tutorial if included in this release. Presently only HttpCore and HttpClient have tutorials. - {{{ + {{{ mvn docbkx:generate-pdf docbkx:generate-html }}} - Make sure the command completes successfully and there are no warnings. == Release tools == - * Make a dedicated local copy of HttpCompoments release tools by checking out project source from the following location https://svn.apache.org/repos/asf/httpcomponents/project-release-tools/trunk {{{ svn co https://svn.apache.org/repos/asf/httpcomponents/project-release-tools/trunk release-httpcore-4.3.1 - }}} + }}} - - Given that a release can span across several days or even weeks it is recommended to have a dedicated copy of release tools + Given that a release can span across several days or even weeks it is recommended to have a dedicated copy of release tools per ongoing release process. - per ongoing release process. - Release tools are basically a collection of Gradle scripts that simplify and facilitate time consuming, often tedious and therefore error-prone + Release tools are basically a collection of Gradle scripts that simplify and facilitate time consuming, often tedious and therefore error-prone tasks. - tasks. - * Prepare gradle.properties + * Prepare gradle.properties - Make a copy of gradle.properties.template: + Make a copy of gradle.properties.template: ~-Linux-~ + {{{ cp gradle.properties.template gradle.properties }}} ~-Windows-~ + {{{ copy gradle.properties.template gradle.properties }}} - Edit gradle.properties file and update 'MAVEN_HOME', 'HC_DEV' and 'signing.*' properties 'MAVEN_HOME' must refer to the local Maven installation. You must set 'MAVEN_HOME' even if you have a 'MAVEN_HOME' environment variable. ~-Linux-~ + {{{ MAVEN_HOME=opt/maven signing.secretKeyRingFile=$HOME/.gnupg/secring.gpg }}} ~-Windows-~ + {{{ MAVEN_HOME=C:\\Java\\apache-maven-3.0.5 signing.secretKeyRingFile=C:/Users/ggregory/AppData/Roaming/gnupg/secring.gpg @@ -104, +93 @@ 'HC_DEV' must refer to the trunk or a stable branch of the project being releases, for example {{{ - http://svn.apache.org/repos/asf/httpcomponents/httpcore/trunk/ + https://svn.apache.org/repos/asf/httpcomponents/httpcore/trunk/ - http://svn.apache.org/repos/asf/httpcomponents/httpcore/branches/4.3.x/ + https://svn.apache.org/repos/asf/httpcomponents/httpcore/branches/4.3.x/ - }}} + }}} - - 'signing.keyId' must contain id of the personal GPG key to be used for signing release artifacts. + 'signing.keyId' must contain id of the personal GPG key to be used for signing release artifacts. 'signing.secretKeyRingFile' must refer to the personal GPG ring file. - 'signing.password' may be left empty. In this case the script will be prompting for a pass phrase + 'signing.password' may be left empty. In this case the script will be prompting for a pass phrase every time access to the key is needed. - every time access to the key is needed. * Make sure that the scripts are valid by listing available tasks {{{ gradlew -q tasks }}} - == Building release artifacts == - * Check out the latest snapshot from the release branch {{{ gradlew -q checkoutSnapshot - }}} + }}} - * Prepare release tag {{{ gradlew -q prepareRelease - }}} + }}} - Manually enter release version or hit enter to select the default based on pom.xml content (current version sans -SNAPSHOT qualifier) - The task will print out the location of the release tag. Please double-check its validity. + The task will print out the location of the release tag. Please double-check its validity. {{{ Release tag to be created: https://svn.apache.org/repos/asf/httpcomponents/httpcore/tags/4.3.1 }}} - * Prepare RC tag {{{ gradlew -q prepareRC - }}} + }}} - Manually enter RC qualifier or hit enter to select the default one (RC1) - The task will print out the location of the RC tag. Please double-check its validity. + The task will print out the location of the RC tag. Please double-check its validity. {{{ RC tag to be created: https://svn.apache.org/repos/asf/httpcomponents/httpcore/tags/4.3.1-RC1 }}} + Optionally run preview task to see what changes have been made to the current snapshot. The RC tag will be created by copying those changes to the tag location - - Optionally run preview task to see what changes have been made to the current snapshot. - The RC tag will be created by copying those changes to the tag location {{{ gradlew -q previewRC }}} - {{{ Local changes for https://svn.apache.org/repos/asf/httpcomponents/httpcore/tags/4.3.1-RC1 /home/oleg/src/apache.org/httpcomponents/release-httpcore-4.3.1/build/repos-asf-httpcomponents-httpcore-trunk @@ -173, +151 @@ M pom.xml M httpcore-ab/pom.xml }}} - * Create RC tag {{{ gradlew -q commitRC }}} - * Check out RC from the RC tag {{{ gradlew -q checkoutRC - }}} + }}} - * Build RC and install it to the local Maven repository {{{ gradlew -q buildRC - }}} + }}} - - This task will execute 'maven install site' as an external command. Make sure the task terminates + This task will execute 'maven install site' as an external command. Make sure the task terminates successfully without any error. - successfully without any error. * Deploy RC to the staging artifact repository {{{ gradlew -q deployRC - }}} + }}} + This task will execute 'maven -Prelease deploy' as an external command. Make sure the task terminates successfully without any error. + The 'release' profile parameter will cause release artifacts to be signed prior to deployment to Nexus where will be held in the staging repository until they are promoted or deleted. - This task will execute 'maven -Prelease deploy' as an external command. - Make sure the task terminates successfully without any error. - - The 'release' profile parameter will cause release artifacts to be signed prior to deployment to Nexus - where will be held in the staging repository until they are promoted or deleted. The command assumes presence of a functional gpg setup on the local system. @@ -214, +184 @@ https://repository.apache.org/index.html#welcome * Mark release artifacts as 'Closed' in the Nexus artifact repository - - * Check that the correct files are present (e.g. binary, source, Javadoc), and "Close" the upload directory. + * Check that the correct files are present (e.g. binary, source, Javadoc), and "Close" the upload directory. - * This will allow the files to be seen publicly, but the files won't be added to the Central Maven repo yet. + * This will allow the files to be seen publicly, but the files won't be added to the Central Maven repo yet. - * You can then delete any unwanted files (such as .asc.md5 and .asc.sha1) (N.B. You cannot delete files until the upload is closed). + * You can then delete any unwanted files (such as .asc.md5 and .asc.sha1) (N.B. You cannot delete files until the upload is closed). - * Check that the files at the public URL look OK. + * Check that the files at the public URL look OK. - * If not, you can delete them all and try again. + * If not, you can delete them all and try again. + Important! The public URL, which will look something like https://repository.apache.org/content/repositories/orgapachehttpcomponents-nnn/, should be copied into the Release Vote e-mail (see below). - Important! The public URL, which will look something like - https://repository.apache.org/content/repositories/orgapachehttpcomponents-nnn/, - should be copied into the Release Vote e-mail (see below). * Check out staging dist repository {{{ gradlew -q checkoutDistStage - }}} + }}} - * Assemble release dist packages {{{ gradlew -q assemble - }}} + }}} - - The build script will prompt for key pass-phrase if the 'signing.password' parameter has been left + The build script will prompt for key pass-phrase if the 'signing.password' parameter has been left empty in gradle.properties. - empty in gradle.properties. * Prepare dist packages for import into the staging repository {{{ gradlew -q prepareDist }}} - - Optionally run preview task to see what files have been scheduled for import into the staging + Optionally run preview task to see what files have been scheduled for import into the staging repository. - repository. {{{ gradlew -q previewDist }}} - {{{ Local changes for release dist https://dist.apache.org/repos/dist/dev/httpcomponents/ /home/oleg/src/apache.org/httpcomponents/release-httpcore-4.3.1/build/repos-dist-dev-httpcomponents @@ -277, +238 @@ A httpcore-4.3.1-RC1/RELEASE_NOTES-4.3.x.txt A httpcore-4.3.1-RC1/httpcomponents-core-4.3.1-src.zip.asc }}} - * Commit dist packages to the staging repository {{{ gradlew -q commitDist }}} - == Release vote == - * Prepare release vote content {{{ gradlew -q prepareVote }}} - This will generate output like the following: {{{ @@ -323, +280 @@ [ ] -1 I am against releasing the packages (must include a reason). ----------------8<-------------[ cut here ]------------------ }}} - * Call release vote on [email protected] by sending the generated text + Prepare release vote message from the generated release vote content. Make sure to insert Maven artefacts link taken from the Nexus Repository Manager. - Prepare release vote message from the generated release vote content. Make sure to insert - Maven artefacts link taken from the Nexus Repository Manager. - == Release vote result == - - * Tally votes after the voting deadline elapsed (usually 72 hours, but may be extended if not + * Tally votes after the voting deadline elapsed (usually 72 hours, but may be extended if not - enough votes have been cast) + . enough votes have been cast) === If the vote fails === - * Cancel current RC {{{ gradlew -q cancelRC - }}} + }}} - - This command will invalidate local RC checkout and increment RC count. It will _not_ remove + . This command will invalidate local RC checkout and increment RC count. It will _not_ remove any staged artifacts or packages. - any staged artifacts or packages. * Login to Nexus and "Delete" the staged uploads https://repository.apache.org/index.html#welcome - * Address concerns / problems stated as reasons for negative votes in your normal development + * Address concerns / problems stated as reasons for negative votes in your normal development + environment * Update the local snapshot from the release branch to pull the latest changes {{{ gradlew -q updateSnapshot - }}} + }}} - * Restart the release process from the 'Prepare RC tag' section. === If the vote succeeds === - * Find the original original voting thread at - http://mail-archives.apache.org/mod_mbox/hc-dev/ + http://mail-archives.apache.org/mod_mbox/hc-dev/ * Prepare vote result message using the following template - {{{ + {{{ [VOTE][RESULT] HttpComponents Core 4.3.1 release The vote to release HttpComponents Core 4.3.1 has passed with the following results @@ -390, +339 @@ Original voting thread: [insert link here] }}} - * Send results to [email protected] and [email protected] * Promote the current RC to official release {{{ gradlew -q promoteRC - }}} + }}} + {{{ Promoting HttpCore 4.3.1 RC1 to official release Copying https://svn.apache.org/repos/asf/httpcomponents/httpcore/tags/4.3.1-RC1 to https://svn.apache.org/repos/asf/httpcomponents/httpcore/tags/4.3.1 }}} - == Release deployment == - * Deploy release artifacts Login to the Nexus repository, and "Release" the staging directory. @@ -418, +365 @@ {{{ gradlew -q promoteDist - }}} + }}} - - Alternatively if some customization of the process is required one may generate a svnmucc input + Alternatively if some customization of the process is required one may generate a svnmucc input file instead - file instead {{{ gradlew -q svnmucc - }}} + }}} + == Prepare next development cycle == - * Update project metadata in pom.xml files {{{ gradlew -q prepareNextVersion }}} - Manually enter next snapshot version or hit enter to select the default based on pom.xml content - Optionally run preview task to see what changes have been made to the current snapshot. + Optionally run preview task to see what changes have been made to the current snapshot. {{{ gradlew -q previewNextVersion }}} - {{{ Next development version: 4.3.2-SNAPSHOT /home/oleg/src/apache.org/httpcomponents/release-httpcore-4.3.1/build/repos-asf-httpcomponents-httpcore-trunk @@ -452, +395 @@ M pom.xml M httpcore-ab/pom.xml }}} - * Commit updated project metadata {{{ gradlew -q commitNextVersion }}} - == Update project website site == - === Update website source === - Project website source can be found here http://svn.apache.org/repos/asf/httpcomponents/project-website/trunk/ - * Review and update News, Status, Download pages @@ -478, +416 @@ src/site/apt/download.apt src/site/resources/css/hc-maven.css }}} - === Prepare local stage === - - * Checkout the latest snapshot of the main website source and the released project + * Checkout the latest snapshot of the main website source and the released project {{{ gradlew -q checkoutFullWebsite }}} - * Render website content {{{ gradlew -q generateFullWebSite }}} - You may get an error here if the parent POM is not present because the project uses a SNAPSHOT version. You can checkout the project trunk (for example 8-SNAPSHOT) at http://svn.apache.org/repos/asf/httpcomponents/project/trunk/ and install it locally by running 'mvn install -N'. You can at any time pick up the latest changes from the repository by running @@ -500, +434 @@ {{{ gradlew -q updateMainWebSite generateFullWebSite }}} - - * Prepare project site stage {{{ gradlew -q checkoutSiteStage }}} - * Stage updated website content {{{ gradlew -q siteStage }}} - * Preview staged website content {{{ gradlew -q previewSiteStage }}} - {{{ Local changes for project website /home/oleg/src/apache.org/httpcomponents/release-httpcore-4.3.1/build/repos-asf-httpcomponents-site ... - }}} - - You can now use a browser to review the content located in the staging directory. + You can now use a browser to review the content located in the staging directory. * Commit staged website content - Once satisfied with the changes, commit local changes to the repository. + Once satisfied with the changes, commit local changes to the repository. {{{ gradlew -q commitSiteStage }}} - Enter commit message when promted {{{ oleg@ubuntu:~/src/apache.org/httpcomponents/release-httpcore-4.3.1$ ./gradlew -q commitSiteStage Please enter commit message: ... - }}} - == Announce release == - - * Send out an announcement to the following lists: [email protected], [email protected], + * Send out an announcement to the following lists: [email protected] , [email protected] , - [email protected], [email protected] + . [email protected] , [email protected] {{{ [ANNOUNCEMENT] HttpComponents Core 4.3.1 Released - The Apache HttpComponents project is pleased to announce 4.3.1 GA release of HttpComponents Core. + The Apache HttpComponents project is pleased to announce 4.3.1 GA release of HttpComponents Core. [release specific content] @@ -562, +485 @@ <http://hc.apache.org/downloads.cgi> Release notes - <http://www.apache.org/dist/httpcomponents/httpcore/RELEASE_NOTES.txt> - HttpComponents site - + HttpComponents site - <http://hc.apache.org/> About HttpComponents Core HttpCore is a set of low level HTTP transport components that can be used to build custom client and server side HTTP services with a minimal footprint. HttpCore supports two I/O models: a blocking I/O model based on the classic Java I/O and a non-blocking, event driven I/O model based on Java NIO. }}} - == Post-release JIRA admin tasks == - * Update JIRA project data: Project -> Administer project -> Versions: Manage - - * HttpCore - https://issues.apache.org/jira/browse/HTTPCORE + * HttpCore - https://issues.apache.org/jira/browse/HTTPCORE - * HttpClient - https://issues.apache.org/jira/browse/HTTPCLIENT + * HttpClient - https://issues.apache.org/jira/browse/HTTPCLIENT - * HttpAsyncClient - https://issues.apache.org/jira/browse/HTTPASYNC + * HttpAsyncClient - https://issues.apache.org/jira/browse/HTTPASYNC * Mark current version as Released - * This may also be a good moment to mark old unsupported release versions as Archived + * This may also be a good moment to mark old unsupported release versions as Archived and to add new release targets - and to add new release targets --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
