Instructions for making an Antlib Release:

Authors: Conor MacNeill
         Stefan Bodewig
         Magesh Umasankar
         Antoine Levy-Lambert

Note: this document is based on Ant core's ReleaseInstructions file
      <http://svn.apache.org/repos/asf/ant/core/trunk/ReleaseInstructions>
      and adapted while Stefan was preparing the 1.5 release of the
      Compress Antlib

1.  Propose a release plan for vote.  This should set out the timetable for
    the release under ideal circumstances.

2.  The Ant release instructions say you should create a branch at
    the freeze date.  In the case of the Antlibs (and maybe in general) it
    may be simpler and more convenient to delay the creation of a
    branch until you want to start new development in trunk.

3.  We don't want tags for failed votes to end up on our branches so
    the release is first created from a detached head.

    Checkout the HEAD of the master branch as a detached head:

    $ git checkout master^0

4.  Make sure that your directory tree is clean by running git status.
    Some tests leave behind leftovers which end up in the source
    distribution otherwise.

5.  Create a file version.properties in the projects root dir or
    edit it if it already exists.  Change the value of property
    artefact.version to 1.0Beta1.

    [[ TODO: Check if the documentation files also need to be updated to point
    to the right areas of Ant's website. ]]

6.  Before a build :

    the artefact.version property in version.properties governs the naming of
    the distribution files.

    Update the following files for version number:

            * docs/index.html
            * version.properties (artefact.version property)

    Fix the release date inside changes.xml.

        Commit your changes.

7.  Ensure you have all the external libraries that the Antlib uses
    available to your build.

8.  Next build and run the tests.  Then build the distribution.  It is
    important that this be a clean build.

    $ ant clean antlib
    $ ant test -lib DEPENDENCIES_OF_YOUR_LIBRARY -lib ANTUNIT \
        -lib build/lib/YOUR_LIBRARY

    To build the distribution run the distribution target or the
    fat-distribution target if you intend to create a binary
    distribution that also contains all dependencies.
    To build the mvn artifacts run the prepare-upload target.

9.  Create a tag, push all changes.

    $ git tag -s -m "Tagging RC1 for version 1.5 of Compress Antlib" 1_5_RC1
    $ git push --tags

10. Sign the distribution files using the following simple script
    #!/bin/sh
    for i in `/usr/bin/find distribution \( -name "*.bz2" -o -name  "*.zip" -o -name "*.gz" \)`
    do
         echo "Signing " $i
         gpg --use-agent --detach-sign --armor $i
    done
    for i in `/usr/bin/find build/java-repository -type f`
    do
         echo "Signing " $i
         gpg --use-agent --detach-sign --armor $i
    done

    Before you do that, ensure that the key you use is inside the KEYS
    file in Ant's svn repository - and that you perform an svn update on
    the KEYS file in /www/www.apache.org/dist/ant/

    Also make sure you have sent the key that you use to a public
    keyserver.

11. The distribution is now ready to go. Check in all your
    distribution files to
    https://dist.apache.org/repos/dist/release/ant/antlibs/ANTLIB

    To upload mvn artifacts to the Nexus repository manager run

    ant upload -Dupload.user=YOUR-ASF-ID -Dupload.password=SVN-PASSWORD

    Before others can see the artifacts you've uploaded, you need to
    close the staging repository that has just been created.
    See http://www.apache.org/dev/publishing-maven-artifacts.html#close-stage

    Nexus will create .md5 and .sha1 files for your .asc signatures
    that can savely be deleted via
    https://repository.apache.org/index.html#stagingRepositories
    (log in using your ASF credentials).







12. This step may become meaningful once you do a second release ;-)

    Copy the file README.html from dist-bin to
    https://dist.apache.org/repos/dist/dev/ant/antlibs/ANTLIB as
    RELEASE-NOTES-x.y.z.html.

13. Once this is uploaded and committed call for a release vote on
    dev@ant.  The vote will only pass if at least three PMC members
    have voted +1 and more +1s than -1s have been cast.  The vote will
    run for a week.

14. Once the vote has passed, push the release and RELEASE-NOTES files
    into the release directory.

    The files should go to
    https://dist.apache.org/repos/dist/release/ant/antlibs/ANTLIB

    You can (sparsely) check out https://dist.apache.org/repos/dist
    and perform the "svn mv" operation there or build up a pretty long
    svnmucc command line to move all files from dev to release with a
    single commit.

15. Address the available release tags in BugZilla. Create a new tag 1.0Beta1
    and a 1.1Alpha. Assign all existing 1.0 alpha bugs to one of these release
    labels. Note that such massive changes can be done at once by choosing the
    link "Change several bugs at once" at the bottom of the bug list
    displaying the 1.0alpha bugs.

16. Once that is done, do a test download to make sure everything is OK. A
    common problem may be:
    * the file's mime type is not recognized and is interpreted as
      text/plain.  Fix it by using some .htaccess magic (AddEncoding stuff)
    * Your gz.asc files are not being displayed properly (RemoveEncoing stuff)

    If it looks OK, announce it on dev@ant and user@ant. After a few
    days pass and there are no major problems, a wider announcement is
    made (ant website, main jakarta website, announce@apache.org,
    etc).

    Announce beta releases at freshmeat.net.

17. As problems in the beta are discovered, there may be a need for
    one or more subsequent betas. The release manager makes this
    call. Each time, the versions are updated and the above process is
    repeated. Try not to have too many betas.

18. Try to advertise the need for testing of the betas as much as possible.
    This would eliminate the need to release minor patch versions like
    we had to do when releasing Ant 1.4.

    To monitor the number of downloads, look at the access_log
    file under /usr/local/apache2/logs

19. When the final beta is considered OK, propose a vote on dev@ant to
    officially adopt the latest beta as the new release. If it is passed,
    (it usually does,) this would be labelled 1_0 and built in a similar
    fashion to the above process.

    Remember to edit the file changes.xml to contain the proper
    release version and date.

20. BUT

    This time you'll have to do some house-keeping for the old release:

    * remove the beta release files

    Publish the Maven artifacts to the central repository: 

    * Log in to
      https://repository.apache.org/index.html#stagingRepositories
      using your ASF credentials.

    * select the staging repository holding your artifacts.

    * Promote it
      <http://www.apache.org/dev/publishing-maven-artifacts.html#promote>

    (**)

21. Clean up.

    * remove the remaining files of the previous release from
      https://dist.apache.org/repos/dist/release/ant/antlibs/ANTLIB
      This includes the old release notes.

22. If you've created a branch, now and perhaps during previous betas
    any changes on the branch must be merged back into the tree.

23. At this point in time, the release is done and announcements are made.
    PGP-sign your announcement posts.

    [[TODO: Identify the mailing lists where announcements are to be made.
      Also identify the webpages to which the announcements must go. ]]

    Apache mailing lists that should get the announcements:
    announce@apache.org, dev@ant and user@ant.

    Announce release at freshmeat.net

24. Add a new release tag to doap_*.rdf in the AntLib's trunk.

25. You can now reacquaint yourself with your family and friends.

(**) Mirrors : the srcdownload.html and bindownload.html each list a number of
     mirrors. For ant 1.6.0 the mirrors picked up the new version in 8 hours
     or less, the release having been done at midnight on Dec 18th, the
     mirrors had it on Dec 19th at 8 am. The srcdownload/bindownload pages both
     contain a note advising users to be patient immediately after the release.

Related Information

http://www.apache.org/dev/release-publishing.html
http://jakarta.apache.org/commons/releases/
http://wiki.apache.org/jakarta-commons/SigningReleases

