Project Documentation

Release Checklist (Developer Info)

Checklist of tasks to perform for each release. For general information about Apache releases you may also consult Publishing Maven Artifacts.


  • Ensure that all open bugs have been either fixed or moved to an other release version.
  • Ensure that all examples are working with the release candidate.
  • Post a note on the list and ask for problems with the release candidate.
  • Install (or unpack) a jdk 1.4 on your computer (only for Tobago 1.0.x).
  • Please switch to a jdk depending of the version to build:
    • for Tobago 1.0.x use jdk 1.5 or 1.6 for build and 1.7 for deployment.
    • for Tobago 1.5.x use jdk 1.7.
    • for Tobago 2.0.x use jdk 1.7 or 1.8.
    • for Tobago 3.0.x use jdk 1.7 or 1.8.
  • Perform basic checks on an unmodified checkout for all modules:
    # for Tobago 1.0.x
    mvn checkstyle:check rat:check -Pall-modules
    # for Tobago 1.5.x and higher
    mvn clean install -Pall-modules && mvn checkstyle:check apache-rat:check animal-sniffer:check -Pall-modules
  • You need to add your GPG keys in Subversion and the Apache site before a release.

Building the Release

  • Prepare the release with:
    mvn release:prepare -Pall-modules
  • Check out a fresh copy of the svn tag:
    cd ..
    svn co<version>
    cd tobago-<version>
  • Deploy the fresh copy to the Nexus repository with the apache-release profile (we are not using release:perform here, because of some different options):
    # for Tobago 1.0.x
    # "install" with Java 1.6 and Maven 2
    mvn install -Papache-release,jdk14retro,generate-assembly --no-plugin-updates -Dnon-default-modules -Djava14.home=${java14.jre}
    # "deploy" with Java 1.7 and Maven 3 (hotfix: also comment out the maven-apt-plugin stuff)
    mvn deploy -Papache-release,generate-assembly --no-plugin-updates -Dnon-default-modules
    # for Tobago 1.5.x and higher
    mvn deploy -Papache-release,generate-assembly --no-plugin-updates -Dnon-default-modules

    For more information please consult the pom.xml files.

  • Close the repository on the Nexus instance for stating (you will receive a mail with the staging location).


  • Propose a vote on the dev list with the staging location.
  • For a positive result wait at least 72 hours.
  • Once a vote is successful, post the result to the dev list.


  • Close all resolved jira issuse for the release.
  • Release the staging repository on the Nexus instance.
  • Copy the download artifacts from the repository to the site (see script below)
  • Building the site
    • Note: The site can only be build correctly on file systems that supports to differ upper-/lower-case. This is not the default on Windows and Mac OS X machines. On Mac OS X you can mount a virtual filesystem (sparse bundle) that supports upper-/lower-case with the Disk Utility.
      cd /Volumes/tobago-site
      svn co tobago
      svn co tobago-publish
      cd tobago
      export MAVEN_OPTS="-Xmx1500m -XX:MaxPermSize=512m ${MAVEN_OPTS}"
      mvn package -Pattach-source
      mvn site:site
      mvn site:stage -DstagingDirectory=/Volumes/tobago-site/tobago-publish
  • Update the site after the distribution is on the Apache mirrors available.
  • Unpack and commit the API Docs of the release with the, or script in /Volumes/tobago-site/tobago-publish (set correct version first).
  • Delete old assemblies in /www/ on Older releases are automatic available in the archive.
  • Delete old snapshots in /www/ on
  • Create and send announcement.

Vote template

Subject: [VOTE] Release Tobago <version>


I would like to release Tobago <version>,

This release contains over 70 changes.
For a detail list please consult the release notes:<versionidfromjira>

The version is available at the staging location and the
revision number of the release is 487980 and tagged as tobago-<version>.

Staging distribution:

Staging repository:

The vote is open for 72h.

[ ] +1
[ ] +0
[ ] -1

Announcement template

Subject: [ANNOUNCE] Apache Tobago <version>

 The Apache MyFaces team is pleased to announce the release of Apache Tobago <v>.
 Apache Tobago is a component library for JSF.

 Main new features

 [add main new features here or remove this section]


 Please check the release notes at<versionidfromjira>
 for a full list of the changes in version <v>.

 Known limitations and bugs:

 [add main limitations and known bugs here or remove this section]

 For more information about Apache Tobago, please visit

 Have fun,
 -The MyFaces team

