From bb145e58ea3d835da22b1996433ab703e86f8f0a Mon Sep 17 00:00:00 2001 From: Darafei Praliaskouski Date: Fri, 26 Jun 2026 18:53:30 +0400 Subject: [PATCH 1/3] fix: bundle h3 source for release tarballs --- CMakeLists.txt | 12 ++++++++++++ cmake/BundleSource.cmake | 34 ++++++++++++++++++++++++++++++++++ cmake/h3/CMakeLists.txt | 18 +++++++++++++----- scripts/bundle | 2 +- scripts/release | 2 +- 5 files changed, 61 insertions(+), 7 deletions(-) create mode 100644 cmake/BundleSource.cmake diff --git a/CMakeLists.txt b/CMakeLists.txt index f28811dd..cd3e84a7 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -81,3 +81,15 @@ add_custom_target(pgxn -o h3-${INSTALL_VERSION}.zip HEAD WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} ) +add_custom_target(source_bundle + COMMAND ${CMAKE_COMMAND} + -DARCHIVE_OUTPUT=${CMAKE_CURRENT_SOURCE_DIR}/h3-${INSTALL_VERSION}.tar.gz + -DARCHIVE_PREFIX=h3-${INSTALL_VERSION} + -DH3_SOURCE_DIR=${h3_SOURCE_DIR} + -DMETA_JSON=${CMAKE_BINARY_DIR}/META.json + -DPROJECT_BINARY_DIR=${CMAKE_BINARY_DIR} + -DPROJECT_SOURCE_DIR=${CMAKE_CURRENT_SOURCE_DIR} + -P ${CMAKE_CURRENT_SOURCE_DIR}/cmake/BundleSource.cmake + DEPENDS pgxn + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} +) diff --git a/cmake/BundleSource.cmake b/cmake/BundleSource.cmake new file mode 100644 index 00000000..7d4e4091 --- /dev/null +++ b/cmake/BundleSource.cmake @@ -0,0 +1,34 @@ +foreach(required_var ARCHIVE_OUTPUT ARCHIVE_PREFIX H3_SOURCE_DIR META_JSON PROJECT_BINARY_DIR PROJECT_SOURCE_DIR) + if(NOT DEFINED ${required_var} OR "${${required_var}}" STREQUAL "") + message(FATAL_ERROR "${required_var} is required") + endif() +endforeach() + +set(bundle_root "${PROJECT_BINARY_DIR}/source-bundle") +set(staging_dir "${bundle_root}/${ARCHIVE_PREFIX}") +set(archive_tar "${PROJECT_BINARY_DIR}/${ARCHIVE_PREFIX}.git.tar") + +file(REMOVE_RECURSE "${bundle_root}" "${archive_tar}" "${ARCHIVE_OUTPUT}") +file(MAKE_DIRECTORY "${bundle_root}") + +execute_process( + COMMAND git archive --format tar --prefix=${ARCHIVE_PREFIX}/ -o "${archive_tar}" HEAD + WORKING_DIRECTORY "${PROJECT_SOURCE_DIR}" + COMMAND_ERROR_IS_FATAL ANY +) +execute_process( + COMMAND "${CMAKE_COMMAND}" -E tar xf "${archive_tar}" + WORKING_DIRECTORY "${bundle_root}" + COMMAND_ERROR_IS_FATAL ANY +) + +file(COPY "${META_JSON}" DESTINATION "${staging_dir}") +file(REMOVE_RECURSE "${staging_dir}/cmake/h3/upstream") +file(MAKE_DIRECTORY "${staging_dir}/cmake/h3/upstream") +file(COPY "${H3_SOURCE_DIR}/" DESTINATION "${staging_dir}/cmake/h3/upstream") + +execute_process( + COMMAND "${CMAKE_COMMAND}" -E tar czf "${ARCHIVE_OUTPUT}" --format=gnutar "${ARCHIVE_PREFIX}" + WORKING_DIRECTORY "${bundle_root}" + COMMAND_ERROR_IS_FATAL ANY +) diff --git a/cmake/h3/CMakeLists.txt b/cmake/h3/CMakeLists.txt index fda44b3c..d68b75c3 100644 --- a/cmake/h3/CMakeLists.txt +++ b/cmake/h3/CMakeLists.txt @@ -10,11 +10,19 @@ set(ENABLE_FORMAT OFF) set(ENABLE_LINTING OFF) set(ENABLE_DOCS OFF) -FetchContent_Declare( - h3 - URL https://github.com/uber/h3/archive/refs/tags/v${H3_CORE_VERSION}.tar.gz - URL_HASH SHA256=${H3_CORE_SHA256} -) +set(H3_BUNDLED_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/upstream") +if(EXISTS "${H3_BUNDLED_SOURCE_DIR}/CMakeLists.txt") + FetchContent_Declare( + h3 + SOURCE_DIR "${H3_BUNDLED_SOURCE_DIR}" + ) +else() + FetchContent_Declare( + h3 + URL https://github.com/uber/h3/archive/refs/tags/v${H3_CORE_VERSION}.tar.gz + URL_HASH SHA256=${H3_CORE_SHA256} + ) +endif() FetchContent_MakeAvailable(h3) set_target_properties(h3 PROPERTIES diff --git a/scripts/bundle b/scripts/bundle index ad55c2b5..c988b714 100755 --- a/scripts/bundle +++ b/scripts/bundle @@ -2,4 +2,4 @@ git clean -xdf cmake -B build -DCMAKE_BUILD_TYPE=Release -cmake --build build --target=pgxn +cmake --build build --target=source_bundle diff --git a/scripts/release b/scripts/release index e1dcb77f..6d6777e8 100755 --- a/scripts/release +++ b/scripts/release @@ -225,7 +225,7 @@ main() { echo " - review and commit the release-${version} changes" echo " - push and merge the release branch" echo " - have the release manager publish GitHub release v${version} from CHANGELOG.md" - echo " - run scripts/bundle and upload to PGXN" + echo " - run scripts/bundle, upload h3-${version}.zip to PGXN, and attach h3-${version}.tar.gz to the GitHub release" echo " - run scripts/postrelease after the release is merged" } From f55ed6200019f1fe919fb4c859ac4c7536822948 Mon Sep 17 00:00:00 2001 From: Darafei Praliaskouski Date: Sat, 27 Jun 2026 18:55:21 +0400 Subject: [PATCH 2/3] fix: expose bundled h3 source path --- .gitignore | 1 + cmake/h3/CMakeLists.txt | 1 + 2 files changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index f6f4daf7..94dd7607 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,7 @@ h3/test/results /h3/test/sql/ci-*.sql /libh3-*/ /h3-*.zip +/h3-*.tar.gz *.BAK # IDEs diff --git a/cmake/h3/CMakeLists.txt b/cmake/h3/CMakeLists.txt index d68b75c3..d32364a1 100644 --- a/cmake/h3/CMakeLists.txt +++ b/cmake/h3/CMakeLists.txt @@ -24,6 +24,7 @@ else() ) endif() FetchContent_MakeAvailable(h3) +set(h3_SOURCE_DIR "${h3_SOURCE_DIR}" CACHE PATH "Vendored H3 source directory" FORCE) set_target_properties(h3 PROPERTIES INTERPROCEDURAL_OPTIMIZATION TRUE From 7f3769df62deef153bfbc209e2fb75e10f72e8a3 Mon Sep 17 00:00:00 2001 From: Darafei Praliaskouski Date: Sat, 27 Jun 2026 20:12:29 +0400 Subject: [PATCH 3/3] fix: guard release bundle inputs --- cmake/h3/CMakeLists.txt | 9 +++++++++ scripts/bundle | 13 +++++++++++++ 2 files changed, 22 insertions(+) diff --git a/cmake/h3/CMakeLists.txt b/cmake/h3/CMakeLists.txt index d32364a1..0ca4a763 100644 --- a/cmake/h3/CMakeLists.txt +++ b/cmake/h3/CMakeLists.txt @@ -12,6 +12,15 @@ set(ENABLE_DOCS OFF) set(H3_BUNDLED_SOURCE_DIR "${CMAKE_CURRENT_LIST_DIR}/upstream") if(EXISTS "${H3_BUNDLED_SOURCE_DIR}/CMakeLists.txt") + file(READ "${H3_BUNDLED_SOURCE_DIR}/VERSION" H3_BUNDLED_VERSION) + string(STRIP "${H3_BUNDLED_VERSION}" H3_BUNDLED_VERSION) + if(NOT H3_BUNDLED_VERSION VERSION_EQUAL H3_CORE_VERSION) + message(FATAL_ERROR + "Bundled H3 source version ${H3_BUNDLED_VERSION} does not match " + "configured H3 core version ${H3_CORE_VERSION}" + ) + endif() + FetchContent_Declare( h3 SOURCE_DIR "${H3_BUNDLED_SOURCE_DIR}" diff --git a/scripts/bundle b/scripts/bundle index c988b714..7731e15e 100755 --- a/scripts/bundle +++ b/scripts/bundle @@ -1,5 +1,18 @@ #!/usr/bin/env bash +set -euo pipefail + +die() { + echo "bundle: $*" >&2 + exit 1 +} + +require_clean_tracked_tree() { + git diff --quiet || die "tracked worktree changes are present" + git diff --cached --quiet || die "staged changes are present" +} + +require_clean_tracked_tree git clean -xdf cmake -B build -DCMAKE_BUILD_TYPE=Release cmake --build build --target=source_bundle