
                         Project Maintanance Howto
                         -------------------------
                     
This document introduces newcomers to the management and maintenance of 
the Batik project hosted under xml.apache.org (http://xml.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) update the splash screens:
    build splash

 3) commit the updated splash screens into CVS:
    cvs commit xdocs/images/splash.png  xdocs/images/splash.svg
    cvs commit resources/org/apache/batik/apps/svgbrowser/resources/squiggle.png

 4) tag the release on CVS:
      cvs rtag <tag> <module>
      e.g., cvs rtag batik-1_1rc3 xml-batik. 
    Note: sometimes, it is necessary to remove a tag because the 
    tests failed and a fix was required. To remove a tag, use
    the rtag command:
      cvs rtag -d <tag> <module>
      e.g., cvs rtag -d batik-1_1rc3 xml-batik

 5) checkout the tagged release:
      cvs co -r <tag> xml-batik
      e.g., cvs co -r batik-1_1rc3 xml-batik

 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 xml-batik/test-reports. 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 file describing the content of the release and
    the modifications which have taken place:
    http://xml.apache.org/batik/dist/README 

 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

    - scp the distributions and the README under /www/xml.apache.org/dist/batik/
    e.g., scp batik-1.1rc1.zip vhardy@xml.apache.org:/www/xml.apache.org/dist/batik/

10) 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) make sure you checked out the module "xml-site" in the same directory
    as your project module
 2) run the build script with target "site"
 3) commit the xml-site/targets/[project] directory
 4) connect to xml.apache.org with your account
 5) execute "cd /www/xml.apache.org/[project]"
 6) execute "cvs update"
 
[NOTE: you must have commit access on xml-site to be able to do this]

