# # 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. This document is meant as a step-by-step recipe to achieve the release of the Commons Math component. Note that more general instructions valid for all components, including [math], are available on the Apache Commons main site: at "http://commons.apache.org/releases/prepare.html" and "http://commons.apache.org/releases/release.html". The files "settings-security.xml" and "settings.xml" are minimal examples of files used by maven to pick up authentication credentials needed to connect to remote servers and to cryptographically sign the artefacts. (0) Preliminary checks: * All Java files must contain a license header. The "RAT" maven plugin will generate a report indicating for which files the license is missing. * For a "minor" release, the library must be backward-compatible. Check all the errors reported by the "Clirr" plugin. * Clear all "CheckStyle" warnings. * Make sure that the construct reported by "FindBugs" are intentional. * Mark all fixed issues as such in the bug-tracking system, and add a corresponding entry in "src/changes/changes.xml". (1) As a first optional step, you can test that everything works locally, i.e. that the build process can create all the necessary artefacts. The command $ mvn clean deploy -Prelease -Ptest-deploy should create the artefacts in the "target/deploy". (2) At this point, you should commit everything that will be part of the release. In particular: * Update and commit the "src/site/site.xml" file to contain the information about the API docs of the new release. * Estimate a release date (taking into account the release vote delay) and insert it in the "src/changes/changes.xml" file. From now on, be especially careful to the "svn commit" commands that will be indicated below: Only the selected file(s) should be committed but not the "pom.xml" that will be modified now. The "pom.xml" on the SVN server must always be in a state for creating snapshot versions of the library, i.e. the tag "" should end with the string "-SNAPSHOT": 3.2-SNAPSHOT Assuming that the release version will be "3.2", modify the "" tag to read: 3.2 Modify the section of "" that also refers to version numbers. You should uncomment the "" line and indicate the appropriate numbering of the release candidate: This refers to how many times you will need to repeat this whole release process until it is accepted (by a vote): 3.2 RC1 [Note: From now on, the "pom.xml" file must not be committed anymore to the SVN repository. Once the release process is over, you can do a "revert" to cancel the local changes.] (3) The "download" page template is located at "src/site/xdoc/download_math.xml". This file is updated automatically by running the command: $ mvn commons:download-page (4) The "release notes" file will be created by gathering all the changes collected during development in the file "src/changes/changes.xml". Create it by running: $ mvn changes:announcement-generate \ -Dchanges.template=release-notes.vm \ -Dchanges.templateDirectory=src/changes It will generate the release text in "target/announcement/release-notes.vm", which you must now copy to the appropriate location: $ cp -i target/announcement/release-notes.vm RELEASE-NOTES.txt Alternately to the above two commands, you can rely on the "release-notes" profile defined in the "commons-parent" project (which is inherited by the "commons-math project) and run the following command, which will directly create the RELEASE-NOTES.txt file: $ mvn -Prelease-notes changes:announcement-generate Check the file for weird line breaks, and commit the updated file to SVN: $ svn commit RELEASE-NOTES.txt (5) Create the tag that will contain the whole source of this release candidate. First, make sure that the workspace is up-to-date: $ svn up Then, assuming the first candidate, the suffix will be "RC1" (this should be the same as in the "" in the "pom.xml"), and the command will be: $ svn copy . \ -m"Creating Commons Math v3.2 RC1 tag." \ https://svn.apache.org/repos/asf/commons/proper/math/tags/MATH_3_2_RC1 The tag will then be accessible at https://svn.apache.org/repos/asf/commons/proper/math/tags/ (6) Check out the tagged code and change into the newly created directory: $ svn co https://svn.apache.org/repos/asf/commons/proper/math/tags/MATH_3_2_RC1 $ cd MATH_3_2_RC1 (7) If this is your first release, you might need to add your GPG encryption key to the KEYS file. [If you have already done so, skip this section.] Retrieve the files from the SVN repository: $ svn co --depth=immediates \ https://__Your_apache_login__@svn.apache.org/repos/asf/commons/trunks-proper and follow the instructions at the top of the "KEYS" file. (8) Create and transfer the artifacts to the Nexus server (a.k.a. "deploy"). Because the artifacts must be cryptographically signed, this step requires that a profile named "release" exists in the maven "settings.xml" configuration file which will contain the identifier of your GPG key (cf. sample "settings.xml" file). You can then run $ mvn clean deploy -Prelease which will transfer the artifacts to the Nexus repository located at https://repository.apache.org/index.html#stagingRepositories This process transfers more files than really needed in the the "staging" (i.e. non official) maven repository. The files expected in the repository are commons-math3-3.2.pom, commons-math3-3.2.jar, commons-math3-3.2.javadoc, commons-math3-3.2.sources, commons-math3-3.2.test-sources commons-math3-3.2.tests, the associated fingerprints (.md5 and .sha1) and the signatures .asc. Note that Nexus automatically adds "md5" and "sha1" checksums files to the "asc" files (cryptographic signature). These fingerprints on signatures are spurious and have to be manually removed from Nexus staging area. The process also transfers the complete source and binaries distributions files commons-math3-3.2.-bin.tar.gz, commons-math3-3.2.-bin.zip, commons-math3-3.2.-src.tar.gz, commons-math3-3.2.-src.zip as well as the associated .md5 and .sha1 fingerprints and the .asc signatures. These are not really maven artifacts but rather distribution archives, and they belong elsewhere, so they must also been removed from the Nexus staging repository. As a measure of sanity check, repository must be manually "closed" before other people review the deliverables just created. How to "close" the staging repository it is explained at this page: https://docs.sonatype.org/display/Repository/Closing+a+Staging+Repository (9) Upload the other distribution files to the Apache servers. The archive files have been created during the previous step. They have been put in the .m2 local repository. The RELEASE_NOTES.txt file hase been created earlier and is still in the checkout directory of the release candidate. All these files can be uploaded to the development area of the Apache dist server using the following commands: $ cd /tmp $ svn checkout https://dist.apache.org/repos/dist/dev/commons/math $ cp /.m2/repository/org/apache/commons/commons-math/3.2*-bin.* binaries $ cp /.m2/repository/org/apache/commons/commons-math/3.2*-src.* source $ cp /RELEASE-NOTES.txt . $ svn commit -m "Creating distribution files for 3.2 RC1" (10) Web site testing (a.k.a "staging") of the generated web site (containing the API documentation, etc.) This step requires a "" with an identifier set to "stagingSite" and that the remote server is set up to accept no-password ssh authentification (cf. sample "settings.xml" file). Execute the commands (assuming the release candidate is "RC1"): $ mvn site and $ mvn site:stage-deploy \ -DstagingDirectory=src/site \ -DstagingSiteURL=scp://__Your_apache_login__@people.apache.org:/www/people.apache.org/builds/commons/math/3.2/RC1 The web site will be available for review at: http://people.apache.org/builds/commons/math/3.2/RC1 (11) Call to vote by sending a message to the "dev" ML with subject "[VOTE][RC1] Release Commons Math 3.2". You can use the following example as a starting point, replacing the URLs with the appropriate ones: ---------- Tag: https://svn.apache.org/repos/asf/commons/proper/math/tags/MATH_3_2_RC1/ Site: http://people.apache.org/builds/commons/math/3.2/RC1/ Distribution files: https://dist.apache.org/repos/dist/dev/commons/math/ Maven artifacts: https://repository.apache.org/content/repositories/orgapachecommons-051/org/apache/commons/commons-math3/3.2/ [ ] +1 Release it. [ ] +0 Go ahead; I don't care. [ ] -0 There are a few minor glitches: ... [ ] -1 No, do not release it because ... This vote will close in 72 hours. ---------- (12) If some blocking problems have been found in the release deliverables, cancel the vote by sending a "[CANCEL][VOTE]" message to the "dev" ML. After correcting the problems, you'll likely have to start again from step 3, 4 or 5. (13) After at least 72 hours have elapsed, send a "[VOTE][RESULT]" mail to summarize the outcome of the vote. This should tally the votes cast, and state which are binding (PMC members). (14) The distribution files must be moved from the development area to the release area of the Apache dist server: $ svnmucc -U https://dist.apache.org/repos/dist \ mv dev/commons/math/RELEASE-NOTES.txt release/commons/math/RELEASE-NOTES.txt \ mv dev/commons/math/binaries/commons-math-3.2-bin.tar.gz release/commons/math/binaries/commons-math-3.2-bin.tar.gz \ mv dev/commons/math/binaries/commons-math-3.2-bin.tar.gz.asc release/commons/math/binaries/commons-math-3.2-bin.tar.gz.asc \ mv dev/commons/math/binaries/commons-math-3.2-bin.tar.gz.md5 release/commons/math/binaries/commons-math-3.2-bin.tar.gz.md5 \ mv dev/commons/math/binaries/commons-math-3.2-bin.tar.gz.sha1 release/commons/math/binaries/commons-math-3.2-bin.tar.gz.sha1 \ mv dev/commons/math/binaries/commons-math-3.2-bin.zip release/commons/math/binaries/commons-math-3.2-bin.zip \ mv dev/commons/math/binaries/commons-math-3.2-bin.zip.asc release/commons/math/binaries/commons-math-3.2-bin.zip.asc \ mv dev/commons/math/binaries/commons-math-3.2-bin.zip.md5 release/commons/math/binaries/commons-math-3.2-bin.zip.md5 \ mv dev/commons/math/binaries/commons-math-3.2-bin.zip.sha1 release/commons/math/binaries/commons-math-3.2-bin.zip.sha1 \ mv dev/commons/math/source/commons-math-3.2-src.tar.gz release/commons/math/source/commons-math-3.2-src.tar.gz \ mv dev/commons/math/source/commons-math-3.2-src.tar.gz.asc release/commons/math/source/commons-math-3.2-src.tar.gz.asc \ mv dev/commons/math/source/commons-math-3.2-src.tar.gz.md5 release/commons/math/source/commons-math-3.2-src.tar.gz.md5 \ mv dev/commons/math/source/commons-math-3.2-src.tar.gz.sha1 release/commons/math/source/commons-math-3.2-src.tar.gz.sha1 \ mv dev/commons/math/source/commons-math-3.2-src.zip release/commons/math/source/commons-math-3.2-src.zip \ mv dev/commons/math/source/commons-math-3.2-src.zip.asc release/commons/math/source/commons-math-3.2-src.zip.asc \ mv dev/commons/math/source/commons-math-3.2-src.zip.md5 release/commons/math/source/commons-math-3.2-src.zip.md5 \ mv dev/commons/math/source/commons-math-3.2-src.zip.sha1 release/commons/math/source/commons-math-3.2-src.zip.sha1 \ -m "Publish commons-math 3.2 Release" (15) Release (a.k.a. "promote") the artifacts on the Nexus server, as shown here: https://docs.sonatype.org/display/Repository/Releasing+a+Staging+Repository (16) Publish the web site. From your local working copy of the tag, run the command: $ mvn site-deploy You may want to adjust manually some parts like fixing broken relative links or copying the content of the current apidocs to javadocs/api-3.2. In order to do this, you have to check out the production site using svn, make your changes locally and commit the changes back to the server. $ svn checkout https://svn.apache.org/repos/infra/websites/production/commons/content/proper/commons-math $ $ svn commit -m "fixing broken links" (17) Copy the the final RC tag to the official tag: $ svn copy \ https://svn.apache.org/repos/asf/commons/proper/math/tags/MATH_3_2_RC1 \ -m"RC1 becomes the 3.2 official version." \ https://svn.apache.org/repos/asf/commons/proper/math/tags/MATH_3_2 (18) Allow for the web site mirrors to be updated (possibly several hours); then send (from your apache account) a release announcement to the following ML: announce@apache.org dev@commons.apache.org user@commons.apache.org