Selaa lähdekoodia

howto_release converted to MD incl cleanup (#96)

Markus Neteler 5 vuotta sitten
vanhempi
commit
608033b718
2 muutettua tiedostoa jossa 334 lisäystä ja 307 poistoa
  1. 334 0
      doc/howto_release.md
  2. 0 307
      doc/howto_release.txt

+ 334 - 0
doc/howto_release.md

@@ -0,0 +1,334 @@
+# 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
+
+```bash
+( cd doc/raster/r.example/ ; make clean ; make )
+( cd doc/vector/v.example/ ; make clean ; make )
+```
+
+### Fix typos in source code with
+
+```bash
+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
+
+```bash
+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:
+```bash
+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:
+```bash
+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
+
+```bash
+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:
+```bash
+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?!
+
+```bash
+vim include/VERSION
+
+#example:
+7
+8
+0RC1
+2019
+```
+
+Cleanup:
+```bash
+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
+
+```bash
+# 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)
+
+```bash
+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
+
+```bash
+# 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
+
+```bash
+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
+
+```bash
+# 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
+
+- 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/
+
+TODO: git tags
+- https://grass.osgeo.org/development/svn/svn-tags/ (add tag): echo $RELEASETAG
+
+#### Write announcement and publish it
+- store in trac:
+    - https://trac.osgeo.org/grass/wiki/Release/7.8.x-News
+    - https://trac.osgeo.org/grass/wiki/Grass7/NewFeatures78  <- 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:
+    - Set "complete" flag in https://trac.osgeo.org/grass/milestone/7.8.x --> Edit Milestone
+        - also: Retarget associated open tickets to milestone 7.8.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.8.0&milestone=7.8.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=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:
+- 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:
+    - <grass-announce@lists.osgeo.org>
+    - <grass-dev@lists.osgeo.org>
+- 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 | <grass-announce@lists.osgeo.org>
+    - http://lists.osgeo.org/mailman/listinfo/grass-dev | <grass-dev@lists.osgeo.org>
+    - http://lists.osgeo.org/mailman/listinfo/grass-user | <grass-user@lists.osgeo.org>
+- DebianGIS:          <debian-gis@lists.debian.org> - send only small note
+- FreeGIS:             <freegis-list@intevation.de>
+- Geowanking:       <geowanking@geowanking.org>
+-  OSGeo.org:        <news_item@osgeo.org>
+
+Via 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
+
+Via 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.

+ 0 - 307
doc/howto_release.txt

@@ -1,307 +0,0 @@
-How to release GRASS GIS binaries and source code
-
-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 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
-
-#### 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
-git diff config.guess config.sub
-autoconf-2.13
-# check and 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 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
-git status
-
-# Create release branch (only if not yet existing)
-# ... see below
-
-# Update VERSION file to release version:
-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
-
-#### 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"
-https://github.com/OSGeo/grass/releases/new
-
-#### Packaging
-# 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:
-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 package
-# 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 show 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/
-# TODO: git tags
-  - 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.8.x-News
-    https://trac.osgeo.org/grass/wiki/Grass7/NewFeatures78  <- 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:
-  - Set "complete" flag in https://trac.osgeo.org/grass/milestone/7.8.x --> Edit Milestone
-    - also: Retarget associated open tickets to milestone 7.8.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.8.0&milestone=7.8.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=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:
-
-  - 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:
-    - <grass-announce@lists.osgeo.org>
-    - <grass-dev@lists.osgeo.org>
-
-* 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
-                         <grass-announce@lists.osgeo.org>
-                       http://lists.osgeo.org/mailman/listinfo/grass-dev
-                         <grass-dev@lists.osgeo.org>
-                       http://lists.osgeo.org/mailman/listinfo/grassuser
-                         <grass-user@lists.osgeo.org>
-
-   DebianGIS:          <debian-gis@lists.debian.org> - send only small note
-   FreeGIS:            <freegis-list@intevation.de>
-   Geowanking:         <geowanking@geowanking.org>
-   OSGeo.org:          <news_item@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.
-