pg-maker 0.1.0__tar.gz → 0.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (299) hide show
  1. {pg_maker-0.1.0 → pg_maker-0.2.0}/.gitignore +2 -0
  2. pg_maker-0.2.0/CHANGELOG.md +44 -0
  3. {pg_maker-0.1.0 → pg_maker-0.2.0}/PKG-INFO +6 -1
  4. {pg_maker-0.1.0 → pg_maker-0.2.0}/README.md +5 -0
  5. {pg_maker-0.1.0 → pg_maker-0.2.0}/docs/interfaces/build.md +22 -0
  6. {pg_maker-0.1.0 → pg_maker-0.2.0}/docs/interfaces/configuration.md +9 -0
  7. pg_maker-0.2.0/docs/managed-16-icu70.md +173 -0
  8. {pg_maker-0.1.0 → pg_maker-0.2.0}/docs/releasing.md +4 -4
  9. {pg_maker-0.1.0 → pg_maker-0.2.0}/pyproject.toml +3 -1
  10. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/__init__.py +1 -1
  11. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/artifacts/manifest.py +6 -0
  12. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/assets.py +12 -2
  13. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/builders/autotools.py +6 -0
  14. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/builders/components.py +72 -1
  15. pg_maker-0.2.0/src/pg_maker/bundled/catalogs/yc-16.15-extensions.yaml +541 -0
  16. pg_maker-0.2.0/src/pg_maker/bundled/components/libraries/icu70.yaml +40 -0
  17. pg_maker-0.2.0/src/pg_maker/bundled/components/managed/age.yaml +29 -0
  18. pg_maker-0.2.0/src/pg_maker/bundled/components/managed/h3.yaml +45 -0
  19. pg_maker-0.2.0/src/pg_maker/bundled/components/managed/hypopg.yaml +29 -0
  20. pg_maker-0.2.0/src/pg_maker/bundled/components/managed/jsquery.yaml +29 -0
  21. pg_maker-0.2.0/src/pg_maker/bundled/components/managed/logerrors.yaml +29 -0
  22. pg_maker-0.2.0/src/pg_maker/bundled/components/managed/oracle_fdw.yaml +29 -0
  23. pg_maker-0.2.0/src/pg_maker/bundled/components/managed/orafce.yaml +29 -0
  24. pg_maker-0.2.0/src/pg_maker/bundled/components/managed/pg_cron.yaml +29 -0
  25. pg_maker-0.2.0/src/pg_maker/bundled/components/managed/pg_hint_plan.yaml +29 -0
  26. pg_maker-0.2.0/src/pg_maker/bundled/components/managed/pg_partman.yaml +29 -0
  27. pg_maker-0.2.0/src/pg_maker/bundled/components/managed/pg_qualstats.yaml +29 -0
  28. pg_maker-0.2.0/src/pg_maker/bundled/components/managed/pg_repack.yaml +30 -0
  29. pg_maker-0.2.0/src/pg_maker/bundled/components/managed/pg_stat_kcache.yaml +30 -0
  30. pg_maker-0.2.0/src/pg_maker/bundled/components/managed/pg_stat_query_plans.yaml +29 -0
  31. pg_maker-0.2.0/src/pg_maker/bundled/components/managed/pg_tm_aux.yaml +29 -0
  32. pg_maker-0.2.0/src/pg_maker/bundled/components/managed/pg_uuidv7.yaml +29 -0
  33. pg_maker-0.2.0/src/pg_maker/bundled/components/managed/pgaudit.yaml +29 -0
  34. pg_maker-0.2.0/src/pg_maker/bundled/components/managed/pglogical.yaml +31 -0
  35. pg_maker-0.2.0/src/pg_maker/bundled/components/managed/pgrouting.yaml +38 -0
  36. pg_maker-0.2.0/src/pg_maker/bundled/components/managed/plv8.yaml +32 -0
  37. pg_maker-0.2.0/src/pg_maker/bundled/components/managed/postgis.yaml +64 -0
  38. pg_maker-0.2.0/src/pg_maker/bundled/components/managed/rum.yaml +29 -0
  39. pg_maker-0.2.0/src/pg_maker/bundled/components/managed/smlar.yaml +29 -0
  40. pg_maker-0.2.0/src/pg_maker/bundled/components/managed/spqrguard.yaml +29 -0
  41. pg_maker-0.2.0/src/pg_maker/bundled/components/managed/spqrhash.yaml +30 -0
  42. pg_maker-0.2.0/src/pg_maker/bundled/components/managed/timescaledb.yaml +38 -0
  43. pg_maker-0.2.0/src/pg_maker/bundled/components/managed/vector.yaml +29 -0
  44. pg_maker-0.2.0/src/pg_maker/bundled/config/features/yc16-icu70.yaml +43 -0
  45. pg_maker-0.2.0/src/pg_maker/bundled/profiles/yc-16.15-icu70.yaml +34 -0
  46. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/changes/loader.py +37 -2
  47. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/cli.py +2 -0
  48. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/config.py +16 -2
  49. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/development/session.py +5 -0
  50. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/execution/build.py +38 -1
  51. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/execution/checkpoints.py +1 -0
  52. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/identity.py +8 -2
  53. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/packaging/deb.py +7 -0
  54. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/packaging/tree.py +19 -0
  55. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/planning/environments.py +49 -30
  56. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/planning/plan.py +24 -0
  57. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/planning/resolve.py +9 -0
  58. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/planning/reuse.py +15 -0
  59. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/schemas/lock.schema.json +146 -1
  60. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/schemas/planning-common.schema.json +265 -1
  61. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/sources/resolver.py +6 -0
  62. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker.egg-info/PKG-INFO +6 -1
  63. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker.egg-info/SOURCES.txt +35 -0
  64. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/contracts/test_cli.py +1 -1
  65. pg_maker-0.2.0/tests/integration/test_library_builder.py +72 -0
  66. pg_maker-0.2.0/tests/unit/test_environment_platform.py +55 -0
  67. pg_maker-0.2.0/tests/unit/test_pinned_libraries.py +210 -0
  68. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/unit/test_planning.py +24 -4
  69. {pg_maker-0.1.0 → pg_maker-0.2.0}/tools/check_release.py +1 -1
  70. {pg_maker-0.1.0 → pg_maker-0.2.0}/tools/generate_planning_schemas.py +16 -2
  71. pg_maker-0.2.0/tools/smoke_wheel.py +84 -0
  72. pg_maker-0.1.0/CHANGELOG.md +0 -22
  73. pg_maker-0.1.0/tools/smoke_wheel.py +0 -45
  74. {pg_maker-0.1.0 → pg_maker-0.2.0}/.gitattributes +0 -0
  75. {pg_maker-0.1.0 → pg_maker-0.2.0}/.github/workflows/publish.yml +0 -0
  76. {pg_maker-0.1.0 → pg_maker-0.2.0}/.github/workflows/tests.yml +0 -0
  77. {pg_maker-0.1.0 → pg_maker-0.2.0}/CONTRIBUTING.md +0 -0
  78. {pg_maker-0.1.0 → pg_maker-0.2.0}/LICENSE +0 -0
  79. {pg_maker-0.1.0 → pg_maker-0.2.0}/MANIFEST.in +0 -0
  80. {pg_maker-0.1.0 → pg_maker-0.2.0}/docs/architecture.md +0 -0
  81. {pg_maker-0.1.0 → pg_maker-0.2.0}/docs/development-storage.md +0 -0
  82. {pg_maker-0.1.0 → pg_maker-0.2.0}/docs/development.md +0 -0
  83. {pg_maker-0.1.0 → pg_maker-0.2.0}/docs/interfaces/README.md +0 -0
  84. {pg_maker-0.1.0 → pg_maker-0.2.0}/docs/interfaces/api.md +0 -0
  85. {pg_maker-0.1.0 → pg_maker-0.2.0}/docs/interfaces/changes.md +0 -0
  86. {pg_maker-0.1.0 → pg_maker-0.2.0}/docs/interfaces/cleanup.md +0 -0
  87. {pg_maker-0.1.0 → pg_maker-0.2.0}/docs/interfaces/components.md +0 -0
  88. {pg_maker-0.1.0 → pg_maker-0.2.0}/docs/interfaces/development.md +0 -0
  89. {pg_maker-0.1.0 → pg_maker-0.2.0}/docs/interfaces/documentation.md +0 -0
  90. {pg_maker-0.1.0 → pg_maker-0.2.0}/docs/interfaces/documents.md +0 -0
  91. {pg_maker-0.1.0 → pg_maker-0.2.0}/docs/interfaces/environments.md +0 -0
  92. {pg_maker-0.1.0 → pg_maker-0.2.0}/docs/interfaces/execution.md +0 -0
  93. {pg_maker-0.1.0 → pg_maker-0.2.0}/docs/interfaces/machine.md +0 -0
  94. {pg_maker-0.1.0 → pg_maker-0.2.0}/docs/interfaces/observability.md +0 -0
  95. {pg_maker-0.1.0 → pg_maker-0.2.0}/docs/interfaces/packaging.md +0 -0
  96. {pg_maker-0.1.0 → pg_maker-0.2.0}/docs/interfaces/planning.md +0 -0
  97. {pg_maker-0.1.0 → pg_maker-0.2.0}/docs/interfaces/postgresql.md +0 -0
  98. {pg_maker-0.1.0 → pg_maker-0.2.0}/docs/interfaces/publication.md +0 -0
  99. {pg_maker-0.1.0 → pg_maker-0.2.0}/docs/interfaces/recovery.md +0 -0
  100. {pg_maker-0.1.0 → pg_maker-0.2.0}/docs/interfaces/runtime.md +0 -0
  101. {pg_maker-0.1.0 → pg_maker-0.2.0}/docs/interfaces/sources.md +0 -0
  102. {pg_maker-0.1.0 → pg_maker-0.2.0}/docs/interfaces/state.md +0 -0
  103. {pg_maker-0.1.0 → pg_maker-0.2.0}/docs/interfaces/storage.md +0 -0
  104. {pg_maker-0.1.0 → pg_maker-0.2.0}/docs/reuse.md +0 -0
  105. {pg_maker-0.1.0 → pg_maker-0.2.0}/docs/roadmap.md +0 -0
  106. {pg_maker-0.1.0 → pg_maker-0.2.0}/docs/validation/default-components.md +0 -0
  107. {pg_maker-0.1.0 → pg_maker-0.2.0}/docs/validation/development-release.md +0 -0
  108. {pg_maker-0.1.0 → pg_maker-0.2.0}/docs/validation/documentation-theme.md +0 -0
  109. {pg_maker-0.1.0 → pg_maker-0.2.0}/docs/validation/integration.md +0 -0
  110. {pg_maker-0.1.0 → pg_maker-0.2.0}/docs/validation/postgresql-majors.md +0 -0
  111. {pg_maker-0.1.0 → pg_maker-0.2.0}/docs/validation/review-fixes.md +0 -0
  112. {pg_maker-0.1.0 → pg_maker-0.2.0}/docs/validation/stage4.md +0 -0
  113. {pg_maker-0.1.0 → pg_maker-0.2.0}/docs/validation/stage56.md +0 -0
  114. {pg_maker-0.1.0 → pg_maker-0.2.0}/docs/validation/stage7.md +0 -0
  115. {pg_maker-0.1.0 → pg_maker-0.2.0}/setup.cfg +0 -0
  116. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/__main__.py +0 -0
  117. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/api.py +0 -0
  118. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/artifacts/__init__.py +0 -0
  119. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/artifacts/catalog.py +0 -0
  120. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/builders/__init__.py +0 -0
  121. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/bundled/PROJECT.md +0 -0
  122. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/bundled/build.yaml +0 -0
  123. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/bundled/components/pg-stat-kcache.yaml +0 -0
  124. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/bundled/components/pg-stat-statements.yaml +0 -0
  125. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/bundled/components/pg-wait-sampling.yaml +0 -0
  126. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/bundled/config/defaults.yaml +0 -0
  127. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/bundled/config/documentation.yaml +0 -0
  128. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/bundled/config/features/my-feature.yaml +0 -0
  129. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/bundled/config/vendor.yaml +0 -0
  130. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/bundled/documentation/README.md +0 -0
  131. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/bundled/documentation/pg-stat-kcache.sgml +0 -0
  132. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/bundled/documentation/pg-stat-kcache.yaml +0 -0
  133. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/bundled/documentation/pg-wait-sampling.sgml +0 -0
  134. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/bundled/documentation/pg-wait-sampling.yaml +0 -0
  135. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/bundled/patches/unix-socket-directory.patch +0 -0
  136. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/changes/__init__.py +0 -0
  137. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/changes/apply.py +0 -0
  138. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/changes/workspace.py +0 -0
  139. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/components/__init__.py +0 -0
  140. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/development/__init__.py +0 -0
  141. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/development/cli.py +0 -0
  142. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/development/git.py +0 -0
  143. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/documentation/__init__.py +0 -0
  144. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/documentation/builder.py +0 -0
  145. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/documentation/cli.py +0 -0
  146. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/documentation/config.py +0 -0
  147. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/documentation/install.py +0 -0
  148. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/documentation/site.py +0 -0
  149. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/documentation/sphinx_ext.py +0 -0
  150. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/documentation/theme/_static/pg-maker.css +0 -0
  151. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/documentation/theme/_static/pg-maker.js +0 -0
  152. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/documentation/theme/_templates/footer_en.html +0 -0
  153. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/documentation/theme/_templates/footer_metadata.html +0 -0
  154. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/documentation/theme/_templates/footer_ru.html +0 -0
  155. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/documentation/translation.py +0 -0
  156. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/documentation/validation.py +0 -0
  157. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/documentation/worker.py +0 -0
  158. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/documentation/writer.py +0 -0
  159. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/documentation/xml.py +0 -0
  160. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/documents.py +0 -0
  161. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/errors.py +0 -0
  162. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/execution/__init__.py +0 -0
  163. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/execution/cache.py +0 -0
  164. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/execution/cancellation.py +0 -0
  165. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/execution/cleanup.py +0 -0
  166. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/execution/component_cache.py +0 -0
  167. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/execution/development.py +0 -0
  168. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/execution/engine.py +0 -0
  169. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/execution/events.py +0 -0
  170. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/execution/incremental.py +0 -0
  171. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/execution/preparation.py +0 -0
  172. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/execution/process.py +0 -0
  173. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/execution/resources.py +0 -0
  174. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/execution/state.py +0 -0
  175. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/execution/worker.py +0 -0
  176. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/integrations/__init__.py +0 -0
  177. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/integrations/machine.py +0 -0
  178. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/integrations/runtime.py +0 -0
  179. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/models.py +0 -0
  180. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/packaging/__init__.py +0 -0
  181. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/packaging/service.py +0 -0
  182. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/packaging/spec.py +0 -0
  183. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/packaging/templates/deb-control.in +0 -0
  184. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/planning/__init__.py +0 -0
  185. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/planning/documents.py +0 -0
  186. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/planning/graph.py +0 -0
  187. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/planning/runtime_repository.py +0 -0
  188. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/postgresql.py +0 -0
  189. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/progress.py +0 -0
  190. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/publishing/__init__.py +0 -0
  191. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/py.typed +0 -0
  192. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/recipes/README.md +0 -0
  193. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/recipes/platforms/debian-13.yaml +0 -0
  194. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/recipes/postgresql.yaml +0 -0
  195. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/runners/__init__.py +0 -0
  196. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/runners/base.py +0 -0
  197. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/runners/docker.py +0 -0
  198. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/schemas/build.schema.json +0 -0
  199. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/schemas/change-set.schema.json +0 -0
  200. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/schemas/component-envelope.schema.json +0 -0
  201. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/schemas/component.schema.json +0 -0
  202. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/schemas/defaults.schema.json +0 -0
  203. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/schemas/doc-rules.schema.json +0 -0
  204. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/schemas/documentation.schema.json +0 -0
  205. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/schemas/environment.schema.json +0 -0
  206. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/schemas/feature.schema.json +0 -0
  207. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/schemas/insertions.schema.json +0 -0
  208. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/schemas/operation-input.schema.json +0 -0
  209. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/schemas/operation-state.schema.json +0 -0
  210. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/schemas/plan.schema.json +0 -0
  211. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/schemas/platform.schema.json +0 -0
  212. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/schemas/postgresql-catalog.schema.json +0 -0
  213. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/schemas/run-event.schema.json +0 -0
  214. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/schemas/translations.schema.json +0 -0
  215. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/schemas/vendor.schema.json +0 -0
  216. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/security.py +0 -0
  217. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/sources/__init__.py +0 -0
  218. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/sources/store.py +0 -0
  219. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/storage.py +0 -0
  220. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/validation/__init__.py +0 -0
  221. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/validation/installed.py +0 -0
  222. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/validation/packages.py +0 -0
  223. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/validation/systemctl.py +0 -0
  224. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker/yamlio.py +0 -0
  225. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker.egg-info/dependency_links.txt +0 -0
  226. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker.egg-info/entry_points.txt +0 -0
  227. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker.egg-info/requires.txt +0 -0
  228. {pg_maker-0.1.0 → pg_maker-0.2.0}/src/pg_maker.egg-info/top_level.txt +0 -0
  229. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/__init__.py +0 -0
  230. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/conftest.py +0 -0
  231. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/guc/README.md +0 -0
  232. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/guc/compact-golden.c +0 -0
  233. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/guc/compact.c +0 -0
  234. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/guc/expanded-golden.c +0 -0
  235. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/guc/expanded.c +0 -0
  236. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage4/README.md +0 -0
  237. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage4/insertion.yaml +0 -0
  238. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage4/library/Makefile +0 -0
  239. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage4/library/check.c +0 -0
  240. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage4/library/probe.c +0 -0
  241. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage4/marker.sql +0 -0
  242. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage4/marker.yaml +0 -0
  243. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage4/probe/Makefile +0 -0
  244. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage4/probe/expected/probe.out +0 -0
  245. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage4/probe/pg_maker_probe--1.0.sql +0 -0
  246. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage4/probe/pg_maker_probe.c +0 -0
  247. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage4/probe/pg_maker_probe.control +0 -0
  248. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage4/probe/sql/probe.sql +0 -0
  249. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage4/probe.yaml +0 -0
  250. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage4/source-tree/Makefile +0 -0
  251. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage4/source-tree/expected/probe.out +0 -0
  252. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage4/source-tree/pg_maker_probe--1.0.sql +0 -0
  253. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage4/source-tree/pg_maker_probe.c +0 -0
  254. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage4/source-tree/pg_maker_probe.control +0 -0
  255. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage4/source-tree/sql/probe.sql +0 -0
  256. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage4/utility/Makefile +0 -0
  257. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage4/utility/main.c +0 -0
  258. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage7/17.5/COPYRIGHT +0 -0
  259. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage7/17.5/config.sgml +0 -0
  260. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage7/17.5/filelist.sgml +0 -0
  261. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage7/17.5/postgres.sgml +0 -0
  262. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage7/17.5/reference.sgml +0 -0
  263. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage7/17.5/sections.sgml +0 -0
  264. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage7/17.5/upstream.json +0 -0
  265. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage7/17.5/version.sgml +0 -0
  266. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage7/17.5-golden.sgml +0 -0
  267. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage7/18.1/COPYRIGHT +0 -0
  268. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage7/18.1/config.sgml +0 -0
  269. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage7/18.1/filelist.sgml +0 -0
  270. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage7/18.1/postgres.sgml +0 -0
  271. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage7/18.1/reference.sgml +0 -0
  272. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage7/18.1/sections.sgml +0 -0
  273. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage7/18.1/upstream.json +0 -0
  274. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage7/18.1/version.sgml +0 -0
  275. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage7/18.1-golden.sgml +0 -0
  276. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/fixtures/stage7/README.md +0 -0
  277. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/integration/test_build_cancellation.py +0 -0
  278. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/integration/test_build_pipeline.py +0 -0
  279. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/integration/test_development_pipeline.py +0 -0
  280. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/integration/test_distribution.py +0 -0
  281. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/integration/test_docker_operations.py +0 -0
  282. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/integration/test_documentation_pipeline.py +0 -0
  283. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/integration/test_preparation.py +0 -0
  284. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/unit/test_agent_workspace.py +0 -0
  285. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/unit/test_build.py +0 -0
  286. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/unit/test_default_components.py +0 -0
  287. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/unit/test_development.py +0 -0
  288. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/unit/test_documentation.py +0 -0
  289. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/unit/test_documentation_site.py +0 -0
  290. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/unit/test_packaging.py +0 -0
  291. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/unit/test_postgresql_catalog.py +0 -0
  292. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/unit/test_process.py +0 -0
  293. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/unit/test_recovery.py +0 -0
  294. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/unit/test_review_changes.py +0 -0
  295. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/unit/test_review_contracts.py +0 -0
  296. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/unit/test_runtime_integration.py +0 -0
  297. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/unit/test_state.py +0 -0
  298. {pg_maker-0.1.0 → pg_maker-0.2.0}/tests/unit/test_storage_documents.py +0 -0
  299. {pg_maker-0.1.0 → pg_maker-0.2.0}/tools/ci_pipeline.py +0 -0
