howto_release.md 10 KB

How to release GRASS GIS binaries and source code

Note: Some steps in this text are to be done by the development coordinator (currently Markus Neteler, PSC Chair) due to needed logins.

HOWTO create a release

Preparations

Check examples if still compiling

( 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

See https://www.transifex.com/grass-gis/grass7/dashboard/

Exception Latvian as Latvian is directly edited in git and then sync'ed from master .po files

cd locale
sh ~/software/grass_addons_git/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

Update of configure base files

Only allowed in RC cycle, not for final release!

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
git diff config.guess config.sub
autoconf-2.13

Now check if configure still works.

If yes, submit to git:

git add config.guess config.sub configure
git checkout -b config_sub_update_r78
git commit -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

git push origin config_sub_update_r78
# open PR and merge

Cleanup leftover rubbish files

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:

git status

Create release branch (only if not yet existing)

.. see section below at end of file.

Update VERSION file to release version number

TODO: probably better done in GH interface?!

vim include/VERSION

#example:
7
8
0RC1
2019

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

Create release tag

See https://help.github.com/en/articles/creating-releases

Done in GH interface.

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

git checkout -b release_GRASS_GIS_$VERSION
git add include/VERSION
git commit -m"GRASS GIS $VERSION" include/VERSION
git push origin release_GRASS_GIS_$VERSION

# Create Changelog file on release branch:
python tools/gitlog2changelog.py
mv ChangeLog ChangeLog_$VERSION
head ChangeLog_$VERSION
gzip ChangeLog_$VERSION

TODAY=`date +"%Y%m%d"`
RELEASETAG=release_${TODAY}_grass_${MAJOR}_${MINOR}_${RELEASE}
echo $RELEASETAG

Tag release (on GitHub)

echo "grass_$VERSION"

Do this in https://github.com/OSGeo/grass/releases/new

Packaging of source code tarball

TODO: add checkout of code via release tag

# 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-vcs 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 git version:

TODO: probably better done in GH interface

vim include/VERSION

#example
7
8
0dev
2019

rm -f include/VERSION~
git checkout -b back_to_git_dev
git add include/VERSION
git commit -m"back to git" include/VERSION
git push origin back_to_git_dev
# open PR and merge

Upload source code tarball to OSGeo servers

# 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 at 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

Release is done.

Advertise new release

Update CMS web site to show new version

TODO: git tags

Write announcement and publish it

Only when new major release

WinGRASS notes

  • Update grass_packager_release.bat, eg. set MAJOR=7 set MINOR=8 set PATCH=0RC1
  • Update addons (grass_addons.sh) rules, eg. compile $GIT_PATH/grass7 $GISBASE_PATH/grass780RC1 $ADDON_PATH/grass780RC1/addons
  • Modify grass_copy_wwwroot.sh accordingly, eg. copy_addon 781RC1 7.8.1RC1

Launchpad notes:

Packaging notes:

Marketing - tell others about release: