tl;dr#

Once you've done your first release, you'd most probably be more comfortable with the quick guide to get the release out (nevertheless, all steps are explained below):

  • Check version on ./jspwiki-api/src/main/java/org/apache/wiki/api/Release.java
  • Prepare the release
  mvn clean install apache-rat:rat -Papache-release               # generates artifacts, checks for AL headers
  mvn release:prepare -DdryRun=true -DautoVersionSubmodules=true  # review pom.xml, confirm only appropiate sections have been changed
  mvn deploy -Papache-release                                     # deploy a snapshot
  mvn release:clean                                               # prepare the release 1/3
  mvn release:prepare -DautoVersionSubmodules=true                # prepare the release 2/3
  mvn release:perform                                             # prepare the release 3/3
  • Close the staging repo
  • svn copy binaries and source to https://dist.apache.org/repos/dist/dev/jspwiki/X.Y.Z/
  • Run the vote and, if successful, continue with the items on the list
  • Publish Nexus repository
  • Publish binaries and source to the mirrors
  • Publish latest javadocs and binary compatibility reports
  • Wait for 24 hours, then announce the release
  • Add the next release version to JIRA

First time release managers#

  1. Generate PGP code signing keys
  2. Add the PGP code signing keys to the KEYS file as documented on the Infrastructure site
  3. Put in a Infrastructure JIRA asking to get added to the jspwiki unix group on people.apache.org
  4. Copy the modified KEYS file to the release folder /www/www.apache.org/dist/jspwiki on people.apache.org and ensure it has 0664 permissions.
  5. Add the following servers to your Maven settings.xml file:
  <servers>
    <server>
      <id>apache.releases.https</id>
      <username>APACHE-ID</username>
      <password>APACHE-PASSWORD</password>
    </server>
    <server>
      <id>apache.snapshots.https</id>
      <username>APACHE-ID</username>
      <password>APACHE-PASSWORD</password>
    </server>
    <server>
      <id>github.com</id>
      <username>GITHUB-ID</username>
      <password>GITHUB-2FA-TOKEN</password>
    </server>
  </servers>

Note that your password doesn't need to be inside the settings.xml file, due to Maven encryption capabilities. It is also convenient to setup the ssh keys on people.apache.org, otherwise you'll have to enter your login password a number of times.

Pre-release checks#

Verify that ./jspwiki-api/src/main/java/org/apache/wiki/api/Release.java contains the appropiate JSPWiki version

  • on ./jspwiki-api/src/main/java/org/apache/wiki/api/Release.java, BUILD and POSTFIX constants should be empty strings.

The maven release process does not change these values on these files, so this has to be done manually.

Create a release candidate#

Generate release candidate artifacts#

  • Generate artifacts
  mvn clean install apache-rat:rat -Papache-release

This will check that all files have AL headers and also build artifacts, sources and sign

  • Check POMs for release
  mvn release:prepare -DdryRun=true -DautoVersionSubmodules=true 

Perform quick diffs between pom.xml files and their sibling pom.xml.tag files to see if the license or any other info has been removed (should never happen, but just to stay on the safe side).

Note that, when asked, the tag should follow the scheme X.Y.Z-RC#. If the vote succeeds, we'll re-tag later on X.Y.Z-RC# with X.Y.Z.

Prepare the release#

  • Publish a snapshot
  mvn deploy -Papache-release
  • Prepare the release
  mvn release:clean
  mvn release:prepare -DautoVersionSubmodules=true 

IMPORTANT: when asked, the tag should follow the scheme X.Y.Z-RC#. If the vote succeeds, we'll re-tag later on X.Y.Z-RC# with X.Y.Z.

  • Stage the release for a vote
  mvn release:perform
  • Close the staging repository
  1. Login to https://repository.apache.org and select Staging Repositories on the left under Build Promotion.
  2. Select org.apache.jspwiki from the list of repositories, then click Close using "Apache JSPWiki X.Y.Z" as the description to allow others to see the repository.
  • Svn copy binaries and source to https://dist.apache.org/repos/dist/dev/jspwiki/X.Y.Z/ (remember to also copy accompanying sha512 and asc files), suggested structure:
  binaries
    portable
    webapp
  source
  wikipages   

