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
    artifact.version to 1.4.

    [[ 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 artifact.version property in version.properties governs the naming of
    the distribution files.

    Update the following files for version number:

            * docs/index.html
            * version.properties (artifact.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

    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.

    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. Once this is committed send a release vote email on dev@ant.
    The email will typically mention :
       - the git tag for the release including commit hash,
       - the location of the tarballs, including revision number in
         dist.apache.org repository
       - the URL for the maven artifacts
       - pointers to the KEYS file containing the key used to sign the artifacts

    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 3 days.


13. 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.

    Tag the last RC created with the final tag

    $ git tag -s -m "Tagging version 1.5 of Compress Antlib" rel/1.5 HASH_OF_LAST_RC
    $ git push --tags

    release the maven artifacts using the web interface of nexus under
    https://repository.apache.org
      - login using your Apache credentials
      - in the left pane, below "build promotion", click on the
        "Stagings Repositories" links
      - expand org.apache.ant
      - select the checkbox next to the upload that you just did
      - and click the button "Release".
    About 4 hours later, the artifacts will be in the maven central repository.

14. Update the Apache Reporter System

    https://reporter.apache.org/addrelease.html?ant

15. Address the available version tags in BugZilla. Create new
    milestone 1.6 and version 1.5.

    Most likely they already exist because of Ant itself.

16. Add a new release tag to doap_*.rdf in Ant's site.

17. checkout the master branch, merge the tag but don't push the
    commit

    Update the following files for version number ([newversion]alpha):

            * docs/index.html (if there is a version number)
            * version.properties (artefact.version property)
            * changes.xml (add new section)

18. wait a few hours for the mirrors to catch up

19. Update the ant.apache.org site :

    The website is managed here: https://svn.apache.org/repos/asf/ant/site/ant/

    Update the following files for version number:

    * source/antnews.xml (Announcement)
    * source/index.xml (Announcement, latest release details, link to
    manual under "Documentation")
    * source/antlibs/proper.xml
    * source/antlibs/srcdownload.xml
    * source/antlibs/bindownload.xml
    * source/antlib/ANTLIB/index.xml and other antlib specific pages

    Generate the html files by invoking 'ant'
    Commit the modified/generated files in the 'production' folder, it will go
    live on ant.apache.org in a matter on seconds.

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

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

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

22. After a few days "svn rm" the older release artifacts and release
    notes from https://dist.apache.org/repos/dist/release/ant/

Related Information

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

