index.rst 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360
  1. .. _release_guide:
  2. Release Guide
  3. =============
  4. This guide details the process of performing a GeoServer release.
  5. Before you start
  6. ----------------
  7. SNAPSHOT release
  8. ^^^^^^^^^^^^^^^^
  9. For any release (including release candidates) a GeoServer release requires the
  10. corresponding GeoTools and GeoWebCache releases. Therefore, before you start you should
  11. coordinate a release with these projects, either performing the release yourself or
  12. asking a volunteer to perform the release.
  13. * `GeoTools Release Guide <https://docs.geotools.org/latest/developer/procedures/release.html>`_
  14. * `GeoWebCache Release repo README.md <https://github.com/GeoWebCache/gwc-release>`_
  15. Notify developer list
  16. ^^^^^^^^^^^^^^^^^^^^^
  17. Send an email to the `GeoServer developer list <https://lists.sourceforge.net/lists/listinfo/geoserver-devel>`_ a few days in advance, even though the release date has been agreed upon before hand. It is a good idea to remind developers to get any fixes 24 hours prior to release day, and to start a team discussion to identify any known blockers.
  18. Prerequisites
  19. -------------
  20. The following are necessary to perform a GeoServer release:
  21. #. Commit access to the GeoServer `Git repository <https://github.com/geoserver/geoserver>`_
  22. #. Build access to `Jenkins <https://build.geoserver.org/jenkins/>`_
  23. #. Edit access to the GeoServer `Blog <https://blog.geoserver.org>`_
  24. #. Administration rights to GeoServer `JIRA <https://osgeo-org.atlassian.net/projects/GEOS>`__
  25. #. Release/file management privileges in `SourceForge <https://sourceforge.net/projects/geoserver/>`_
  26. Versions and revisions
  27. ----------------------
  28. When performing a release, we don't require a "code freeze" in which no developers can commit to the repository. Instead we release from a revision that is known to pass all tests, including unit/integration tests from a nightly build.
  29. To obtain the GeoServer, GWC and GeoTools revisions that have passed testing, navigate to `geoserver.org/download > Development <https://geoserver.org/download>`__, find the correct series (e.g. 2.17.x) and download a “binary” nightly build. From the download check the :file:`src/target/VERSION.txt` file. For example:
  30. .. code-block:: none
  31. version = 2.17-SNAPSHOT
  32. git revision = 1ee183d9af205080f1543dc94616bbe3b3e4f890
  33. git branch = origin/2.17.x
  34. build date = 19-Jul-2020 04:41
  35. geotools version = 23-SNAPSHOT
  36. geotools revision = 3bde6940610d228e01aec9de7c222823a2638664
  37. geowebcache version = 1.17-SNAPSHOT
  38. geowebcache revision = 27eec3fb31b8b4064ce8cc0894fa84d0ff97be61/27eec
  39. hudson build = -1
  40. Since most GeoServer releases require official GeoTools and GeoWebCache releases, the GeoTools and GeoWebCache revisions are usually not needed - the version numbers are used instead.
  41. Release in JIRA
  42. ---------------
  43. 1. Navigate to the `GeoServer project page <https://osgeo-org.atlassian.net/projects/GEOS?selectedItem=com.atlassian.jira.jira-projects-plugin:release-page&status=released-unreleased>`_ in JIRA.
  44. 2. Add a new version for the next version to be released after the current release. For example, if you are releasing GeoServer 2.11.5, create version 2.11.6. Enter the current date as the Start Date and use the date from the `release schedule <https://github.com/geoserver/geoserver/wiki/Release-Schedule>`_ for the Release Date.
  45. 3. Click in the Actions column for the version you are releasing and select Release. Update the Release Date to the current date when prompted. If there are still unsolved issues remaining in this release, you will be prompted to move them to an unreleased version. If so, choose the new version you created in step 2 above.
  46. If you are cutting the first RC of a series, create the stable branch
  47. ---------------------------------------------------------------------
  48. When creating the first release candidate of a series, there are some extra steps to create the new stable branch and update the version on the main development branch.
  49. * Checkout the main development branch and make sure it is up to date and that there are no changes in your local workspace::
  50. git checkout main
  51. git pull
  52. git status
  53. * Create the new stable branch and push it to GitHub; for example, if the main development branch is ``2.11-SNAPSHOT`` and the remote for the official GeoServer is called ``geoserver``::
  54. git checkout -b 2.11.x
  55. git push geoserver 2.11.x
  56. * Enable `GitHub branch protection <https://github.com/geoserver/geoserver/settings/branches>`_ for the new stable branch: tick "Protect this branch" (only) and press "Save changes".
  57. * Checkout the main development branch::
  58. git checkout main
  59. * Update the version in all pom.xml files; for example, if changing the main development branch from ``2.17-SNAPSHOT`` to ``2.18-SNAPSHOT``.
  60. Edit :file:`build/rename.xml` to update GeoServer, GeoTools and GeoWebCache version numbers::
  61. <property name="current" value="2.17"/>
  62. <property name="release" value="2.18"/>
  63. ..
  64. <replacefilter token="23-SNAPSHOT" value="24-SNAPSHOT"/>
  65. <replacefilter token="1.17-SNAPSHOT" value="1.18-SNAPSHOT"/>
  66. And then run::
  67. ant -f build/rename.xml
  68. .. note:: use of sed
  69. To update these files using sed::
  70. find . -name pom.xml -exec sed -i 's/2.11-SNAPSHOT/2.12-SNAPSHOT/g' {} \;
  71. .. note:: ``sed`` behaves differently on Linux vs. Mac OS X. If running on OS X, the ``-i`` should be followed by ``'' -e`` for each of these ``sed`` commands.
  72. Update release artifact paths and labels, for example, if changing the main development branch from ``2.11-SNAPSHOT`` to ``2.12-SNAPSHOT``::
  73. sed -i 's/2.11-SNAPSHOT/2.12-SNAPSHOT/g' src/release/bin.xml
  74. sed -i 's/2.11-SNAPSHOT/2.12-SNAPSHOT/g' src/release/installer/win/GeoServerEXE.nsi
  75. sed -i 's/2.11-SNAPSHOT/2.12-SNAPSHOT/g' src/release/installer/win/wrapper.conf
  76. .. note:: These can be written as a single ``sed`` command with multiple files.
  77. Update GeoTools dependency; for example if changing from ``17-SNAPSHOT`` to ``18-SNAPSHOT``::
  78. sed -i 's/17-SNAPSHOT/18-SNAPSHOT/g' src/pom.xml
  79. Update GeoWebCache dependency; for example if changing from ``1.11-SNAPSHOT`` to ``1.12-SNAPSHOT``::
  80. sed -i 's/1.11-SNAPSHOT/1.12-SNAPSHOT/g' src/pom.xml
  81. Manually update hardcoded versions in configuration files:
  82. * ``doc/en/developer/source/conf.py``
  83. * ``doc/en/docguide/source/conf.py``
  84. * ``doc/en/user/source/conf.py``
  85. * Add the new version to the documentation index (``doc/en/index.html``) just after line 105, e.g.::
  86. <tr>
  87. <td><strong><a href="https://geoserver.org/release/2.12.x/">2.12.x</a></strong></td>
  88. <td><a href="2.12.x/en/user/">User Manual</a></td>
  89. <td><a href="2.12.x/en/developer/">Developer Manual</a></td>
  90. </tr>
  91. * Commit the changes and push to the main development branch on GitHub::
  92. git commit -am "Updated version to 2.12-SNAPSHOT, updated GeoTools dependency to 18-SNAPSHOT, updated GeoWebCache dependency to 1.12-SNAPSHOT, and related changes"
  93. git push geoserver main
  94. * Create the new RC version in `JIRA <https://osgeo-org.atlassian.net/projects/GEOS>`_ for issues on the main development branch; for example, if the main development branch is now ``2.12-SNAPSHOT``, create a Jira version ``2.12-RC1`` for the first release of the ``2.12.x`` series
  95. * Update the main, nightly and live-docs jobs on build.geoserver.org:
  96. * disable the maintenance jobs, and remove them from the geoserver view
  97. * create new jobs, copying from the existing stable jobs, and edit the branch.
  98. * modify the last line of the live-docs builds, changing ``stable`` to ``maintain`` for the previous stable branch. The new job you created should publish to ``stable``, and the main development branch will continue to publish to ``latest``.
  99. * Update the cite tests on build.geoserver.org:
  100. * disable the maintenance jobs, and remove them from the geoserver view
  101. * create new jobs, copying from the existing main development branch jobs, editing the branch in the build command.
  102. * Announce on the developer mailing list that the new stable branch has been created.
  103. * Switch to the new branch and update the documentation links, replacing ``docs.geoserver.org/latest`` with ``docs.geoserver.org/2.12.x`` (for example):
  104. * ``README.md``
  105. * ``doc/en/developer/source/conf.py``
  106. * ``doc/en/user/source/conf.py``
  107. Build the Release
  108. -----------------
  109. Run the `geoserver-release <https://build.geoserver.org/view/geoserver/job/geoserver-release/>`_ job in Jenkins. The job takes the following parameters:
  110. **BRANCH**
  111. The branch to release from, "2.2.x", "2.1.x", etc... This must be a stable branch. Releases are not performed from the main development branch.
  112. **REV**
  113. The Git revision number to release from, e.g. "24ae10fe662c....". If left blank, the latest revision (i.e. HEAD) on the ``BRANCH`` being released is used.
  114. **VERSION**
  115. The version/name of the release to build, "2.1.4", "2.2", etc...
  116. **GT_VERSION**
  117. The GeoTools version to include in the release. This may be specified as a version number such as "8.0" or "2.7.5". Alternatively, the version may be specified as a Git branch/revision pair in the form ``<branch>@<revision>``. For example "main@36ba65jg53.....". Finally, this value may be left blank in which the version currently declared in the geoserver pom will be used (usually a SNAPSHOT). Again, this version must be a version number corresponding to an official GeoTools release.
  118. **GWC_VERSION**
  119. The GeoWebCache version to include in the release. This may be specified as a version number such as "1.3-RC3". Alternatively, the version may be specified as a Git revision of the form ``<branch>@<revision>`` such as "master@1b3243jb...". Finally, this value may be left blank in which the version currently declared in the geoserver pom will be used (usually a SNAPSHOT).Git Again, this version must be a version number corresponding to an official GeoTools release.
  120. **GIT_USER**
  121. The Git username to use for the release.
  122. **GIT_EMAIL**
  123. The Git email to use for the release.
  124. This job will checkout the specified branch/revision and build the GeoServer
  125. release artifacts against the GeoTools/GeoWebCache versions specified. When
  126. successfully complete all release artifacts will be listed under artifacts in the job summary.
  127. Additionally, when the job completes it fires off a job for a windows worker. When this job
  128. completes it will list the ``.exe`` artifacts.
  129. Test the Artifacts
  130. ------------------
  131. Download and try out some of the artifacts from the above location and do a
  132. quick smoke test that there are no issues. Engage other developers to help
  133. test on the developer list.
  134. It is important to test the artifacts using the minimum supported version of Java (currently Java 11 in September 2023).
  135. Publish the Release
  136. -------------------
  137. Run the `geoserver-release-publish <https://build.geoserver.org/view/geoserver/job/geoserver-release-publish/>`_ in Jenkins. The job takes the following parameters:
  138. **VERSION**
  139. The version being released. The same value specified for ``VERSION`` when running the ``geoserver-release`` job.
  140. **BRANCH**
  141. The branch being released from. The same value specified for ``BRANCH`` when running the ``geoserver-release`` job.
  142. This job will rsync all the artifacts located at::
  143. https://build.geoserver.org/geoserver/release/<RELEASE>
  144. to the SourceForge FRS server. Navigate to `SourceForge <https://sourceforge.net/projects/geoserver/>`__ and verify that the artifacts have been uploaded properly. If this is the latest stable release, set the necessary flags (you will need to be a SourceForge admin user) on the ``.exe``, ``.dmg`` and ``.bin`` artifacts so that they show up as the appropriate default for users downloading on the Windows, OSX, and Linux platforms. This does not apply to maintenance or support releases.
  145. Release notes
  146. -------------
  147. This job will tag the release located in::
  148. https://github.com/geoserver/geoserver/tags/<RELEASE>
  149. Publish JIRA markdown release notes to GitHub tag:
  150. #. Select the correct release from `JIRA Releases <https://osgeo-org.atlassian.net/projects/GEOS?orderField=RANK&selectedItem=com.atlassian.jira.jira-projects-plugin%3Arelease-page&status=released>`__ page.
  151. #. From the release page, locate the :guilabel:`Release notes` button at the top of the page to open the release notes edit
  152. #. Generate release notes as markdown:
  153. * Select format `Markdown`
  154. * Layout: Issue key with link
  155. * Issue types: All
  156. Change the heading to :kbd:`Release notes`, and apply the change with :guilabel:`Done`.
  157. Use :guilabel:`Copy to clipboard` to obtain the markdown, similar to the following:
  158. .. code-block:: text
  159. # Release notes
  160. ### Bug
  161. [GEOS-10264](https://osgeo-org.atlassian.net/browse/GEOS-10264) Address startup warning File option not set for appender \[geoserverlogfile\]
  162. [GEOS-10263](https://osgeo-org.atlassian.net/browse/GEOS-10263) WPSRequestBuilderTest assumes that JTS:area is the first process in the list
  163. [GEOS-10255](https://osgeo-org.atlassian.net/browse/GEOS-10255) i18n user interface inconsistent layout with br tags used for layout
  164. [GEOS-10245](https://osgeo-org.atlassian.net/browse/GEOS-10245) jdbcconfig: prefixedName filter field not updated
  165. [GEOS-9950](https://osgeo-org.atlassian.net/browse/GEOS-9950) MapPreviewPage logs unable to find property: format.wfs.text/csv continuously
  166. ### Improvement
  167. [GEOS-10246](https://osgeo-org.atlassian.net/browse/GEOS-10246) jdbcconfig: performance slow-down from unnecessary transactions
  168. ### New Feature
  169. [GEOS-10223](https://osgeo-org.atlassian.net/browse/GEOS-10223) Support MBTiles in OGC Tiles API
  170. ### Task
  171. [GEOS-10247](https://osgeo-org.atlassian.net/browse/GEOS-10247) Reuse of service documentation references for workspace, metadata and default language
  172. #. Navigate to GitHub tags https://github.com/geoserver/geoserver/tags
  173. Locate the new tag from the list, and use :menuselection:`... --> Create release`
  174. * Release title: `GeoServer 2.20.0`
  175. * Write: Paste the markdown from Jira release notes editor
  176. * Set as the latest release: only tick this for stable releases, leave unticked for maintenance and support releases
  177. Use :guilabel:`Publish release` button to publish the release notes.
  178. Create the download page
  179. ------------------------
  180. The `GeoServer website <https://geoserver.org/>`_ is managed as a `GitHub Pages repository <https://github.com/geoserver/geoserver.github.io>`_. Follow the `instructions <https://github.com/geoserver/geoserver.github.io#releases>`_ in the repository to create a release announcement.
  181. The announcement page header fields include the information required to generate a download page for the release.
  182. Announce the Release
  183. --------------------
  184. Mailing lists
  185. ^^^^^^^^^^^^^
  186. .. note:: This announcement should be made for all releases, including release candidates.
  187. Send both an email to the Developers list and post an announcement on the Discourse Users group announcing the
  188. release. The message should be relatively short. You can base it on the blog post.
  189. The following is an example::
  190. Subject: GeoServer 2.5.1 Released
  191. The GeoServer team is happy to announce the release of GeoServer 2.5.1.
  192. The release is available for download from:
  193. https://geoserver.org/release/2.5.1/
  194. GeoServer 2.5.1 is the next stable release of GeoServer and is recommended for production deployment.
  195. This release comes with some exciting new features. The new and
  196. noteworthy include:
  197. * By popular request Top/Bottom labels when configuring layer group order
  198. * You can now identify GeoServer “nodes” in a cluster by configuring a label and color in the UI. Documentation and example in the user guide.
  199. * Have you ever run GeoServer and not quite gotten your file permissions correct? GeoServer now has better logging when it cannot your data directory and is required to “fall back” to the embedded data directory during start up.
  200. * We have a new GRIB community module (community modules are not in the release until they pass a QA check, but great to see new development taking shape)
  201. * Documentation on the jp2kak extension now in the user guide
  202. * Additional documentation for the image mosaic in the user guide with tutorials covering the plugin, raster time-series, time and elevation and footprint management.
  203. * WCS 2.0 support continues to improve with DescribeCoverage now supporting null values
  204. * Central Authentication Service (CAS) authentication has received a lot of QA this release and is now available in the GeoServer 2.5.x series.
  205. * This release is made in conjunction with GeoTools 11.1
  206. Along with many other improvements and bug fixes:
  207. * https://osgeo-org.atlassian.net/jira/secure/ReleaseNote.jspa?projectId=10000&version=10164
  208. Thanks to Andrea and Jody (GeoSolutions and Boundless) for publishing this release. A very special thanks to all those who contributed bug fixes, new
  209. features, bug reports, and testing to this release.
  210. --
  211. The GeoServer Team
  212. OSGeo Announcement
  213. ^^^^^^^^^^^^^^^^^^
  214. For major releases OSGeo asks that a news item be submitted:
  215. * Login to the osgeo.org website, create a news item using the release announcement text above.
  216. And that an announcement is sent to discuss:
  217. * Mail major release announcements to discuss@osgeo.org (you will need to `subscribe first <https://lists.osgeo.org/listinfo/discuss>`__ ).