Copy the download artifacts from the repository to the site (

set -e



# download file and hashes/signatures
function download() {

  curl --fail "${MAVEN_REPOSITORY}/${DIR}/${VERSION}/${FILE_ON_REPO}"      -o ${FILE}
  curl --fail "${MAVEN_REPOSITORY}/${DIR}/${VERSION}/${FILE_ON_REPO}.asc"  -o ${FILE}.asc
  curl --fail "${MAVEN_REPOSITORY}/${DIR}/${VERSION}/${FILE_ON_REPO}.md5"  -o ${FILE}.md5
  curl --fail "${MAVEN_REPOSITORY}/${DIR}/${VERSION}/${FILE_ON_REPO}.sha1" -o ${FILE}.sha1

# this performs check of the hashes (if this fails, something might went wrong absolutely)
function check() {

  echo "Checking file ${FILE}: "

  if ! diff --ignore-all-space "${FILE}" "${LOCAL_FILE}" ; then
    echo "Error: local identity check failed!"
    exit -1
  echo "  download matches local build"

  md5 -q "${FILE}" > "${FILE}.md5.temp"
  if ! diff --ignore-all-space "${FILE}.md5" "${FILE}.md5.temp" ; then
    echo "Error: MD5 check failed!"
    exit -1
  echo "  MD5 hash okay"

  shasum -a 1 "${FILE}" | cut "-d " -f1 > "${FILE}.sha1.temp"
  if ! diff --ignore-all-space "${FILE}.sha1" "${FILE}.sha1.temp" ; then
    echo "Error: SHA1 check failed!"
    exit -1
  echo "  SHA1 hash okay"

  if ! gpg --verify "${FILE}.asc" ; then
    echo "Error: GPG check failed!"
    exit -1
  echo "  GPG signature okay"

  # todo: change, if maven creates the sha256
  shasum -a 256 "${FILE}" > "${FILE}.sha256"
  echo "  SHA-256 created"


# this uploads the files into the svn dist repo
function upload() {

  for file in $(find . -type file -name "${PATTERN}" -exec basename \{\} \; ) ; do
    # echo $file;
    svn import -m "Tobago ${VERSON}" $file ${DIST_REPOSITORY}/${FOLDER}/$file;

# commands

download "org/apache/myfaces/tobago/tobago-assembly"         "tobago-assembly-${VERSION}-dist.tar.gz"            "myfaces-tobago-${VERSION}-dist.tar.gz"
download "org/apache/myfaces/tobago/tobago-assembly"         "tobago-assembly-${VERSION}"               "myfaces-tobago-${VERSION}"
download "org/apache/myfaces/tobago/tobago-example-assembly" "tobago-example-assembly-${VERSION}-example.tar.gz" "myfaces-tobago-${VERSION}-example.tar.gz"
download "org/apache/myfaces/tobago/tobago-example-assembly" "tobago-example-assembly-${VERSION}"    "myfaces-tobago-${VERSION}"
download "org/apache/myfaces/tobago/tobago"                  "tobago-${VERSION}"              "myfaces-tobago-${VERSION}"

check "myfaces-tobago-${VERSION}-dist.tar.gz"         ${LOCAL_BUILD}/tobago-${VERSION}/tobago-assembly/target/assembly/out/myfaces-tobago-${VERSION}-dist.tar.gz
check "myfaces-tobago-${VERSION}"            ${LOCAL_BUILD}/tobago-${VERSION}/tobago-assembly/target/assembly/out/myfaces-tobago-${VERSION}
check "myfaces-tobago-${VERSION}-example.tar.gz"      ${LOCAL_BUILD}/tobago-${VERSION}/tobago-example/tobago-example-assembly/target/assembly/out/myfaces-tobago-${VERSION}-example.tar.gz
check "myfaces-tobago-${VERSION}"         ${LOCAL_BUILD}/tobago-${VERSION}/tobago-example/tobago-example-assembly/target/assembly/out/myfaces-tobago-${VERSION}
check "myfaces-tobago-${VERSION}"  ${LOCAL_BUILD}/tobago-${VERSION}/target/tobago-${VERSION}

rm -f *.temp

upload "myfaces-tobago-${VERSION}-dist.*"           "binaries"
upload "myfaces-tobago-${VERSION}-example.*"        "binaries"
upload "myfaces-tobago-${VERSION}-source-release.*" "source"