1. Verify that the versions currently set in Version.txt make sense for this release. See file for instructions. - GEOS_VERSION_PATCH - GEOS_VERSION_MINOR - GEOS_VERSION_MAJOR - GEOS_PATCH_WORD - CAPI_INTERFACE_CURRENT - CAPI_INTERFACE_REVISION - CAPI_INTERFACE_AGE 2. Prepare the build directory. $ mkdir _build && cd _build && cmake -DBUILD_DOCUMENTATION=YES .. 3. Run the build, distcheck, docs targets, fix any problems with them. $ cmake --build . $ cmake --build . --target docs $ ctest --output-on-failure . $ cmake --build . --target distcheck 4. Update the NEWS file (extract most important things from the repository log). Make sure to update the release date. 5. Commit the changes in the NEWS file. Push changes with: git push origin, and confirm all bots are green before moving forward 6. Tag the release: $ git tag MAJOR.MINOR.PATCH $ git push origin MAJOR.MINOR.PATCH 7. At this point the github/release.yml action should run, wait for it to finish and then verify you can build with it. $ VERSION=MAJOR.MINOR.PATCH $ wget https://github.com/libgeos/geos/releases/download/$VERSION/geos-$VERSION.tar.bz2 $ tar xvfz geos-$VERSION.tar.bz2 $ cd geos-$VERSION $ mkdir _build && cd _build && cmake .. $ cmake --build . $ ctest --output-on-failure . 8. Copy the tarball to upload.osgeo.org:/osgeo/download/geos 9. Create and push a release branch if this was a PATCH=0 release, update the versions for next release in Version.txt (both in main and release branch if this was a PATCH=0 release). 10. Update download page in main branch: web/content/usage/download.md - Add latest release - Remove previous patch level release (if any) 11. Close current GitHub milestone and add a new one for next release. 12. Announce on geos-devel