@@ -24,6 +24,8 @@ operations/
24
24
  /development/
25
25
  /work/
26
26
  /delivery/
27
+ # Local project generated for the managed PostgreSQL / ICU build.
28
+ /yc16/
27
29
  *.log
28
30
  .DS_Store
29
31
  Thumbs.db
@@ -0,0 +1,44 @@
1
+ # Changelog
2
+
3
+ ## 0.2.0 — 2026-11-03
4
+
5
+ - Select the requested architecture from Docker multi-platform image stores during
6
+ environment preparation, including amd64 builds under ARM emulation.
7
+ - Configurable two-part PostgreSQL or three-part product versions; package revisions
8
+ remain independent.
9
+ - Source-pinned libraries before PostgreSQL configure, exact private pkg-config checks,
10
+ runtime delivery and core/cache invalidation on library changes.
11
+ - CMake components, locked auxiliary sources and installed extension-version checks.
12
+ - Debian 13 PostgreSQL 16.15 / ICU 70.1 init profile with a complete 38-name managed
13
+ extension catalog, 34 selected SQL extensions from 26 recipes and four explicit
14
+ exclusions.
15
+ - Upstream PostgreSQL 16 build fixes for jsquery and pg_cron without changing their
16
+ SQL versions, and the docutils build dependency required by spqrhash installation.
17
+ - Public GitHub SSH submodules resolve over HTTPS within public HTTPS checkouts.
18
+ - Installed-wheel coverage for the complete named profile, including source pins
19
+ and managed SQL versions. Local build inputs and outputs are excluded from Git.
20
+
21
+ The amd64 server built under QEMU reports ICU collation version 153.112. The full
22
+ extension set and final DEB installation are still being qualified; selected catalog
23
+ entries retain their unverified status.
24
+
25
+ ## 0.1.0 — 2026-10-18
26
+
27
+ Initial alpha of the PostgreSQL distribution controller:
28
+
29
+ - Strict YAML configuration, pinned sources/environments, immutable locks and plans.
30
+ - Isolated Docker builds, durable operations, events, cancellation, recovery and caches.
31
+ - PostgreSQL 14–19 catalog; initial Debian 13 / x86_64 / DEB platform.
32
+ - Default pg_stat_statements, pg_stat_kcache and pg_wait_sampling recipes with manuals.
33
+ - Documentation-only and combined builds using DocBook/Sphinx, local assets, HTML/man/PDF
34
+ and explicit translation bundles.
35
+ - Server/client/libpq/docs packaging, manifests, offline installation checks and exports.
36
+ - Owned Git development sessions, patch import/refresh/pop/push/rebase, conflict recovery,
37
+ selected component rebuilds, debug commands and iteration retention.
38
+ - Optional pg_play CLI/API/MCP integration and runtime image handoff.
39
+ - English project documentation, distribution-content checks and a tag-triggered PyPI
40
+ Trusted Publishing workflow.
41
+
42
+ Database suites are opt-in; quick/development builds remain unverified. RPM, additional
43
+ platforms and PostgreSQL distribution repository publication remain future work.
44
+ See the [roadmap](docs/roadmap.md) and dated validation reports for precise boundaries.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pg-maker
3
- Version: 0.1.0
3
+ Version: 0.2.0
4
4
  Summary: Build PostgreSQL distributions, documentation and patches in isolated environments
