The Apache release management process is described in the guide to release management during incubation page.

  1. If you have not done creating and posting your PGP key, please do by following the next instructions.
    The key must be at least 4096 bits long. 
    Publish the public key to a public PGP server
    Register its fingerprint in Apache LDAP
    scp the public key to .pgpkey under your Apache home directory
    Append the public key to the KEYS file. You can access the KEYS file via https://dist.apache.org/repos/dist/release/incubator/reef.
    Upload your public key to Apache (e.g., https://people.apache.org/keys/committer/bgchun.asc). 
    You can find useful bits from the release signing basic facts page.

  2. Prepare for a source release candidate for PPMC voting.
    The release must not contain binary files. 
    The release must contain proper DISCLAIMER, NOTICE, and LICENSE files. 
    The source file must compile and run tests successfully. 
    mvn apache-rat:check passes.
  3. Create a branch for the release, e.g., branch-0.10.0-incubating. Within the branch, versions in all files must be updated to remove "-SNAPSHOT". (In contrast, the version in POMs for staging maven artifacts must contain *-SNAPSHOT. More on this later.) We have a script that can help make this change: (Run with --help to see detailed options.)

    python <REEF_HOME>/dev/change_version.py -s false <REEF_HOME> 0.10.0-incubating


    Check the changes, and commit when satisfied. Then, tag the commit as a release candidate, e.g., release-0.10.0-incubating-rc1. Push these changes, making sure to also push the tag e.g, git push apache <tag_name>.

  4. Create a source release candidate gzipped tar ball, its signature (with PGP), and digests (md5 and sha512). 
    Here's useful info on release signing: http://www.apache.org/dev/release-signing.html.

    The release candidate name is apache-reef-<version>-incubating-rc<rc candidate number>.tar.gz. Another script can take care of all of these steps: (Run with --help to see detailed options.)

    python <REEF_HOME>/dev/release.py <REEF_HOME> 0.10.0-incubating 1 <8-letter PGP hex>


    Make sure to run this outside of the <REEF_HOME> directory, as the artifacts will be created in the working directory. A templated email message will be output as well. Customize it and use it for step 5. The artifacts belong in https://dist.apache.org/repos/dist/dev/incubator/reef/. Create a directory with the release version name and add the release, its signature, and digests. 

     

  5. Do PPMC voting at dev@reef. If the release candidate receives any -1 or does not receive three +1's, the release candidate is cancelled. The release manager should prepare for a new release candidate by fixing the problems raised by PPMC members and do voting for the new release candidate. This process can iterate multiple times.

  6. Do IPMC voting at general@incubator. The voting email should contain the PPMC voting result thread. If at least three IPMC members cast +1 binding votes (with no -1 vote), the vote passes. If not, the release manager should prepare for a new release candidate and do PPMC and IMPC voting.

  7. When the IPMC vote passes, the release candidate becomes a release. The location of the release is under https://dist.apache.org/repos/dist/release/incubator/reef. Create a directory with the release version name and add the release, its signature, and digests. 
     
  8. In addition, the release manager should prepare, stage and release maven artifacts. The detailed procedure is here. Make sure to use Apache's Nexus staging repository (repository.apache.org).

    Create a new branch for the maven release, e.g., branch-0.10.0-incubating-maven. The version in only the POMs for staging maven artifacts must be *-SNAPSHOT. In contrast, the version in POMs for the source release must be the final release version. Again, using a script can help:

    python <REEF_HOME>/dev/change_version.py --pomonly -s true <REEF_HOME> 0.10.0-incubating


    The maven artifacts should be signed with the same key as the source release. Also, you must skip checkstyle to complete the build (for some reason, checkstyle wants to check generated files when running release:prepare). A command that might work is below. Try a dryRun, then remove that option when satisfied with the results.

    $ mvn release:prepare -DdryRun=true -DautoVersionSubmodules=true -Darguments="-DskipTests -Dcheckstyle.skip=true -Dgpg.keyname=<8-letter PGP hex>"

     

    When all is set, the manager should now promote maven artifacts. The artifacts should now show up immediately in the maven central repo, and become available after some time in the web interface once the search index is created.

  9. Don't forget to update our website with the new release download and API. Follow the steps on this page.