howto_release.txt 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329
  1. How to release GRASS GIS binaries and source code
  2. $Date$
  3. Note: This text contains *some* rules only applicable to the
  4. development coordinator (currently Markus Neteler, PSC Chair).
  5. ###########################################
  6. Contents
  7. (A) HOWTO create a release
  8. (B) HOWTO create a branch
  9. ###########################################
  10. (A) HOWTO create a release
  11. 0. Preparations
  12. #check if still compile; fix otherwise
  13. ( cd doc/raster/r.example/ ; make clean ; make )
  14. ( cd doc/vector/v.example/ ; make clean ; make )
  15. # fix typos in source code with
  16. tools/fix_typos.sh
  17. # i18N: sync from Transifex (https://www.transifex.com/grass-gis/grass7/dashboard/)
  18. # - except for Latvian; Latvian is directly edited in SVN and then sync'ed from trunk .po files
  19. cd locale
  20. sh ~/software/grass-addons/tools/transifex_merge.sh
  21. make
  22. make verify
  23. # ... then fix .po files as needed.
  24. #
  25. # requires https://trac.osgeo.org/grass/ticket/3539
  26. ## after that push fixes to transifex:
  27. #cd locale/transifex/
  28. #tx --debug push -t
  29. #### end of i18N
  30. 1. Local work
  31. # done by release manager
  32. # Only allowed RC cycle, not final!:
  33. # Check that autoconf scripts are up-to-date:
  34. rm -f config.guess config.sub
  35. wget http://git.savannah.gnu.org/cgit/config.git/plain/config.guess
  36. wget http://git.savannah.gnu.org/cgit/config.git/plain/config.sub
  37. svn diff config.guess config.sub
  38. autoconf-2.13
  39. # check and submit to SVN:
  40. svn ci -m"config.guess + config.sub: updated from http://git.savannah.gnu.org/cgit/config.git/plain/" config.guess config.sub configure
  41. # test by running ./configure
  42. # update from SVN
  43. svn up
  44. # cleanup rubbish:
  45. rm -f locale/templates/*.pot
  46. rm -f locale/po/messages.mo
  47. rm -f demolocation/PERMANENT/.bash*
  48. find . -name '*~' | xargs rm
  49. find . -name '*.bak' | xargs rm
  50. find . -name '.#*' | xargs rm
  51. find . -name '*.orig' | xargs rm
  52. find . -name '*.rej' | xargs rm
  53. find . -name '*.o' | xargs rm
  54. find . -name '*.pyc' | xargs rm
  55. find . -name 'OBJ.*' | xargs rm -r
  56. rm -f gui/wxpython/menustrings.py gui/wxpython/build_ext.pyc gui/wxpython/xml/menudata.xml gui/wxpython/xml/module_tree_menudata.xml
  57. chmod -R a+r *
  58. # double check
  59. svn status --no-ignore
  60. svn status
  61. # Create release branch (only if not yet existing)
  62. # ... see below
  63. # Update VERSION file to release version:
  64. vim include/VERSION
  65. #example:
  66. 7
  67. 4
  68. 1RC1
  69. 2018
  70. # cleanup
  71. rm -f include/VERSION~
  72. # Update OSGeo4W setup.hint file
  73. ### no longer needed
  74. #vim mswindows/osgeo4w/setup_x86.hint.tmpl
  75. #vim mswindows/osgeo4w/setup_x86_64.hint.tmpl
  76. #### Changelog and tagging etc
  77. # create version env var for convenience:
  78. MAJOR=`cat include/VERSION | head -1 | tail -1`
  79. MINOR=`cat include/VERSION | head -2 | tail -1`
  80. RELEASE=`cat include/VERSION | head -3 | tail -1`
  81. VERSION=${MAJOR}.${MINOR}.${RELEASE}
  82. echo $VERSION
  83. svn ci -m"GRASS GIS $VERSION" include/VERSION
  84. svn up
  85. # Create Changelog file on release branch:
  86. # https://arthurdejong.org/svn2cl/
  87. svn2cl
  88. mv ChangeLog ChangeLog_$VERSION
  89. head ChangeLog_$VERSION
  90. gzip ChangeLog_$VERSION
  91. # Tag release (http://trac.osgeo.org/grass/browser/grass/tags):
  92. # see http://svnbook.red-bean.com/en/1.4/svn.branchmerge.tags.html
  93. TODAY=`date +"%Y%m%d"`
  94. RELEASETAG=release_${TODAY}_grass_${MAJOR}_${MINOR}_${RELEASE}
  95. echo $RELEASETAG
  96. URL=https://svn.osgeo.org/grass
  97. svn copy $URL/grass/branches/releasebranch_7_4 \
  98. $URL/grass/tags/$RELEASETAG \
  99. -m "Tagging release grass_${MAJOR}_${MINOR}_${RELEASE}"
  100. # create source package (in the source directory):
  101. echo grass-${VERSION}
  102. mkdir grass-${VERSION}
  103. mv * grass-${VERSION}/
  104. # create the package:
  105. tar cvfzh grass-${VERSION}.tar.gz --exclude=.svn grass-${VERSION}/*
  106. # restore src code location:
  107. mv ./grass-${VERSION}/* .
  108. rmdir ./grass-${VERSION}
  109. # Calculating MD5 sum:
  110. md5sum grass-${VERSION}.tar.gz > grass-${VERSION}.md5sum
  111. # reset include/VERSION file to SVN version:
  112. vim include/VERSION
  113. #example
  114. 7
  115. 4
  116. 1svn
  117. 2018
  118. rm -f include/VERSION~
  119. svn ci -m"back to SVN" include/VERSION
  120. # Store the source tarball (twice) in (use scp -p FILES grass:):
  121. SERVER1=grass.osgeo.org
  122. SERVER1DIR=/var/www/grass/grass-cms/grass$MAJOR$MINOR/source/
  123. SERVER2=upload.osgeo.org
  124. SERVER2DIR=/osgeo/download/grass/grass$MAJOR$MINOR/source/
  125. echo $SERVER1:$SERVER1DIR
  126. echo $SERVER2:$SERVER2DIR
  127. # upload along with associated files:
  128. scp -p grass-$VERSION.* AUTHORS COPYING ChangeLog_$VERSION.gz \
  129. INSTALL REQUIREMENTS.html SUBMITTING neteler@$SERVER1:$SERVER1DIR
  130. scp -p grass-$VERSION.* AUTHORS COPYING ChangeLog_$VERSION.gz \
  131. INSTALL REQUIREMENTS.html SUBMITTING neteler@$SERVER2:$SERVER2DIR
  132. # Only full release!
  133. # generate link to "latest" source code
  134. ssh neteler@$SERVER1 "cd $SERVER1DIR ; rm -f grass-$MAJOR.$MINOR-latest.tar.gz"
  135. ssh neteler@$SERVER1 "cd $SERVER1DIR ; ln -s grass-$VERSION.tar.gz grass-$MAJOR.$MINOR-latest.tar.gz"
  136. # update winGRASS related files: Update the winGRASS version
  137. vim grass-addons/tools/wingrass-packager/grass_packager_release.bat
  138. vim grass-addons/tools/wingrass-packager/grass_addons.sh
  139. vim grass-addons/tools/wingrass-packager/grass_copy_wwwroot.sh
  140. ###################
  141. # update web site to new version: CMS
  142. - News section
  143. - https://grass.osgeo.org/download/software/
  144. - https://grass.osgeo.org/download/software/sources/
  145. - https://grass.osgeo.org/download/software/linux/
  146. - https://grass.osgeo.org/home/history/releases/
  147. - https://grass.osgeo.org/development/svn/svn-tags/ (add tag): echo $RELEASETAG
  148. # write announcement
  149. - store in trac:
  150. https://trac.osgeo.org/grass/wiki/Release/7.6.x-News
  151. https://trac.osgeo.org/grass/wiki/Grass7/NewFeatures76 <- add content of major changes only
  152. - update version in https://grasswiki.osgeo.org/wiki/GRASS-Wiki
  153. - store in Web as announces/announce_grass$MAJOR$MINOR$RELEASE.html <- how? with protected PHP upload page? (dropped since CMS)
  154. # only when new major release
  155. # update cronjob 'cron_grass_HEAD_src_snapshot.sh' on grass.osgeo.org to next but one release tag for the differences
  156. # wiki updates, only when new major release:
  157. - {{cmd|xxxx}} macro: https://grasswiki.osgeo.org/wiki/Template:Cmd
  158. - update last version on main page
  159. # trac updates, only when new major release:
  160. - Add new release to https://trac.osgeo.org/grass/admin/ticket/versions
  161. - Set "complete" flag in https://trac.osgeo.org/grass/milestone/7.6.x --> Edit Milestone
  162. - also: Retarget associated open tickets to milestone 7.6.x
  163. - Batch modify tickets, set to next milestone (update this query accordingly: two entries to change)
  164. 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
  165. - Set max items to 1000, then select all shown tickets via Status: assigned/new/reopened sections
  166. - Scroll down to "Batch modify": under the "Comment" section, add Field "Milestone" and set to next version
  167. - then use "Change ticket" button, done.
  168. - Only in case of new release branch being created:
  169. - Add Wiki Macro definitions for manual pages G7X:modulename
  170. - Edit: https://trac.osgeo.org/grass/wiki/InterMapTxt
  171. # WinGRASS notes:
  172. - Update grass_packager_release.bat, eg.
  173. set MAJOR=7
  174. set MINOR=4
  175. set PATCH=1RC1
  176. - Update addons (grass_addons.sh) rules, eg.
  177. compile $SVN_PATH/grass7 $GISBASE_PATH/grass760RC1 $ADDON_PATH/grass760RC1/addons
  178. - Modify grass_copy_wwwroot.sh accordingly, eg.
  179. copy_addon 761RC1 7.6.1RC1
  180. # Launchpad notes:
  181. - Create milestone and release: https://launchpad.net/grass/+series
  182. - Upload tarball for created release
  183. - Update daily recipe contents: https://code.launchpad.net/~grass/+recipe/grass-trunk
  184. # Packaging notes:
  185. https://trac.osgeo.org/grass/wiki/BuildHints
  186. - https://trac.osgeo.org/grass/wiki/DebianUbuntuPackaging
  187. - https://trac.osgeo.org/grass/wiki/CompileOnWindows
  188. ############
  189. # Marketing - tell others about release:
  190. * Notify all packagers (MN has email list)
  191. * If release candidate:
  192. - <grass-announce@lists.osgeo.org>
  193. - <grass-dev@lists.osgeo.org>
  194. * If official release:
  195. - publish related announcement press release at:
  196. Our GRASS web site: /announces/
  197. Note: DON'T use relative links there
  198. Our main mailing lists:
  199. http://lists.osgeo.org/mailman/listinfo/grass-announce
  200. <grass-announce@lists.osgeo.org>
  201. http://lists.osgeo.org/mailman/listinfo/grass-dev
  202. <grass-dev@lists.osgeo.org>
  203. http://lists.osgeo.org/mailman/listinfo/grassuser
  204. <grass-user@lists.osgeo.org>
  205. DebianGIS: <debian-gis@lists.debian.org>
  206. FreeGIS: <freegis-list@intevation.de>
  207. Geowanking: <geowanking@geowanking.org>
  208. OSGeo.org: <news_item@osgeo.org>
  209. Email:
  210. info@osgeo.org
  211. http://www.gis-news.de/ (franz-josef.behr@gismngt.de)
  212. http://spatialnews.geocomm.com/submitnews.html (not free any more, convince editor@geocomm.com)
  213. redazione@geoforus.it
  214. mfeilner@linuxnewmedia.de
  215. info@harzer.de
  216. editor-geo@geoconnexion.com
  217. Web:
  218. https://plus.google.com/u/0/communities/111147786674687562495 (G+ GRASS GIS community)
  219. http://linuxtoday.com/contribute.php3
  220. https://joinup.ec.europa.eu/software/grassgis/home (submit news, MN)
  221. http://www.macnn.com/contact/newstips/1
  222. http://www10.giscafe.com/submit_material/submit_options.php#Press (MN) --> Press releases
  223. http://www.directionsmag.com/pressreleases/ (News -> Submit Press Release)
  224. http://directory.fsf.org/wiki/GRASS_%28Geographic_Resources_Analysis_Support_System%29
  225. https://www.linux-apps.com/p/1128004/edit/ (MN)
  226. https://news.eoportal.org/web/eoportal/share-your-news (MN)
  227. -> Share your news with the EO community
  228. https://www.heise.de/download/product/grass-gis-7105 (update, MN)
  229. See also: https://grass.osgeo.org/wiki/Contact_Databases
  230. ... anywhere else? Please add here.
  231. ###########################################
  232. (B) HOWTO create a branch
  233. 1. see SVN book:
  234. http://svnbook.red-bean.com/en/1.1/ch04s07.html
  235. GRASS 7.6 release branch:
  236. # see below for real example
  237. # BRANCH=releasebranch_7_6
  238. # URL=https://svn.osgeo.org/grass
  239. # svn copy $URL/grass/trunk \
  240. # $URL/grass/branches/$BRANCH \
  241. # -m "Release branch for GRASS 7.6.x"
  242. Branch creation example: GRASS GIS 7.6 release branch creation
  243. svn copy https://svn.osgeo.org/grass/grass/trunk/ \
  244. https://svn.osgeo.org/grass/grass/branches/releasebranch_7_6 \
  245. -m "Release branch for GRASS GIS 7.6.x"
  246. ----------
  247. Switching current local copy to above development branch:
  248. (http://svnbook.red-bean.com/en/1.1/ch04s05.html)
  249. cd /path/to/your/local/copy/trunk
  250. svn switch https://svn.osgeo.org/grass/grass/branches/releasebranch_7_6 .