5
5
  Author-email: O2eg <oleg.ispu@gmail.com>
6
6
  License-Expression: MIT
@@ -76,6 +76,11 @@ A built wheel can be installed with `python -m pip install /path/to/pg_maker-VER
76
76
 
77
77
  ## Build a distribution
78
78
 
79
+ For PostgreSQL 16.15 with private ICU 70.1 and the managed extension catalog, use
80
+ `pg-maker init example --profile yc-16.15-icu70`.
81
+ See the [profile and version policy](docs/managed-16-icu70.md) for included recipes,
82
+ explicit exclusions and qualification limits. The default init profile is unchanged.
83
+
79
84
  ```bash
80
85
  pg-maker init example
81
86
  pg-maker validate example/build.yaml
@@ -39,6 +39,11 @@ A built wheel can be installed with `python -m pip install /path/to/pg_maker-VER
39
39
 
40
40
  ## Build a distribution
41
41
 
42
+ For PostgreSQL 16.15 with private ICU 70.1 and the managed extension catalog, use
43
+ `pg-maker init example --profile yc-16.15-icu70`.
44
+ See the [profile and version policy](docs/managed-16-icu70.md) for included recipes,
45
+ explicit exclusions and qualification limits. The default init profile is unchanged.
46
+
42
47
  ```bash
43
48
  pg-maker init example
44
49
  pg-maker validate example/build.yaml
@@ -42,6 +42,28 @@ output/commands.
42
42
 
43
43
  ## Builders and components
44
44
 
45
+ Components with `type: library` and `build_phase: before-postgresql` build before
46
+ core configure. They require exact `pkg_config_versions`; both version and the
47
+ resolved private `libdir` are checked before proceeding. `provides_options: [icu]`
48
+ replaces direct platform build/runtime dependencies for that option in this feature.
49
+ Other system dependencies may still pull their own ICU transitively. The private
50
+ prefix is first in PKG_CONFIG_PATH and LD_LIBRARY_PATH; binaries/libraries receive
51
+ its lib directory in RPATH. Source/recipe changes invalidate core and dependent caches.
52
+ Library files are inventoried before core install and only declared runtime_files
53
+ are packaged. This path supports quick builds; full library qualification is rejected
54
+ explicitly until a test-evidence adapter is available.
55
+
56
+ External library/utility components may select `build_system: cmake`. Configure uses
57
+ an out-of-source directory, private install prefix and RPATH, then bounded parallel
58
+ build and install. CMake database qualification is not implemented. Recipe
59
+ `configure_args` accept `{prefix}` and `{source:NAME}` for a named `extra_sources`
60
+ input. Extra sources use the same pinned resolver, offline store, locks, cache hashes
61
+ and portable exports as primary sources; they never download during compilation.
62
+
63
+ `sql_extension_versions: {vector: '0.8.2'}` verifies installed control files even in
64
+ quick mode. It checks package contents, not ABI, index-format or query correctness.
65
+ See [the managed profile](../managed-16-icu70.md).
66
+
45
67
  `builders.autotools` contains validate_build, extra_tests, expected_inventory,
