Skip to content

Latest commit

 

History

History
365 lines (289 loc) · 11.2 KB

howto_release.md

File metadata and controls

365 lines (289 loc) · 11.2 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_r76
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_r76
# 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 '*.swp'  | 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
find . -name '__pycache__' | 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

Directly edit VERSION file in GH interface:

https://github.com/OSGeo/grass/blob/releasebranch_7_6/include/VERSION

Example:

7
6
2RC2
2019

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)

Preparation:

Changelog and tagging etc

# update from GH
#  assumptions:
#  - own fork as "origin"
#  - remote repo as "upstream"
git fetch --all --prune && git checkout releasebranch_7_6 && \
 git merge upstream/releasebranch_7_6 && git push origin releasebranch_7_6

# 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

# RELEASETAG variable not really needed any more:
TODAY=`date +"%Y%m%d"`
RELEASETAG=release_${TODAY}_grass_${MAJOR}_${MINOR}_${RELEASE}
echo $RELEASETAG

Tag release (on GitHub)

echo "$VERSION"

To be done in GH interface:

https://github.com/OSGeo/grass/releases/new

Tag version | target (examples): 7.6.1RC2 | releasebranch_7_6

Add release desciption (re-use existing texts as possible)

If RC, then check [x] This is a pre-release

Packaging of source code tarball

TODO: add checkout of code via release tag (?)

# update again from GH to fetch tag
#  assumptions:
#  - own fork as "origin"
#  - remote repo as "upstream"
git fetch --all --prune && git checkout releasebranch_7_6 && \
 git merge upstream/releasebranch_7_6 && git push origin releasebranch_7_6

# 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

Create Changelog file on release branch:

python tools/gitlog2changelog.py
mv ChangeLog ChangeLog_$VERSION
head ChangeLog_$VERSION
gzip ChangeLog_$VERSION

Reset include/VERSION file to git version:

Directly edit VERSION file in GH interface:

https://github.com/OSGeo/grass/blob/releasebranch_7_6/include/VERSION

Example:

7
6
2dev
2019

Commit as "back to dev"

Reset local copy to GH:

# update from GH
#  assumptions:
#  - own fork as "origin"
#  - remote repo as "upstream"
git fetch --all --prune && git checkout releasebranch_7_6 && \
 git merge upstream/releasebranch_7_6 && git push origin releasebranch_7_6

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"

# verify
echo "https://$SERVER1/grass$MAJOR$MINOR/source/"

# 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=6
     set PATCH=2RC2
  • Update addons (grass_addons.sh) rules, eg.
     compile $GIT_PATH/grass7 $GISBASE_PATH/grass760RC2   $ADDON_PATH/grass760RC2/addons
  • Modify grass_copy_wwwroot.sh accordingly, eg.
     copy_addon 761RC2 7.6.1RC2

Launchpad notes:

Packaging notes:

Marketing - tell others about release:

Via Email:

Via Web: