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 main/master branch as a detached head:

    $ git checkout master^0

    or

    $ git checkout main^0

    depending on the name of your default branch.

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" -o -name "*.cdx.json" -o -name "*.cdx.xml" \)`
    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 https://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 TAG_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 2 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 (in
    production/antlib/ANTLIB)

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