46
68
  reconcile and required-test validation. Queries execute Make inside the container.
47
69
  A new backend needs a module, explicit dispatch, supported-settings schema and real
@@ -49,6 +49,15 @@ custom value. Conflicting postconditions produce `validation_error`. Automatic
49
49
  baseline selection enables it for custom changes; explicit false is invalid when
50
50
  acceptance includes baseline expectations.
51
51
 
52
+ ## Product version format
53
+
54
+ `spec.product.version_format` selects `three-part` (default, `16.15.0`) or
55
+ `postgresql` (`16.15`). The latter requires `release: 0`; use `package_revision`
56
+ for package rebuilds. DEB revisions/suffixes still apply, e.g. `16.15-1.deb13`.
57
+ An explicit `product.version` must match the computed value. Prerelease identities
58
+ retain Debian ordering (`19.0~rc1` with PostgreSQL format). Naming policy v3 is
59
+ recorded in identities; server source/version strings are not rewritten.
60
+
52
61
  ## Previous releases
53
62
 
54
63
  `spec.previous_releases` optionally supplies packages for same-major upgrade checks.
@@ -0,0 +1,173 @@
1
+ # PostgreSQL 16.15 with private ICU 70.1
2
+
3
+ This profile targets Debian 13 / x86_64 / DEB. It builds upstream PostgreSQL 16.15
4
+ with source-pinned ICU 70.1, installs the required ICU runtime libraries inside the
5
+ product prefix and selects public-source extensions from the managed catalog.
6
+ It does not reproduce Yandex patches or claim vendor binary compatibility.
7
+
8
+ ## Create and build
9
+
10
+ ```bash
11
+ pg-maker init yc16 --profile yc-16.15-icu70
12
+ pg-maker validate yc16/build.yaml
13
+ pg-maker config show yc16/build.yaml --resolved
14
+ pg-maker env prepare yc16/build.yaml --out yc16/environments.json --operations yc16/operations
15
+ pg-maker resolve yc16/build.yaml --environments yc16/environments.json --out yc16/lock.json --input-store yc16/inputs --operations yc16/operations
16
+ pg-maker plan yc16/lock.json --goal package --out yc16/plan.json
17
+ pg-maker build yc16/lock.json --plan yc16/plan.json --operations yc16/operations --detach
18
+ ```
19
+
20
+ Run as the non-root UID/GID in `config/defaults.yaml` (default `1000:1000`). All
21
+ project files remain editable. The standard `init` still creates the 18.1 profile.
22
+ Reserve substantially more than the configured 20 GiB minimum for the complete
23
+ extension set, especially PostGIS/GDAL and PLV8/V8, inputs and checkpoints.
24
+ No full amd64 distribution build has yet qualified this new profile. Each selected
25
+ extension is marked `selected-unverified`, never implicitly certified by metadata.
26
+
27
+ ## Version policy
28
+
29
+ The profile contains:
30
+
31
+ ```yaml
32
+ postgresql:
33
+ version: '16.15'
34
+ product:
35
+ release: 0
36
+ package_revision: 1
37
+ version_format: postgresql
38
+ ```
39
+
40
+ Product version is `16.15`; the Debian package version remains `16.15-1.deb13`.
41
+ The latter suffix is packaging metadata, not an extra PostgreSQL version component.
42
+ Set `version_format: three-part` to get `16.15.0`; this remains the backward-compatible
43
+ default when omitted. PostgreSQL format requires `release: 0`, avoiding silently
44
+ discarded vendor release numbers. Increment package_revision for rebuilds.
45
+ PostgreSQL's own `version()` and pg_config version are taken from upstream sources.
46
+
47
+ ## Pinned library mechanism
48
+
49
+ `components/libraries/icu70.yaml` pins the upstream ICU 70.1 source archive by SHA256.
50
+ The recipe is part of the selected feature and is resolved into the immutable lock.
51
+
52
+ ```yaml
53
+ type: library
54
+ build_phase: before-postgresql
55
+ pkg_config_versions:
56
+ icu-i18n: '70.1'
57
+ icu-uc: '70.1'
58
+ provides_options: [icu]
59
+ ```
60
+
61
+ Execution builds/installs the library before PostgreSQL configure, checks exact
62
+ pkg-config versions and private libdir, and records `library_versions` in the report.
63
+ The core and every dependent component use the private library search paths.
64
+ Changing library sources, version assertions or build options invalidates core reuse.
65
+ System ICU is not downgraded: the feature removes the direct libicu-dev/libicu76
66
+ requirements; other platform libraries may still need system ICU independently.
67
+
68
+ The server DEB includes libicudata.so.70, libicuuc.so.70 and libicui18n.so.70 with
69
+ their versioned targets. Development headers and unselected ICU tools are excluded.
70
+ RPATH is checked by the existing ELF/package validator. Installing a package never
71
+ initializes or starts a database automatically.
72
+
73
+ The mechanism accepts other source-pinned Make/Autotools libraries with private
74
+ pkg-config files. A provider must correspond to an enabled PostgreSQL option;
75
+ multiple providers for the same option or dependencies on post-core components fail.
76
+ It does not infer unspecified dependency versions or enable network access in builds.
77
+
78
+ ## Managed extension coverage
79
+
80
+ The source inventory is the 2026-11-02 non-contrib catalog snapshot from
81
+ `rc1d-kp80p78vpf7pi1pd.mdb.yandexcloud.net`, database `ad_analytics`.
82
+ Only pg_repack was installed in that database; the list describes availability.
83
+ The editable [catalog](../src/pg_maker/bundled/catalogs/yc-16.15-extensions.yaml)
84
+ retains all 38 names, default/installed/catalog versions, source pins, selection and
85
+ exclusion reasons. The profile selects 34 SQL extensions through 26 source recipes,
86
+ plus contrib pg_stat_statements and ICU. No missing component is silently substituted.
87
+
88
+ SQL extension versions are not necessarily project release versions. For example,
89
+ pg_cron 1.5.2 plus upstream compiler fix `0cb8118` supplies SQL version 1.5;
90
+ RUM 1.3.14 supplies 1.3; jsquery commit `40b1db5` includes its PostgreSQL 16
91
+ compatibility fix and retains SQL version 1.1. AGE uses the PG16/v1.5.0-rc0
92
+ source tag whose control file declares 1.5.0.
93
+ Repositories without a release tag are pinned to a specific commit. These choices
94
+ match control versions, not a proven managed implementation/patchset.
95
+
96
+ PostGIS supplies seven catalog entries. pglogical also supplies pglogical_origin;
97
+ h3 supplies h3_postgis. CMake recipes use explicit private pg_config paths. H3's
98
+ core source is a separate hash-pinned input passed via FETCHCONTENT_SOURCE_DIR_H3,
99
+ with FetchContent downloads disabled. Git submodules, including PLV8's inputs, are
100
+ frozen by the existing resolver before compilation.
101
+
102
+ Four entries require additional inputs:
103
+
104
+ | Extension | Managed SQL version | Status and action |
105
+ | --- | --- | --- |
106
+ | anon | 1.3.2.1 | Exact vendor variant unconfirmed. Supply matching sources/recipe; do not relabel 1.3.2. |
107
+ | lwaldump | 1.0 | Matching public source not located. Supply vendor sources. |
108
+ | oracle_fdw | 1.2 | Pinned upstream recipe is provided but not selected. Provision Oracle Instant Client SDK/runtime, paths and runtime dependency policy before enabling it. |
109
+ | pgvector | 0.8.2 | Managed alias has no separate upstream control/library in the vector release. Upstream vector 0.8.2 is selected. Do not fabricate an alias for physical catalog compatibility. |
110
+
111
+ Additional patches/libraries needed by managed preloads such as repl_mon are outside
112
+ this non-contrib SQL catalog; this profile is not a drop-in managed-server clone.
113
+
114
+ ## Acceptance before using physical data
115
+
116
+ Source version pinning and control-file checks do not qualify physical replication.
117
+ On an isolated fresh database initialized with ICU en-US, require:
118
+
119
+ ```sql
120
+ SELECT datlocprovider, daticulocale, datcollversion AS stored,
121
+ pg_database_collation_actual_version(oid) AS actual
122
+ FROM pg_database WHERE datname=current_database();
123
+ -- Expected: i | en-US | 153.112 | 153.112
124
+ SELECT 'O''Connor' < 'O’Brien';
125
+ -- Expected: true
126
+ ```
127
+
128
+ Check loaded libicu paths of the running postgres process, all used explicit
129
+ collations, extension compatibility and index-versus-sequential query results on an
130
+ isolated physical pair. Matching collation version alone does not establish identical
131
+ ICU data or vendor patches. Do not use REFRESH COLLATION VERSION to hide a mismatch.
132
+ Default LC_COLLATE/LC_CTYPE and any libc-based objects need separate compatibility
133
+ checks when the OS differs. Physical PGDATA must never be initialized with initdb.
134
+
135
+ PostgreSQL 16's full database-test evidence adapter remains unavailable, so the
136
+ profile builds/packages in quick mode and reports unverified. Pre-core libraries and
137
+ CMake components also reject full qualification rather than marking skipped tests
138
+ as passed. Instructions to run the new profile are not evidence that all 34 extensions
139
+ have compiled, loaded or passed application queries on this platform.
140
+
141
+ Source references: [PostgreSQL 16.15](https://ftp.postgresql.org/pub/source/v16.15/),
142
+ [ICU 70.1](https://github.com/unicode-org/icu/releases/tag/release-70-1),
143
+ [PostGIS 3.4.0](https://download.osgeo.org/postgis/source/postgis-3.4.0.tar.gz),
144
+ [h3-pg 4.1.3](https://github.com/postgis/h3-pg/tree/v4.1.3).
145
+ Other per-extension source URLs and immutable refs are in the catalog.
146
+
147
+ ## Validation recorded on 2026-11-03
148
+
149
+ - 288 unit/contract checks and one small native CMake integration check passed. These cover
150
+ both version formats, rejection of discarded release numbers, the complete
151
+ catalog, pre-configure ordering, cache invalidation, frozen auxiliary inputs,
152
+ private-library/version failures and extension control-version failures.
153
+ - The real ICU 70.1 archive was compiled/installed by the component builder in an
154
+ isolated local directory. A linked ICU C probe using ucol_open("en-US") and
155
+ ucol_getVersion returned **153.112** on the aarch64 workstation. This verifies
156
+ the source/library path, not the target amd64 PostgreSQL executable or DEB.
157
+ - After disk cleanup, Debian 13 amd64 compilation was started under QEMU on the
158
+ aarch64 workstation, with four build jobs and an 8 GiB memory limit. Environment
159
+ preparation took 6m28s, ICU build/install 11m23s, PostgreSQL configure 2m39s,
160
+ PostgreSQL core compilation 10m47s.
161
+ - The resulting amd64 PostgreSQL 16.15 executable started successfully in an
162
+ isolated fresh ICU en-US database: both stored and actual collation versions
163
+ were **153.112**. This is a source-prefix smoke test, not DEB installation evidence.
164
+ - Real extension compilation exposed old-source issues in jsquery and pg_cron.
165
+ Both recipes now pin upstream fixes while preserving the managed SQL versions.
166
+ The spqrhash recipe also declares python3-docutils, needed by its install target
167
+ to generate bundled HTML documentation with rst2html.
168
+ The complete extension set and DEB installation qualification remain pending;
169
+ no full package is certified by these partial results.
170
+ - The installed-wheel smoke check creates this named profile, validates its
171
+ version/platform/private-ICU policy, checks all 38 catalog entries and the 34
172
+ selected SQL versions, and verifies source pins against the catalog. The same
173
+ check runs in the existing distribution CI job.
@@ -38,11 +38,11 @@ ruff check .
38
38
  ruff format --check .
39
39
  python tools/generate_planning_schemas.py
40
40
  git diff --exit-code -- src/pg_maker/schemas
41
- python tools/check_release.py --tag v0.1.0
41
+ python tools/check_release.py --tag v0.2.0
42
42
  python -m pytest -q tests/unit tests/contracts
43
43
  python -m build
44
44
  python -m twine check --strict dist/*
45
- python tools/check_release.py --dist dist --tag v0.1.0
45
+ python tools/check_release.py --dist dist --tag v0.2.0
46
46
  python tools/smoke_wheel.py dist/*.whl
47
47
  ```
48
48
 
@@ -83,8 +83,8 @@ version tag matching the package:
83
83
  ```bash
84
84
  git remote add origin git@github.com:O2eg/pg_maker.git # Only if origin is not configured.
85
85
  git push -u origin main
86
- git tag -a v0.1.0 -m "pg_maker 0.1.0"
87
- git push origin v0.1.0
86
+ git tag -a v0.2.0 -m "pg_maker 0.2.0"
87
+ git push origin v0.2.0
88
88
  ```
89
89
 
90
90
  publish.yml calls the same tests workflow on the tag. The distribution job validates
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "pg-maker"
7
- version = "0.1.0"
7
+ version = "0.2.0"
8
8
  description = "Build PostgreSQL distributions, documentation and patches in isolated environments"
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"
@@ -59,6 +59,8 @@ pg_maker = [
59
59
  "bundled/*.yaml", "bundled/config/*.yaml", "bundled/config/features/*.yaml",
60
60
  "bundled/patches/*.patch", "recipes/platforms/*.yaml",
61
61
  "bundled/components/*.yaml", "bundled/documentation/*.yaml",
62
+ "bundled/components/managed/*.yaml", "bundled/components/libraries/*.yaml",
63
+ "bundled/catalogs/*.yaml", "bundled/profiles/*.yaml",
62
64
  "bundled/documentation/*.sgml", "bundled/documentation/*.md",
63
65
  "packaging/templates/*.in",
64
66
  "documentation/theme/_templates/*.html", "documentation/theme/_static/*.css",
@@ -1,3 +1,3 @@
1
1
  """PostgreSQL distribution maker. Public services live in pg_maker.api."""
2
2
 
3
- __version__ = "0.1.0"
3
+ __version__ = "0.2.0"
@@ -270,6 +270,12 @@ def export_operation(directory: Path, destination: Path, *, include_inputs=False
270
270
  for c in f["spec"]["components"]
271
271
  if "source" in c["spec"]
272
272
  )
273
+ trees.update(
274
+ source["source_hash"]
275
+ for f in config["features"]
276
+ for c in f["spec"]["components"]
277
+ for source in c["spec"].get("extra_sources", {}).values()
278
+ )
273
279
  destination_store = InputStore(staging / "inputs")
274
280
  for digest in trees:
275
281
  destination_store.put_tree(store.tree(digest))
@@ -8,12 +8,22 @@ from pg_maker.storage import ensure_directory, write_text
8
8
 
9
9
 
10
10
  def initialize_project(
11
- directory: Path, *, with_doc=None, doc_languages=None, features=None, build_mode=None
11
+ directory: Path,
12
+ *,
13
+ with_doc=None,
14
+ doc_languages=None,
15
+ features=None,
16
+ build_mode=None,
17
+ profile=None,
12
18
  ) -> dict:
13
19
  ensure_directory(directory)
14
20
  assets = {"README.md": files("pg_maker").joinpath("bundled", "PROJECT.md").read_text()}
15
21
  bundled = files("pg_maker").joinpath("bundled")
16
22
  assets["build.yaml"] = bundled.joinpath("build.yaml").read_text()
23
+ if profile is not None:
24
+ if profile != "yc-16.15-icu70":
25
+ raise ValidationError("unknown build profile")
26
+ assets["build.yaml"] = bundled.joinpath("profiles", profile + ".yaml").read_text()
17
27
  for item in bundled.joinpath("config").iterdir():
18
28
  if item.name.endswith(".yaml"):
19
29
  assets[f"config/{item.name}"] = item.read_text()
@@ -32,7 +42,7 @@ def initialize_project(
32
42
  else:
33
43
  assets[name] = item.read_text()
34
44
 
35
- for directory_name in ("components", "documentation"):
45
+ for directory_name in ("components", "documentation", "catalogs"):
36
46
  collect(bundled.joinpath(directory_name), directory_name)
37
47
  for item in files("pg_maker").joinpath("schemas").iterdir():
38
48
  if item.name.endswith(".json"):
@@ -162,6 +162,12 @@ def validate_build(config: dict, goal: str, *, run_db_tests: bool = True) -> Non
162
162
  for feature in config["features"]:
163
163
  for component in feature["spec"]["components"]:
164
164
  spec = component["spec"]
165
+ if run_db_tests and spec.get("build_system") == "cmake":
166
+ raise UnsupportedError("CMake component DB-test evidence is not implemented")
167
+ if run_db_tests and spec.get("build_phase") == "before-postgresql":
168
+ raise UnsupportedError(
169
+ "pre-PostgreSQL library test qualification is not implemented"
170
+ )
165
171
  if (
166
172
  run_db_tests
167
173
  and spec["type"] in {"pgxs", "utility", "library"}
@@ -96,6 +96,26 @@ def cluster(branch, name, *, database="postgres", preload=()):
96
96
  raise
97
97
 
98
98
 
99
+ def verify_extension_versions(branch, spec):
100
+ """Check delivered control files even in quick mode; this is not database qualification."""
101
+ for name, expected in spec.get("sql_extension_versions", {}).items():
102
+ control = branch.root / "prefix/share/postgresql/extension" / (name + ".control")
103
+ if not control.is_file():
104
+ raise PreconditionError(
105
+ "extension control file is missing", details={"extension": name}
106
+ )
107
+ found = re.search(r"^\s*default_version\s*=\s*'([^']+)'", control.read_text(), re.M)
108
+ if not found or found[1] != expected:
109
+ raise PreconditionError(
110
+ "extension version differs from recipe",
111
+ details={
112
+ "extension": name,
113
+ "expected": expected,
114
+ "actual": found[1] if found else None,
115
+ },
116
+ )
117
+
118
+
99
119
  def build_components(branch, components, *, run_tests=True):
100
120
  reports = []
101
121
  for component in components:
@@ -120,11 +140,61 @@ def build_components(branch, components, *, run_tests=True):
120
140
  cwd += "/" + spec["source_directory"]
121
141
  path /= spec["source_directory"]
122
142
  component_source, container_source = path, cwd
143
+ configure_args = [
144
+ arg.replace("{prefix}", branch.prefix) for arg in spec.get("configure_args", [])
145
+ ]
146
+ for name, source in spec.get("extra_sources", {}).items():
147
+ extra_path = branch.root / "extra-sources" / identifier / name
148
+ if not extra_path.exists():
149
+ shutil.copytree(
150
+ branch.inputs.tree(source["source_hash"]), extra_path, symlinks=True
151
+ )
152
+ extra_container = (
153
+ branch.container_root + "/extra-sources/" + identifier + "/" + name
154
+ )
155
+ configure_args = [
156
+ arg.replace("{source:" + name + "}", extra_container) for arg in configure_args
157
+ ]
158
+ if spec.get("build_system") == "cmake":
159
+ build_path = cwd + "/pg-maker-build"
160
+ branch.command(
161
+ [
162
+ "cmake",
163
+ "-S",
164
+ cwd,
165
+ "-B",
166
+ build_path,
167
+ "-DCMAKE_INSTALL_PREFIX=" + branch.prefix,
168
+ "-DCMAKE_INSTALL_RPATH=" + branch.prefix + "/lib",
169
+ *configure_args,
170
+ ],
171
+ cwd=cwd,
172
+ )
173
+ branch.command(
174
+ [
175
+ "cmake",
176
+ "--build",
177
+ build_path,
178
+ "--parallel",
179
+ str(branch.variant["build"]["jobs"]),
180
+ ],
181
+ cwd=cwd,
182
+ )
183
+ branch.command(["cmake", "--install", build_path], cwd=cwd)
184
+ verify_extension_versions(branch, spec)
185
+ reports.append(
186
+ {"id": identifier, "built": True, "native_targets": [], "tests": "skipped"}
187
+ )
188
+ continue
123
189
  if spec.get("configure_args") or (
124
190
  kind in {"utility", "library"} and (path / "configure").is_file()
125
191
  ):
126
192
  branch.command(
127
- ["./configure", "--prefix=" + branch.prefix, *spec.get("configure_args", [])],
193
+ [
194
+ "./configure",
195
+ "--prefix=" + branch.prefix,
196
+ *configure_args,
197
+ ],
128
198
  cwd=cwd,
129
199
  )
130
200
  make = ["make", "--output-sync=target", "-j", str(branch.variant["build"]["jobs"])]
@@ -137,6 +207,7 @@ def build_components(branch, components, *, run_tests=True):
137
207
  for targets in (spec["make_targets"], spec["install_targets"]):
138
208
  if targets:
139
209
  branch.command([*make, *targets], cwd=cwd)
210
+ verify_extension_versions(branch, spec)
140
211
  if not run_tests:
141
212
  reports.append(
142
213
  {"id": identifier, "built": True, "native_targets": [], "tests": "skipped"}