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
      <https://gitbox.apache.org/repos/asf?p=ant.git;a=blob;f=ReleaseInstructions>
      and adapted while Stefan was preparing the 1.4 release of AntUnit

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

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

