Releasing Apache VXQuery™

One time steps

  • set up directory structure

    There usually are 3 directories at the same level

    • the source directory vxquery,
    • the site directory, and
    • the distribution directory dist.

      The source directory is version-controlled by git, the other two are version controlled by svn. While the source directory and the distribution directory can have arbitrary names and locations, the site directory has to be called site and it needs to be at the same level as the source directory to enable site deployment.

      Assuming that the source directory is available one can create the directory structure by going to the directory that contains the source directory and checking out the distribution and site directories:

      $ svn co dist
      $ svn co
  • create a code signing key with the Apache instructions and example settings
  • add your key to the KEYS file

    Change into the dist directory and run

    (gpg2 --list-sigs <your name> && gpg2 --armor --export <your name>) >> KEYS

    and then check the new KEYS file into svn

    $ svn ci -m "add [YOUR NAME]'s key to KEYS file"
  • create an encrypted version of your Apache LDAP password for the nexus repository at

    Follow the steps in the Password Encryption guide to encrypt a master password and to encrypt your Apache LDAP password. (It's nicer if you have maven > 3.2.1 to do this.)

  • add to ~/.m2/settings.xml
    • for the upload to the nexus repository
      <settings xmlns=""
          <!-- To publish a snapshot of some part of Maven -->
            <username>[YOUR APACHE LDAP USERNAME]</username>
            <password>[YOUR APACHE LDAP PASSWORD (encrypted)]</password>
          <!-- To stage a release of some part of Maven -->
            <username>[YOUR APACHE LDAP USERNAME]</username>
            <password>[YOUR APACHE LDAP PASSWORD (encrypted)]</password>
    • to sign the artifacts
  • Download Apache Rat from
  • Add your ssh key to (required to create a website on
    • Login and update your profile details.

Each time steps

  • clean up
    $ mvn clean
  • run rat (always do this on a clean source folder):
    $ java -jar ~/Downloads/apache-rat-0.11/apache-rat-0.11.jar -d . -E .rat-excludes
  • test your setup
    $ mvn install -Papache-release
  • dry run of the release process
    $ mvn release:prepare -DdryRun=true
  • check (and fix) the content of the LICENSE and NOTICE files (especially the date) and the copyright dates in changed files
  • release to the staging repository
    $ mvn release:prepare
    $ mvn release:perform
  • close the staging repository at
  • check that the artifacts are available in the repository
  • send out [VOTE] e-mail on
  • after successful vote promote staging repository
  • add new source artifacts (archive + signature + hashes) to svn and remove old release dirctory
  • commit changes to svn
  • update the site branch in git from the from the release-tag
  • build a new site and deploy it to ../site
    $ mvn site site:deploy
  • submit the site to svn
    $ cd ../site
    $ svn st | awk '/\?/ { print $2 }' | xargs svn add # add all new files
    $ svn ci -m"updated site"
    $ cd -
  • wait a few days for the mirroring of the release artifacts
  • send [ANNOUNCE] e-mail to and