
                         Project Maintanance Howto
                         -------------------------
                     
This document introduces newcomers to the management and maintenance of 
the Batik project hosted under xmlgraphics.apache.org
(http://xmlgraphics.apache.org/batik).

Each project is required to use Ant as build tool and to be coherent with the
rest of the build systems of the other projects, so that nightly builds and
distribution creation can be done automatically without per-project scripts.

This implies it is *very* important that properties names are not changed
but kept consistent with the other projects.

Distribution Creation
---------------------

For creating a distribution the following steps must be done:

 1) Modify build.xml with the distribution version. Only modify the version 
    for main releases (e.g. version value="1.1") but not for release 
    candidates or beta versions where only the revision type and
    number should be updated (e.g. revisionType value="beta" and
    revisionNumber value="3")

 2) Add your public key to the KEYS file in the root directory of
    Batik if it isn't already there.  The following link has the
    details on what this means and how to do it.

      http://wiki.apache.org/old/SigningReleases

 3) Commit these changes to SVN, in general only the following files
    should be modified:

      build.xml
      KEYS

 4) Tag the release on SVN:

      svn copy https://svn.apache.org/repos/asf/xmlgraphics/batik/trunk \
               https://svn.apache.org/repos/asf/xmlgraphics/batik/tags/<tag>

    where <tag> is the version name, e.g. "batik-1_1rc3".

    Note: sometimes, it is necessary to remove a tag because the 
    tests failed and a fix was required. To remove a tag, use
    the delete command:

      svn delete https://svn.apache.org/repos/asf/xmlgraphics/batik/tags/<tag>

 5) Check out the tagged release to a new directory:

      svn co https://svn.apache.org/repos/asf/xmlgraphics/batik/tags/<tag>

 6) Run the build script with target "dist-zip":

      build dist-zip 

    This will create the binary release zip, the source release zip and the
    javadoc zip.

 7) Test the distributions

      build regard
      build regard.manual

    The build results are in the test-reports directory. Check that there
    are no show-stoppers for the release. If there are fixes required,
    you need to remove the tag (as explained in step 2) and then fix
    any problem that requires attention. Then, you need to start at
    step 1) again.

    Note that you will need to have a copy of the W3C SVG 
    working group test suite in the 'beSuite' directory and
    have that directory under the same root as xml-batik. See
    http://www.w3.org/Graphics/SVG for instructions on how to get
    the SVG test suite.

 8) Update the README and CHANGES files describing the content of the
    release and the modifications which have taken place,
    http://www.apache.org/dist/xmlgraphics/batik/README.  This file has a
    small header followed by the contents of the CHANGES file from the
    distribution.

 9) If you are creating a release candidate, rename the distribution files
    to an rc name. For example:

      mv batik-src-1.1.zip batik-src-1.1rc1.zip

10) Sign and create md5 hashes for the releases. The following link
    has full details on how to sign things (if you don't want to know
    anything the last section 'Using GPG' tells you what commands work).

        http://wiki.apache.org/old/SigningReleases

    For example:

      gpg --detach-sig --armor --output batik-1.5.zip.asc batik-1.5.zip
      md5 batik-1.5.zip > batik-1.5.zip.md5

11) Use 'scp' to copy the distributions (with md5 hashes, and signature 
    files), the README, and the KEYS file under 

        /www/www.apache.org/dist/xmlgraphics/batik/

    For example:
    
      scp batik-1.1rc1.zip* vhardy@people.apache.org:/www/www.apache.org/dist/xml/batik/

12) Finish setting up the distribution directory in accordance with:

      http://www.apache.org/dev/mirrors.html
      http://people.apache.org/~bodewig/mirror.html
    
    This makes sure that the distribution is mirrored nicely around
    the world.

    Start by logging into svn.apache.org (e.g. 'ssh vhardy@svn.apache.org').

    First make sure file permissions are correct.  The
    new files should be owned by group 'xmlgraphics' and be group writable.
    The following commands can do this (don't worry about links):

       chgrp xmlgraphics batik-1.5.zip
       chmod 664 batik-1.5.zip

    If you are making a 'final' release you should delete the existing
    'current' links and re-point them at the new release (do this
    for every file with a version number in it - including md5, and
    asc files):

       cd /www/www.apache.org/dist/xmlgraphics/batik
       rm batik-current.zip
       ln -s batik-1.5.zip batik-current.zip
       rm batik-current.zip.md5
       ln -s batik-1.5.zip.md5 batik-current.zip.md5
       rm batik-current.zip.asc
       ln -s batik-1.5.zip.asc batik-current.zip.asc
       <- lots more files ->

    Finally remove the old releases (every release is automatically copied 
    to 'archive.apache.org/dist/xmlgraphics/batik' from
    'www.apache.org/dist/xmlgraphics/batik' so you can just remove an old
    release from www.apache.org:

       rm batik-1.5b4.zip

13) Wait approximately 24hrs for the files to get to all the mirrors,
    then send an email to the batik-dev and batik-users mailing lists
    announcing the release.

Site Creation
-------------

For creating the web site, the following steps must be done:

[Note: due to JVM font-rendering problems, this is best done on a
       windows machine]

 1) run the build script with target "publish", which will generate the
    site and use ForrestBot to commit it to the repository
 2) connect to people.apache.org with your account
 3) execute "cd /www/xmlgraphics.apache.org/batik"
 4) execute "svn update"
 
If the javadocs don't need to be regenerated, the "publishdoc" build
target can be used instead of "publish".  This will be much quicker.

Note that because of the way ForrestBot works, any files that are no
longer part of the site will still remain in Subversion, and thus will
still be deployed.  To delete files permanently, check out
https://svn.apache.org/repos/asf/xmlgraphics/site/deploy/batik/ and make
changes there directly.

Nightly Builds
--------------

The nightly builds are current performed by a crontab entry in
Thomas DeWeese's people.apache.org account: /home/deweese/bin/nightly.csh