Run a vote#

    Subject: [VOTE] Release JSPWiki version X.Y.Z
        
    This is a release vote for Apache JSPWiki, version X.Y.Z. The vote will be open for at least 72 hours from now.
        
    It fixes the following issues:
    https://issues.apache.org/jira/secure/ReleaseNote.jspa?projectId=12310732&version=<VERSION>
    
    You can see a curated changelog at https://jspwiki-wiki.apache.org/Wiki.jsp?page=NewInX.Y
        
    Note that we are voting upon the source (tag), binaries are provided for convenience.

    Everybody is encouraged to vote.
        
    Source and binary files:
    https://dist.apache.org/repos/dist/dev/jspwiki/[VERSION]-RC[RC]

    Nexus staging repo: https://repository.apache.org/content/repositories/orgapachejspwiki-...
        
    The tag to be voted upon:
    https://github.com/apache/jspwiki/tree/[VERSION]-RC[RC]
        
    JSPWiki's KEYS file containing PGP keys we use to sign the release:
    https://www.apache.org/dist/jspwiki/KEYS

    *** Please download, test and vote:

    [ ] +1 Approve the release
    [ ]  0 Don't mind
    [ ] -1 Disapprove the release (please provide specific comments)

Note that the PMC needs to vote upon the release before any release can be made official.

Roll Out#

  • Add a another tag X.Y.Z to the commit tagged with X.Y.Z-RC# and push it
    1. git tag -a X.Y.Z -m "X.Y.Z" X.Y.Z-RC#
    2. git push origin X.Y.Z
  • Publish Nexus repository
    1. Login to https://repository.apache.org and select Staging Repositories on the left under Build Promotion.
    2. Select the repository that was closed earlier, and click Release, using the description "Apache JSPWiki X.Y.Z"
  • Publish src and bin distributions to the mirrors
    1. svn checkout https://dist.apache.org/repos/dist/release/jspwiki
    2. svn copy the release artifacts from https://dist.apache.org/repos/dist/dev/jspwiki/$VERSION-CANDIDATE to https://dist.apache.org/repos/dist/release/jspwiki/$VERSION
    3. svn delete older releases
  • Update Downloads page links
    1. add source + checksum + signature + links to current release and delete those links from older releases (ref.)
  • Update Apache JSPWiki website
    1. at https://github.com/apache/jspwiki-site, modify src/main/jbake/content/general/downloads.md, src/main/jbake/content/general/news.md and src/main/jbake/content/index.md so they reflect the new release
    2. add a curated changelog at https://jspwiki-wiki.apache.org/Wiki.jsp?page=NewIn<REPLACE>
  • Wait 24 hours for mirrors to sync
  • Post link to the full release notes along with links to the major JIRA changes on the front page of the site

Add the next release version to JIRA#

  • (Bulk) transition all X.Y.Z issues from Resolved to Closed. To avoid clogging dev@jspwiki.a.o, there's no need to send bulk e-mails for these changes
  • Mark the released version as Released with a release date
  • Add the next version number to JIRA

Announce the release#

    Subject: [ANNOUNCE] Apache JSPWiki X.Y.Z released
        
    The Apache JSPWiki team is pleased to announce the release of JSPWiki X.Y.Z.
        
    This is the <REPLACE> release on the X.Y series of Apache JSPWiki, a feature-rich and 
    extensible WikiWiki engine built around the standard JEE components.
        
    The release is available here:
    https://jspwiki-wiki.apache.org/Wiki.jsp?page=Downloads

    JSPWiki Maven artifacts are available under org.apache.jspwiki groupId, 
    version X.Y.Z
        
    The full change log is available here:
    https://issues.apache.org/jira/browse/JSPWIKI/fixforversion/<REPLACE>

    A curated change log is also available here:
    https://jspwiki-wiki.apache.org/Wiki.jsp?page=NewIn<REPLACE>
        
    We welcome your help and feedback. For more information on how to
    report problems, and to get involved visit the project website at
    http://jspwiki.apache.org/
        
    The Apache JSPWiki Team

First push post-release#

Ensure that ./jspwiki-api/src/main/java/org/apache/wiki/api/Release.java contains next development versions.

Troubleshooting#

  • Git doesn't allow to perform an mvn release:perform because it detects file(s) permissions change (i.e. change from old 0755 to new 0644)
    • git config core.fileMode false
  • mvn release:prepare doesn't find git credentials
    • On your settings.xml file you should have one <server /> entry for each of the following ones:
      • apache.snapshots.https: to be able to deploy snapshots
      • apache.releases.https: to be able to deploy releases
      • github.com: to be able to create tags
      • Alternatively, for the last one, you could pass -Dusername=[username] -Dpassword=[password] to the mvn command (source: http://stackoverflow.com/q/1255593)
  • Release fails after a tag has been generated and the pom versions have been incremented
    • No need of mvn release:rollback, instead check out the tag and release:perform -DconnectionUrl=scm:svn:https://svn.apache.org/COMPLETE-URL-TO-TAG

Other links of interest#