How to release GRASS binaries and source code

$Date: 2007/07/16 08:01:15 $

Note: This text contains *some* rules only applicable to the
      development coordinators at ITC-irst (currently Markus Neteler).


###########################################
Contents
  (A) HOWTO create a release
  (B) HOWTO create a branch

###########################################
(A) HOWTO create a release

1. Local work (basically at ITC-irst)

   - check if
        doc/raster/r.example/
        doc/vector/v.example/
      still compile; fix otherwise

   - cleanup rubbish:
       find . -name '*~'     | xargs rm
       find . -name '*.bak'  | xargs rm
       find . -name '.#*'    | xargs rm
       find . -name '*.orig' | xargs rm
       find . -name '*.rej'  | xargs rm
       find . -name '*.o'    | xargs rm
       chmod -R a+r *

   - Create release branch (only if not yet existing)

   - Update VERSION file to release version:
      vim include/VERSION

#example:
6
2
0RC1
2006
      rm -f include/VERSION~

   - submit include/VERSION to CVS
   - cvs up -dP

 o Create Changelog file
     CVSBRANCH=`cat CVS/Entries | grep AUTHORS | cut -d'/' -f6 | cut -b2-`
     echo $CVSBRANCH
     #version:
     MAJOR=`cat include/VERSION | head -1 | tail -1`
     MINOR=`cat include/VERSION | head -2 | tail -1`
     RELEASE=`cat include/VERSION | head -3 | tail -1`
     VERSION=${MAJOR}.${MINOR}.${RELEASE}
     echo $VERSION
     #create ChangeLog on release branch:
     sh tools/cvs2cl.pl --follow "$CVSBRANCH"
     mv ChangeLog ChangeLog_$VERSION
     gzip ChangeLog_$VERSION

 o   Tag release:
          echo release_`date +"%Y%m%d"`_grass_${MAJOR}_${MINOR}_${RELEASE}

          cvs tag release_`date +"%Y%m%d"`_grass_${MAJOR}_${MINOR}_${RELEASE}

 o create source package (in the source directory):
     echo grass-${VERSION}

     mkdir grass-${VERSION}
     mv * grass-${VERSION}/
     # do not include the debian control files:
     mv grass-${VERSION}/debian .
     # create the package:
     tar cvfzh grass-${VERSION}.tar.gz grass-${VERSION}/* --exclude=CVS
     # restore src code location:
     mv ./grass-${VERSION}/* .
     rmdir ./grass-${VERSION}
     # Calculating MD5 sum:
     md5sum grass-${VERSION}.tar.gz > grass-${VERSION}.md5sum

 o reset include/VERSION file to CVS version

#example
6
2
0cvs
2006


 o Store the source tarball in (use scp -p FILES grass:):
     http://grass.itc.it/grass/grass$MAJOR$MINOR/source/
   along with associated files:
     scp grass-$VERSION.* AUTHORS COPYING ChangeLog_$VERSION.gz INSTALL REQUIREMENTS.html SUBMITTING SUBMITTING_TCLTK SUBMITTING_SCRIPTS neteler@grass.itc.it:www/grass$MAJOR$MINOR/source/

 o update web site to new version (HTML in Web-CVS)
      - rss.xml (for news section)
      - download/software.inc
      - grass$MAJOR$MINOR/main.inc
      - devel/grasshist.html
      - devel/grassreleases.html
      - bugtracking/bugreport.html (not always)
      - devel/cvstags.inc (add tag)

     write announcement
      - store in Web as announces/announce_grass$MAJOR$MINOR$RELEASE.html

 o upload user HTML manual in case of *final release* from compiled English
   version at (warning: needs stuff to be compiled, but include/VERSION set
   back temporarily!!):
     cd dist.$ARCH/docs/html
     scp * neteler@grass.itc.it:www/grass$MAJOR$MINOR/manuals/html$MAJOR${MINOR}_user/

2. Tell others about it:

 * If release candidate:
    - <grass-announce@grass.itc.it>
    - <grass-dev@grass.itc.it>

 * If official release:
   - publish related announcement press release at:
   
   Our GRASS web site: /announces/
                       Note: DON'T use relative links there

   Our main mailing lists:
                       http://grass.itc.it/mailman/listinfo/grass-announce
                         <grass-announce@grass.itc.it>
                       http://grass.itc.it/mailman/listinfo/grass-dev
                         <grass-dev@grass.itc.it>
                       http://grass.itc.it/mailman/listinfo/grassuser
                         <grassuser@grass.itc.it>
                       http://grass.itc.it/mailman/listinfo/wingrass
                         <wingrass@grass.itc.it>

   DebianGIS:          <pkg-grass-general@lists.alioth.debian.org>
   FreeGIS:            <freegis-list@intevation.de>
   Geowanking:         <geowanking@lists.burri.to>
   OSGeo.org:          <announce@mail.osgeo.org> + <discuss@mail.osgeo.org>
                       at https://mail.osgeo.org/servlets/ProjectMailingListList
                       <news_item@osgeo.org>
                       http://grass.osgeo.org (is fed through <grass-announce@grass.itc.it>)

 Email:
   http://www.gismonitor.com/news/submit_news.php (matteo@gismonitor.com)
   http://www.gis-news.de/  (news@gismngt.de)
   http://www.gisdevelopment.net (news@gisdevelopment.net)
   http://spatialnews.geocomm.com/submitnews.html (not free any more, convince editor@geocomm.com)
   admin@cartographyonline.com
   redazionenews@mondogis.net

 Web:
   http://slashgeo.org/submit.pl
   http://freshmeat.net/projects/grass/?highlight=GRASS (update, MN)
   http://linuxtoday.com/contribute.php3
   http://www.newsforge.com/submit.pl
   http://osx.macnn.com/    (email to "contact" -> news tips)
   http://www.giscafe.com/submit_material/submit_options.php#Press (MN)
   http://www.freegis.org   (update, MN)
   http://www.directionsmag.com/pressreleases.php (News -> Post Press Release)
   http://www.gnu.org/directory/science/geography/grass.html
   http://www.kde-apps.org/content/show.php?content=19776
   http://news.eoportal.org/cgi-bin/eoportal_header.pl?dw=psr&site=software&words=type (MN)
            -> Share your news with the EO community
   http://www.osdir.com/Downloads+index-req-viewsdownload-sid-206.phtml
   http://www.foss4g.org/FOSS4G/modules.php?name=Submit_News
   http://groups.google.com/group/Remote-Sensing-GIS-for-a-New-World
   http://groups.google.com/group/comp.infosystems.gis

   ... anywhere else? Please add here.

###########################################
(B) HOWTO create a branch

1. update from CVS into clean directory

2. create the branch:

BRANCH="releasebranch_6_1"
cvs tag -b $BRANCH

3. checkout the branch into new directory:

yourcvsid=markus
export CVSROOT=:ext:$yourcvsid@grasscvs:/grassrepository
cvs -z3 checkout -r $BRANCH grass6


4. Take care that relevant HEAD changes are backported.

5. For releasing beta1,..betaN, RC1..RCN, follow the
   standard release rules.

