How to release GRASS GIS binaries and source code $Date: 2019-04-07 19:24:00 +0000 (Sun, 07 Apr 2019) $ Note: This text contains *some* rules only applicable to the development coordinator (currently Markus Neteler, PSC Chair). ########################################### Contents (A) HOWTO create a release (B) HOWTO create a branch ########################################### (A) HOWTO create a release 0. Preparations #check if still compile; fix otherwise ( cd doc/raster/r.example/ ; make clean ; make ) ( cd doc/vector/v.example/ ; make clean ; make ) # fix typos in source code with tools/fix_typos.sh # i18N: sync from Transifex (https://www.transifex.com/grass-gis/grass7/dashboard/) # - except for Latvian; Latvian is directly edited in SVN and then sync'ed from trunk .po files cd locale sh ~/software/grass-addons/tools/transifex_merge.sh make make verify # ... then fix .po files as needed. # # requires https://trac.osgeo.org/grass/ticket/3539 ## after that push fixes to transifex: #cd locale/transifex/ #tx --debug push -t #### end of i18N 1. Local work # done by release manager # Only allowed RC cycle, not final!: # Check that autoconf scripts are up-to-date: rm -f config.guess config.sub wget http://git.savannah.gnu.org/cgit/config.git/plain/config.guess wget http://git.savannah.gnu.org/cgit/config.git/plain/config.sub svn diff config.guess config.sub autoconf-2.13 # check and submit to SVN: svn ci -m"config.guess + config.sub: updated from http://git.savannah.gnu.org/cgit/config.git/plain/" config.guess config.sub configure # test by running ./configure # update from SVN svn up # cleanup rubbish: rm -f locale/templates/*.pot rm -f locale/po/messages.mo rm -f demolocation/PERMANENT/.bash* 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 find . -name '*.pyc' | xargs rm find . -name 'OBJ.*' | xargs rm -r rm -f gui/wxpython/menustrings.py gui/wxpython/build_ext.pyc gui/wxpython/xml/menudata.xml gui/wxpython/xml/module_tree_menudata.xml chmod -R a+r * # double check svn status --no-ignore svn status # Create release branch (only if not yet existing) # ... see below # Update VERSION file to release version: vim include/VERSION #example: 7 4 1RC1 2018 # cleanup rm -f include/VERSION~ # Update OSGeo4W setup.hint file ### no longer needed #vim mswindows/osgeo4w/setup_x86.hint.tmpl #vim mswindows/osgeo4w/setup_x86_64.hint.tmpl #### Changelog and tagging etc # create version env var for convenience: 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 svn ci -m"GRASS GIS $VERSION" include/VERSION svn up # Create Changelog file on release branch: # https://arthurdejong.org/svn2cl/ svn2cl mv ChangeLog ChangeLog_$VERSION head ChangeLog_$VERSION gzip ChangeLog_$VERSION # Tag release (http://trac.osgeo.org/grass/browser/grass/tags): # see http://svnbook.red-bean.com/en/1.4/svn.branchmerge.tags.html TODAY=`date +"%Y%m%d"` RELEASETAG=release_${TODAY}_grass_${MAJOR}_${MINOR}_${RELEASE} echo $RELEASETAG URL=https://svn.osgeo.org/grass svn copy $URL/grass/branches/releasebranch_7_4 \ $URL/grass/tags/$RELEASETAG \ -m "Tagging release grass_${MAJOR}_${MINOR}_${RELEASE}" # create source package (in the source directory): echo grass-${VERSION} mkdir grass-${VERSION} mv * grass-${VERSION}/ # create the package: tar cvfzh grass-${VERSION}.tar.gz --exclude=.svn grass-${VERSION}/* # restore src code location: mv ./grass-${VERSION}/* . rmdir ./grass-${VERSION} # Calculating MD5 sum: md5sum grass-${VERSION}.tar.gz > grass-${VERSION}.md5sum # reset include/VERSION file to SVN version: vim include/VERSION #example 7 4 1svn 2018 rm -f include/VERSION~ svn ci -m"back to SVN" include/VERSION # Store the source tarball (twice) in (use scp -p FILES grass:): SERVER1=grass.osgeo.org SERVER1DIR=/var/www/grass/grass-cms/grass$MAJOR$MINOR/source/ SERVER2=upload.osgeo.org SERVER2DIR=/osgeo/download/grass/grass$MAJOR$MINOR/source/ echo $SERVER1:$SERVER1DIR echo $SERVER2:$SERVER2DIR # upload along with associated files: scp -p grass-$VERSION.* AUTHORS COPYING ChangeLog_$VERSION.gz \ INSTALL REQUIREMENTS.html SUBMITTING neteler@$SERVER1:$SERVER1DIR scp -p grass-$VERSION.* AUTHORS COPYING ChangeLog_$VERSION.gz \ INSTALL REQUIREMENTS.html SUBMITTING neteler@$SERVER2:$SERVER2DIR # Only full release! # generate link to "latest" source code ssh neteler@$SERVER1 "cd $SERVER1DIR ; rm -f grass-$MAJOR.$MINOR-latest.tar.gz" ssh neteler@$SERVER1 "cd $SERVER1DIR ; ln -s grass-$VERSION.tar.gz grass-$MAJOR.$MINOR-latest.tar.gz" # update winGRASS related files: Update the winGRASS version vim grass-addons/tools/wingrass-packager/grass_packager_release.bat vim grass-addons/tools/wingrass-packager/grass_addons.sh vim grass-addons/tools/wingrass-packager/grass_copy_wwwroot.sh vim grass-addons/tools/wingrass-packager/cronjob.sh # major/minor release only # update addons - major/minor release only vim grass-addons/tools/addons/grass-addons-publish.sh vim grass-addons/tools/addons/grass-addons-build.sh vim grass-addons/tools/addons/grass-addons.sh ################### # update web site to new version: CMS - News section - https://grass.osgeo.org/download/software/ - https://grass.osgeo.org/download/software/sources/ - https://grass.osgeo.org/download/software/linux/ - https://grass.osgeo.org/home/history/releases/ - https://grass.osgeo.org/development/svn/svn-tags/ (add tag): echo $RELEASETAG # write announcement - store in trac: https://trac.osgeo.org/grass/wiki/Release/7.6.x-News https://trac.osgeo.org/grass/wiki/Grass7/NewFeatures76 <- add content of major changes only - update version in https://grasswiki.osgeo.org/wiki/GRASS-Wiki - store in Web as announces/announce_grass$MAJOR$MINOR$RELEASE.html <- how? with protected PHP upload page? (dropped since CMS) # only when new major release # update cronjob 'cron_grass_HEAD_src_snapshot.sh' on grass.osgeo.org to next but one release tag for the differences # wiki updates, only when new major release: - {{cmd|xxxx}} macro: https://grasswiki.osgeo.org/wiki/Template:Cmd - update last version on main page # trac updates, only when new major release: - Add new release to https://trac.osgeo.org/grass/admin/ticket/versions - Set "complete" flag in https://trac.osgeo.org/grass/milestone/7.6.x --> Edit Milestone - also: Retarget associated open tickets to milestone 7.6.x - Batch modify tickets, set to next milestone (update this query accordingly: two entries to change) https://trac.osgeo.org/grass/query?status=assigned&status=new&status=reopened&milestone=7.6.0&milestone=7.6.1&group=status&col=id&col=summary&col=owner&col=type&col=priority&col=component&col=version&order=priority - Set max items to 1000, then select all shown tickets via Status: assigned/new/reopened sections - Scroll down to "Batch modify": under the "Comment" section, add Field "Milestone" and set to next version - then use "Change ticket" button, done. - Only in case of new release branch being created: - Add Wiki Macro definitions for manual pages G7X:modulename - Edit: https://trac.osgeo.org/grass/wiki/InterMapTxt # WinGRASS notes: - Update grass_packager_release.bat, eg. set MAJOR=7 set MINOR=4 set PATCH=1RC1 - Update addons (grass_addons.sh) rules, eg. compile $SVN_PATH/grass7 $GISBASE_PATH/grass760RC1 $ADDON_PATH/grass760RC1/addons - Modify grass_copy_wwwroot.sh accordingly, eg. copy_addon 761RC1 7.6.1RC1 # Launchpad notes: - Create milestone and release: https://launchpad.net/grass/+series - Upload tarball for created release - Update daily recipe contents: https://code.launchpad.net/~grass/+recipe/grass-trunk # Packaging notes: https://trac.osgeo.org/grass/wiki/BuildHints - https://trac.osgeo.org/grass/wiki/DebianUbuntuPackaging - https://trac.osgeo.org/grass/wiki/CompileOnWindows ############ # Marketing - tell others about release: * Notify all packagers (MN has email list) * If release candidate: - - * 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://lists.osgeo.org/mailman/listinfo/grass-announce http://lists.osgeo.org/mailman/listinfo/grass-dev http://lists.osgeo.org/mailman/listinfo/grassuser DebianGIS: - send only small note FreeGIS: Geowanking: OSGeo.org: Email: info@osgeo.org http://www.gis-news.de/ (franz-josef.behr@gismngt.de) http://spatialnews.geocomm.com/submitnews.html (not free any more, convince editor@geocomm.com) mfeilner@linuxnewmedia.de info@harzer.de editor-geo@geoconnexion.com Web: https://plus.google.com/u/0/communities/111147786674687562495 (G+ GRASS GIS community) http://linuxtoday.com/contribute.php3 https://joinup.ec.europa.eu/software/grassgis/home (submit news, MN) http://www.macnn.com/contact/newstips/1 http://www10.giscafe.com/submit_material/submit_options.php#Press (MN) --> Press releases http://www.directionsmag.com/pressreleases/ (News -> Submit Press Release) http://directory.fsf.org/wiki/GRASS_%28Geographic_Resources_Analysis_Support_System%29 https://www.linux-apps.com/p/1128004/edit/ (MN) https://news.eoportal.org/web/eoportal/share-your-news (MN) -> Share your news with the EO community https://www.heise.de/download/product/grass-gis-7105 (update, MN) See also: https://grass.osgeo.org/wiki/Contact_Databases ... anywhere else? Please add here. ########################################### (B) HOWTO create a branch 1. see SVN book: http://svnbook.red-bean.com/en/1.1/ch04s07.html GRASS 7.6 release branch: # see below for real example # BRANCH=releasebranch_7_6 # URL=https://svn.osgeo.org/grass # svn copy $URL/grass/trunk \ # $URL/grass/branches/$BRANCH \ # -m "Release branch for GRASS 7.6.x" Branch creation example: GRASS GIS 7.6 release branch creation svn copy https://svn.osgeo.org/grass/grass/trunk/ \ https://svn.osgeo.org/grass/grass/branches/releasebranch_7_6 \ -m "Release branch for GRASS GIS 7.6.x" ---------- Switching current local copy to above development branch: (http://svnbook.red-bean.com/en/1.1/ch04s05.html) cd /path/to/your/local/copy/trunk svn switch https://svn.osgeo.org/grass/grass/branches/releasebranch_7_6 .