Contents
Development
In order to build and test your changes, simply run ./scripts/develop.
For local upgrade-validation coverage, install pg_validate_extupgrade so
ctest can run the same extension-upgrade checks as CI. Without it, CTest
registers explicit *_validate_extupgrade_unavailable placeholder tests and
those placeholders fail when your worktree touches upgrade-sensitive SQL or
CMake files:
cargo install --git https://github.com/rjuju/pg_validate_extupgrade pg_validate_extupgrade
When pg_validate_extupgrade is available, the test suite runs it against a
temporary build-tree PostgreSQL cluster instead of the developer’s default
local server.
Documentation is generated from the SQL files using scripts/documentation (requires poetry).
This command also validates that all extension GUCs are documented in h3/src/guc.c.
Release Process
- Prepare the release branch
- Pick
X.Y.Z. TheX.Ypart must match the bundled H3 core version; bump only the h3-pg patch when H3 core has not changed. - Start from a clean tracked worktree on the branch you want to release from.
- Run
scripts/release X.Y.Z. SetRELEASE_DATE=YYYY-MM-DDonly when the changelog and citation date should differ from today. - The script creates
release-X.Y.Zand leaves the release changes uncommitted for review.
- Pick
- Review the release diff
- Root
CMakeLists.txthasVERSION X.Y.Zand installs${PROJECT_VERSION}instead ofunreleased. - The
h3andh3_postgisupdate files that ended in--unreleased.sqlhave been renamed to end in--X.Y.Z.sql, and their CMake references were renamed with them. - Installer SQL availability comments, generated API documentation,
CITATION.cff,CHANGELOG.md, and the extension upgrade regression target all refer toX.Y.Z. scripts/check-metadataandgit diff --checkpassed at the end of the script run.
- Root
- Commit and merge the release branch
- Commit the reviewed release changes.
- Push and merge
release-X.Y.Z.
- Publish the GitHub release
- This is a maintainer action, not part of
scripts/release. The release manager, or another maintainer with GitHub release permissions, publishes the release afterrelease-X.Y.Zis merged. - Create or draft release
vX.Y.Zfrom the merged release commit onmain. If GitHub creates the tag, verify that tagvX.Y.Zpoints at that commit. - Copy the
CHANGELOG.mdentry into the release description.
- This is a maintainer action, not part of
- Distribute the extension on PGXN
- Run
scripts/bundleto package the release - Upload the distribution on PGXN Manager
- Run
- Prepare the next development cycle
- After the release branch is merged, start from the updated main branch.
- Run
scripts/postrelease. The script restoresINSTALL_VERSIONtounreleased, creates the next emptyh3--X.Y.Z--unreleased.sqlandh3_postgis--X.Y.Z--unreleased.sqlfiles, adds them to the extension CMake files, restores the upgrade regression target tounreleased, and runs the release metadata checks. - Review, commit, push, and merge the post-release development branch.