pg-maker 0.1.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 (262) hide show
  1. pg_maker-0.1.0/.gitattributes +9 -0
  2. pg_maker-0.1.0/.github/workflows/publish.yml +34 -0
  3. pg_maker-0.1.0/.github/workflows/tests.yml +117 -0
  4. pg_maker-0.1.0/.gitignore +33 -0
  5. pg_maker-0.1.0/CHANGELOG.md +22 -0
  6. pg_maker-0.1.0/CONTRIBUTING.md +63 -0
  7. pg_maker-0.1.0/LICENSE +21 -0
  8. pg_maker-0.1.0/MANIFEST.in +10 -0
  9. pg_maker-0.1.0/PKG-INFO +200 -0
  10. pg_maker-0.1.0/README.md +163 -0
  11. pg_maker-0.1.0/docs/architecture.md +55 -0
  12. pg_maker-0.1.0/docs/development-storage.md +72 -0
  13. pg_maker-0.1.0/docs/development.md +86 -0
  14. pg_maker-0.1.0/docs/interfaces/README.md +32 -0
  15. pg_maker-0.1.0/docs/interfaces/api.md +75 -0
  16. pg_maker-0.1.0/docs/interfaces/build.md +112 -0
  17. pg_maker-0.1.0/docs/interfaces/changes.md +58 -0
  18. pg_maker-0.1.0/docs/interfaces/cleanup.md +17 -0
  19. pg_maker-0.1.0/docs/interfaces/components.md +39 -0
  20. pg_maker-0.1.0/docs/interfaces/configuration.md +83 -0
  21. pg_maker-0.1.0/docs/interfaces/development.md +88 -0
  22. pg_maker-0.1.0/docs/interfaces/documentation.md +241 -0
  23. pg_maker-0.1.0/docs/interfaces/documents.md +42 -0
  24. pg_maker-0.1.0/docs/interfaces/environments.md +40 -0
  25. pg_maker-0.1.0/docs/interfaces/execution.md +49 -0
  26. pg_maker-0.1.0/docs/interfaces/machine.md +31 -0
  27. pg_maker-0.1.0/docs/interfaces/observability.md +28 -0
  28. pg_maker-0.1.0/docs/interfaces/packaging.md +107 -0
  29. pg_maker-0.1.0/docs/interfaces/planning.md +63 -0
  30. pg_maker-0.1.0/docs/interfaces/postgresql.md +79 -0
  31. pg_maker-0.1.0/docs/interfaces/publication.md +20 -0
  32. pg_maker-0.1.0/docs/interfaces/recovery.md +83 -0
  33. pg_maker-0.1.0/docs/interfaces/runtime.md +31 -0
  34. pg_maker-0.1.0/docs/interfaces/sources.md +48 -0
  35. pg_maker-0.1.0/docs/interfaces/state.md +49 -0
  36. pg_maker-0.1.0/docs/interfaces/storage.md +24 -0
  37. pg_maker-0.1.0/docs/releasing.md +98 -0
  38. pg_maker-0.1.0/docs/reuse.md +24 -0
  39. pg_maker-0.1.0/docs/roadmap.md +54 -0
  40. pg_maker-0.1.0/docs/validation/default-components.md +56 -0
  41. pg_maker-0.1.0/docs/validation/development-release.md +49 -0
  42. pg_maker-0.1.0/docs/validation/documentation-theme.md +45 -0
  43. pg_maker-0.1.0/docs/validation/integration.md +49 -0
  44. pg_maker-0.1.0/docs/validation/postgresql-majors.md +107 -0
  45. pg_maker-0.1.0/docs/validation/review-fixes.md +68 -0
  46. pg_maker-0.1.0/docs/validation/stage4.md +65 -0
  47. pg_maker-0.1.0/docs/validation/stage56.md +66 -0
  48. pg_maker-0.1.0/docs/validation/stage7.md +72 -0
  49. pg_maker-0.1.0/pyproject.toml +90 -0
  50. pg_maker-0.1.0/setup.cfg +4 -0
  51. pg_maker-0.1.0/src/pg_maker/__init__.py +3 -0
  52. pg_maker-0.1.0/src/pg_maker/__main__.py +3 -0
  53. pg_maker-0.1.0/src/pg_maker/api.py +594 -0
  54. pg_maker-0.1.0/src/pg_maker/artifacts/__init__.py +4 -0
  55. pg_maker-0.1.0/src/pg_maker/artifacts/catalog.py +67 -0
  56. pg_maker-0.1.0/src/pg_maker/artifacts/manifest.py +301 -0
  57. pg_maker-0.1.0/src/pg_maker/assets.py +93 -0
  58. pg_maker-0.1.0/src/pg_maker/builders/__init__.py +4 -0
  59. pg_maker-0.1.0/src/pg_maker/builders/autotools.py +430 -0
  60. pg_maker-0.1.0/src/pg_maker/builders/components.py +359 -0
  61. pg_maker-0.1.0/src/pg_maker/bundled/PROJECT.md +57 -0
  62. pg_maker-0.1.0/src/pg_maker/bundled/build.yaml +29 -0
  63. pg_maker-0.1.0/src/pg_maker/bundled/components/pg-stat-kcache.yaml +30 -0
  64. pg_maker-0.1.0/src/pg_maker/bundled/components/pg-stat-statements.yaml +24 -0
  65. pg_maker-0.1.0/src/pg_maker/bundled/components/pg-wait-sampling.yaml +30 -0
  66. pg_maker-0.1.0/src/pg_maker/bundled/config/defaults.yaml +80 -0
  67. pg_maker-0.1.0/src/pg_maker/bundled/config/documentation.yaml +24 -0
  68. pg_maker-0.1.0/src/pg_maker/bundled/config/features/my-feature.yaml +17 -0
  69. pg_maker-0.1.0/src/pg_maker/bundled/config/vendor.yaml +13 -0
  70. pg_maker-0.1.0/src/pg_maker/bundled/documentation/README.md +20 -0
  71. pg_maker-0.1.0/src/pg_maker/bundled/documentation/pg-stat-kcache.sgml +99 -0
  72. pg_maker-0.1.0/src/pg_maker/bundled/documentation/pg-stat-kcache.yaml +15 -0
  73. pg_maker-0.1.0/src/pg_maker/bundled/documentation/pg-wait-sampling.sgml +122 -0
  74. pg_maker-0.1.0/src/pg_maker/bundled/documentation/pg-wait-sampling.yaml +15 -0
  75. pg_maker-0.1.0/src/pg_maker/bundled/patches/unix-socket-directory.patch +5 -0
  76. pg_maker-0.1.0/src/pg_maker/changes/__init__.py +1 -0
  77. pg_maker-0.1.0/src/pg_maker/changes/apply.py +298 -0
  78. pg_maker-0.1.0/src/pg_maker/changes/loader.py +135 -0
  79. pg_maker-0.1.0/src/pg_maker/changes/workspace.py +221 -0
  80. pg_maker-0.1.0/src/pg_maker/cli.py +546 -0
  81. pg_maker-0.1.0/src/pg_maker/components/__init__.py +4 -0
  82. pg_maker-0.1.0/src/pg_maker/config.py +514 -0
  83. pg_maker-0.1.0/src/pg_maker/development/__init__.py +1 -0
  84. pg_maker-0.1.0/src/pg_maker/development/cli.py +104 -0
  85. pg_maker-0.1.0/src/pg_maker/development/git.py +362 -0
  86. pg_maker-0.1.0/src/pg_maker/development/session.py +735 -0
  87. pg_maker-0.1.0/src/pg_maker/documentation/__init__.py +4 -0
  88. pg_maker-0.1.0/src/pg_maker/documentation/builder.py +467 -0
  89. pg_maker-0.1.0/src/pg_maker/documentation/cli.py +24 -0
  90. pg_maker-0.1.0/src/pg_maker/documentation/config.py +127 -0
  91. pg_maker-0.1.0/src/pg_maker/documentation/install.py +79 -0
  92. pg_maker-0.1.0/src/pg_maker/documentation/site.py +166 -0
  93. pg_maker-0.1.0/src/pg_maker/documentation/sphinx_ext.py +150 -0
  94. pg_maker-0.1.0/src/pg_maker/documentation/theme/_static/pg-maker.css +26 -0
  95. pg_maker-0.1.0/src/pg_maker/documentation/theme/_static/pg-maker.js +35 -0
  96. pg_maker-0.1.0/src/pg_maker/documentation/theme/_templates/footer_en.html +5 -0
  97. pg_maker-0.1.0/src/pg_maker/documentation/theme/_templates/footer_metadata.html +13 -0
  98. pg_maker-0.1.0/src/pg_maker/documentation/theme/_templates/footer_ru.html +5 -0
  99. pg_maker-0.1.0/src/pg_maker/documentation/translation.py +341 -0
  100. pg_maker-0.1.0/src/pg_maker/documentation/validation.py +132 -0
  101. pg_maker-0.1.0/src/pg_maker/documentation/worker.py +62 -0
  102. pg_maker-0.1.0/src/pg_maker/documentation/writer.py +324 -0
  103. pg_maker-0.1.0/src/pg_maker/documentation/xml.py +210 -0
  104. pg_maker-0.1.0/src/pg_maker/documents.py +118 -0
  105. pg_maker-0.1.0/src/pg_maker/errors.py +50 -0
  106. pg_maker-0.1.0/src/pg_maker/execution/__init__.py +1 -0
  107. pg_maker-0.1.0/src/pg_maker/execution/build.py +502 -0
  108. pg_maker-0.1.0/src/pg_maker/execution/cache.py +287 -0
  109. pg_maker-0.1.0/src/pg_maker/execution/cancellation.py +60 -0
  110. pg_maker-0.1.0/src/pg_maker/execution/checkpoints.py +218 -0
  111. pg_maker-0.1.0/src/pg_maker/execution/cleanup.py +122 -0
  112. pg_maker-0.1.0/src/pg_maker/execution/component_cache.py +164 -0
  113. pg_maker-0.1.0/src/pg_maker/execution/development.py +109 -0
  114. pg_maker-0.1.0/src/pg_maker/execution/engine.py +171 -0
  115. pg_maker-0.1.0/src/pg_maker/execution/events.py +65 -0
  116. pg_maker-0.1.0/src/pg_maker/execution/incremental.py +178 -0
  117. pg_maker-0.1.0/src/pg_maker/execution/preparation.py +130 -0
  118. pg_maker-0.1.0/src/pg_maker/execution/process.py +155 -0
  119. pg_maker-0.1.0/src/pg_maker/execution/resources.py +41 -0
  120. pg_maker-0.1.0/src/pg_maker/execution/state.py +82 -0
  121. pg_maker-0.1.0/src/pg_maker/execution/worker.py +45 -0
  122. pg_maker-0.1.0/src/pg_maker/identity.py +116 -0
  123. pg_maker-0.1.0/src/pg_maker/integrations/__init__.py +1 -0
  124. pg_maker-0.1.0/src/pg_maker/integrations/machine.py +163 -0
  125. pg_maker-0.1.0/src/pg_maker/integrations/runtime.py +387 -0
  126. pg_maker-0.1.0/src/pg_maker/models.py +245 -0
  127. pg_maker-0.1.0/src/pg_maker/packaging/__init__.py +4 -0
  128. pg_maker-0.1.0/src/pg_maker/packaging/deb.py +337 -0
  129. pg_maker-0.1.0/src/pg_maker/packaging/service.py +165 -0
  130. pg_maker-0.1.0/src/pg_maker/packaging/spec.py +64 -0
  131. pg_maker-0.1.0/src/pg_maker/packaging/templates/deb-control.in +8 -0
  132. pg_maker-0.1.0/src/pg_maker/packaging/tree.py +239 -0
  133. pg_maker-0.1.0/src/pg_maker/planning/__init__.py +1 -0
  134. pg_maker-0.1.0/src/pg_maker/planning/documents.py +65 -0
  135. pg_maker-0.1.0/src/pg_maker/planning/environments.py +318 -0
  136. pg_maker-0.1.0/src/pg_maker/planning/graph.py +23 -0
  137. pg_maker-0.1.0/src/pg_maker/planning/plan.py +418 -0
  138. pg_maker-0.1.0/src/pg_maker/planning/resolve.py +117 -0
  139. pg_maker-0.1.0/src/pg_maker/planning/reuse.py +80 -0
  140. pg_maker-0.1.0/src/pg_maker/planning/runtime_repository.py +90 -0
  141. pg_maker-0.1.0/src/pg_maker/postgresql.py +59 -0
  142. pg_maker-0.1.0/src/pg_maker/progress.py +64 -0
  143. pg_maker-0.1.0/src/pg_maker/publishing/__init__.py +4 -0
  144. pg_maker-0.1.0/src/pg_maker/py.typed +0 -0
  145. pg_maker-0.1.0/src/pg_maker/recipes/README.md +13 -0
  146. pg_maker-0.1.0/src/pg_maker/recipes/platforms/debian-13.yaml +125 -0
  147. pg_maker-0.1.0/src/pg_maker/recipes/postgresql.yaml +114 -0
  148. pg_maker-0.1.0/src/pg_maker/runners/__init__.py +1 -0
  149. pg_maker-0.1.0/src/pg_maker/runners/base.py +29 -0
  150. pg_maker-0.1.0/src/pg_maker/runners/docker.py +312 -0
  151. pg_maker-0.1.0/src/pg_maker/schemas/build.schema.json +5 -0
  152. pg_maker-0.1.0/src/pg_maker/schemas/change-set.schema.json +5 -0
  153. pg_maker-0.1.0/src/pg_maker/schemas/component-envelope.schema.json +69 -0
  154. pg_maker-0.1.0/src/pg_maker/schemas/component.schema.json +5 -0
  155. pg_maker-0.1.0/src/pg_maker/schemas/defaults.schema.json +5 -0
  156. pg_maker-0.1.0/src/pg_maker/schemas/doc-rules.schema.json +5 -0
  157. pg_maker-0.1.0/src/pg_maker/schemas/documentation.schema.json +5 -0
  158. pg_maker-0.1.0/src/pg_maker/schemas/environment.schema.json +228 -0
  159. pg_maker-0.1.0/src/pg_maker/schemas/feature.schema.json +5 -0
  160. pg_maker-0.1.0/src/pg_maker/schemas/insertions.schema.json +5 -0
  161. pg_maker-0.1.0/src/pg_maker/schemas/lock.schema.json +3963 -0
  162. pg_maker-0.1.0/src/pg_maker/schemas/operation-input.schema.json +306 -0
  163. pg_maker-0.1.0/src/pg_maker/schemas/operation-state.schema.json +127 -0
  164. pg_maker-0.1.0/src/pg_maker/schemas/plan.schema.json +284 -0
  165. pg_maker-0.1.0/src/pg_maker/schemas/planning-common.schema.json +8192 -0
  166. pg_maker-0.1.0/src/pg_maker/schemas/platform.schema.json +5 -0
  167. pg_maker-0.1.0/src/pg_maker/schemas/postgresql-catalog.schema.json +5 -0
  168. pg_maker-0.1.0/src/pg_maker/schemas/run-event.schema.json +72 -0
  169. pg_maker-0.1.0/src/pg_maker/schemas/translations.schema.json +5 -0
  170. pg_maker-0.1.0/src/pg_maker/schemas/vendor.schema.json +5 -0
  171. pg_maker-0.1.0/src/pg_maker/security.py +73 -0
  172. pg_maker-0.1.0/src/pg_maker/sources/__init__.py +1 -0
  173. pg_maker-0.1.0/src/pg_maker/sources/resolver.py +238 -0
  174. pg_maker-0.1.0/src/pg_maker/sources/store.py +279 -0
  175. pg_maker-0.1.0/src/pg_maker/storage.py +127 -0
  176. pg_maker-0.1.0/src/pg_maker/validation/__init__.py +4 -0
  177. pg_maker-0.1.0/src/pg_maker/validation/installed.py +667 -0
  178. pg_maker-0.1.0/src/pg_maker/validation/packages.py +309 -0
  179. pg_maker-0.1.0/src/pg_maker/validation/systemctl.py +185 -0
  180. pg_maker-0.1.0/src/pg_maker/yamlio.py +54 -0
  181. pg_maker-0.1.0/src/pg_maker.egg-info/PKG-INFO +200 -0
  182. pg_maker-0.1.0/src/pg_maker.egg-info/SOURCES.txt +260 -0
  183. pg_maker-0.1.0/src/pg_maker.egg-info/dependency_links.txt +1 -0
  184. pg_maker-0.1.0/src/pg_maker.egg-info/entry_points.txt +4 -0
  185. pg_maker-0.1.0/src/pg_maker.egg-info/requires.txt +13 -0
  186. pg_maker-0.1.0/src/pg_maker.egg-info/top_level.txt +1 -0
  187. pg_maker-0.1.0/tests/__init__.py +1 -0
  188. pg_maker-0.1.0/tests/conftest.py +43 -0
  189. pg_maker-0.1.0/tests/contracts/test_cli.py +124 -0
  190. pg_maker-0.1.0/tests/fixtures/guc/README.md +11 -0
  191. pg_maker-0.1.0/tests/fixtures/guc/compact-golden.c +20 -0
  192. pg_maker-0.1.0/tests/fixtures/guc/compact.c +18 -0
  193. pg_maker-0.1.0/tests/fixtures/guc/expanded-golden.c +46 -0
  194. pg_maker-0.1.0/tests/fixtures/guc/expanded.c +44 -0
  195. pg_maker-0.1.0/tests/fixtures/stage4/README.md +31 -0
  196. pg_maker-0.1.0/tests/fixtures/stage4/insertion.yaml +18 -0
  197. pg_maker-0.1.0/tests/fixtures/stage4/library/Makefile +10 -0
  198. pg_maker-0.1.0/tests/fixtures/stage4/library/check.c +2 -0
  199. pg_maker-0.1.0/tests/fixtures/stage4/library/probe.c +1 -0
  200. pg_maker-0.1.0/tests/fixtures/stage4/marker.sql +2 -0
  201. pg_maker-0.1.0/tests/fixtures/stage4/marker.yaml +22 -0
  202. pg_maker-0.1.0/tests/fixtures/stage4/probe/Makefile +7 -0
  203. pg_maker-0.1.0/tests/fixtures/stage4/probe/expected/probe.out +7 -0
  204. pg_maker-0.1.0/tests/fixtures/stage4/probe/pg_maker_probe--1.0.sql +2 -0
  205. pg_maker-0.1.0/tests/fixtures/stage4/probe/pg_maker_probe.c +8 -0
  206. pg_maker-0.1.0/tests/fixtures/stage4/probe/pg_maker_probe.control +4 -0
  207. pg_maker-0.1.0/tests/fixtures/stage4/probe/sql/probe.sql +2 -0
  208. pg_maker-0.1.0/tests/fixtures/stage4/probe.yaml +18 -0
  209. pg_maker-0.1.0/tests/fixtures/stage4/source-tree/Makefile +8 -0
  210. pg_maker-0.1.0/tests/fixtures/stage4/source-tree/expected/probe.out +7 -0
  211. pg_maker-0.1.0/tests/fixtures/stage4/source-tree/pg_maker_probe--1.0.sql +2 -0
  212. pg_maker-0.1.0/tests/fixtures/stage4/source-tree/pg_maker_probe.c +8 -0
  213. pg_maker-0.1.0/tests/fixtures/stage4/source-tree/pg_maker_probe.control +4 -0
  214. pg_maker-0.1.0/tests/fixtures/stage4/source-tree/sql/probe.sql +2 -0
  215. pg_maker-0.1.0/tests/fixtures/stage4/utility/Makefile +9 -0
  216. pg_maker-0.1.0/tests/fixtures/stage4/utility/main.c +2 -0
  217. pg_maker-0.1.0/tests/fixtures/stage7/17.5/COPYRIGHT +23 -0
  218. pg_maker-0.1.0/tests/fixtures/stage7/17.5/config.sgml +33 -0
  219. pg_maker-0.1.0/tests/fixtures/stage7/17.5/filelist.sgml +1 -0
  220. pg_maker-0.1.0/tests/fixtures/stage7/17.5/postgres.sgml +12 -0
  221. pg_maker-0.1.0/tests/fixtures/stage7/17.5/reference.sgml +1 -0
  222. pg_maker-0.1.0/tests/fixtures/stage7/17.5/sections.sgml +2 -0
  223. pg_maker-0.1.0/tests/fixtures/stage7/17.5/upstream.json +1 -0
  224. pg_maker-0.1.0/tests/fixtures/stage7/17.5/version.sgml +2 -0
  225. pg_maker-0.1.0/tests/fixtures/stage7/17.5-golden.sgml +33 -0
  226. pg_maker-0.1.0/tests/fixtures/stage7/18.1/COPYRIGHT +23 -0
  227. pg_maker-0.1.0/tests/fixtures/stage7/18.1/config.sgml +33 -0
  228. pg_maker-0.1.0/tests/fixtures/stage7/18.1/filelist.sgml +1 -0
  229. pg_maker-0.1.0/tests/fixtures/stage7/18.1/postgres.sgml +12 -0
  230. pg_maker-0.1.0/tests/fixtures/stage7/18.1/reference.sgml +1 -0
  231. pg_maker-0.1.0/tests/fixtures/stage7/18.1/sections.sgml +2 -0
  232. pg_maker-0.1.0/tests/fixtures/stage7/18.1/upstream.json +1 -0
  233. pg_maker-0.1.0/tests/fixtures/stage7/18.1/version.sgml +2 -0
  234. pg_maker-0.1.0/tests/fixtures/stage7/18.1-golden.sgml +33 -0
  235. pg_maker-0.1.0/tests/fixtures/stage7/README.md +16 -0
  236. pg_maker-0.1.0/tests/integration/test_build_cancellation.py +274 -0
  237. pg_maker-0.1.0/tests/integration/test_build_pipeline.py +37 -0
  238. pg_maker-0.1.0/tests/integration/test_development_pipeline.py +222 -0
  239. pg_maker-0.1.0/tests/integration/test_distribution.py +296 -0
  240. pg_maker-0.1.0/tests/integration/test_docker_operations.py +216 -0
  241. pg_maker-0.1.0/tests/integration/test_documentation_pipeline.py +464 -0
  242. pg_maker-0.1.0/tests/integration/test_preparation.py +162 -0
  243. pg_maker-0.1.0/tests/unit/test_agent_workspace.py +58 -0
  244. pg_maker-0.1.0/tests/unit/test_build.py +293 -0
  245. pg_maker-0.1.0/tests/unit/test_default_components.py +74 -0
  246. pg_maker-0.1.0/tests/unit/test_development.py +262 -0
  247. pg_maker-0.1.0/tests/unit/test_documentation.py +301 -0
  248. pg_maker-0.1.0/tests/unit/test_documentation_site.py +116 -0
  249. pg_maker-0.1.0/tests/unit/test_packaging.py +274 -0
  250. pg_maker-0.1.0/tests/unit/test_planning.py +828 -0
  251. pg_maker-0.1.0/tests/unit/test_postgresql_catalog.py +182 -0
  252. pg_maker-0.1.0/tests/unit/test_process.py +93 -0
  253. pg_maker-0.1.0/tests/unit/test_recovery.py +193 -0
  254. pg_maker-0.1.0/tests/unit/test_review_changes.py +122 -0
  255. pg_maker-0.1.0/tests/unit/test_review_contracts.py +82 -0
  256. pg_maker-0.1.0/tests/unit/test_runtime_integration.py +179 -0
  257. pg_maker-0.1.0/tests/unit/test_state.py +119 -0
  258. pg_maker-0.1.0/tests/unit/test_storage_documents.py +117 -0
  259. pg_maker-0.1.0/tools/check_release.py +150 -0
  260. pg_maker-0.1.0/tools/ci_pipeline.py +165 -0
  261. pg_maker-0.1.0/tools/generate_planning_schemas.py +929 -0
  262. pg_maker-0.1.0/tools/smoke_wheel.py +45 -0
@@ -0,0 +1,9 @@
1
+ * text=auto eol=lf
2
+ *.png binary
3
+ *.jpg binary
4
+ *.pdf binary
5
+ *.whl binary
6
+ *.gz binary
7
+ *.xz binary
8
+ # PostgreSQL regression output preserves psql alignment and final blank lines.
9
+ tests/fixtures/stage4/**/expected/*.out -whitespace
@@ -0,0 +1,34 @@
1
+ name: Publish to PyPI
2
+
3
+ on:
4
+ push:
5
+ tags: ["v*"]
6
+
7
+ permissions:
8
+ contents: read
9
+
10
+ concurrency:
11
+ group: pypi-publish
12
+ cancel-in-progress: false
13
+
14
+ jobs:
15
+ verify:
16
+ name: Verify and build the tagged source
17
+ uses: ./.github/workflows/tests.yml
18
+
19
+ publish:
20
+ needs: verify
21
+ runs-on: ubuntu-24.04
22
+ timeout-minutes: 15
23
+ environment:
24
+ name: pypi
25
+ url: https://pypi.org/p/pg-maker
26
+ permissions:
27
+ id-token: write
28
+ steps:
29
+ - uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8
30
+ with:
31
+ name: python-distributions
32
+ path: dist/
33
+ - name: Publish verified artifacts with Trusted Publishing
34
+ uses: pypa/gh-action-pypi-publish@cef221092ed1bacb1cc03d23a2d87d1d172e277b # release/v1
@@ -0,0 +1,117 @@
1
+ name: tests
2
+
3
+ on:
4
+ push:
5
+ branches: ["**"]
6
+ pull_request:
7
+ workflow_call:
8
+ workflow_dispatch:
9
+ inputs:
10
+ run_db_tests:
11
+ description: Run the long PostgreSQL and installed database qualification suites
12
+ type: boolean
13
+ default: false
14
+ with_doc:
15
+ description: Build and install the English HTML, man and PDF documentation
16
+ type: boolean
17
+ default: false
18
+
19
+ permissions:
20
+ contents: read
21
+
22
+ concurrency:
23
+ group: tests-${{ github.workflow }}-${{ github.ref }}
24
+ cancel-in-progress: true
25
+
26
+ jobs:
27
+ unit:
28
+ runs-on: ubuntu-24.04
29
+ timeout-minutes: 15
30
+ strategy:
31
+ fail-fast: false
32
+ matrix:
33
+ python: ['3.10', '3.12']
34
+ steps:
35
+ - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6; shared pg_diag convention
36
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
37
+ with:
38
+ python-version: ${{ matrix.python }}
39
+ - run: python -m pip install -e '.[dev]'
40
+ - run: ruff check . && ruff format --check .
41
+ - run: python tools/check_release.py
42
+ - run: python tools/generate_planning_schemas.py && git diff --exit-code -- src/pg_maker/schemas
43
+ - run: python -m pytest -q tests/unit tests/contracts
44
+ distribution:
45
+ runs-on: ubuntu-24.04
46
+ needs: unit
47
+ timeout-minutes: 15
48
+ steps:
49
+ - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
50
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
51
+ with:
52
+ python-version: '3.12'
53
+ - run: python -m pip install 'build>=1.2,<2' 'twine>=6,<7'
54
+ - name: Check release identity
55
+ shell: bash
56
+ run: |
57
+ if [ "$GITHUB_REF_TYPE" = tag ]; then
58
+ python tools/check_release.py --tag "$GITHUB_REF_NAME"
59
+ else
60
+ python tools/check_release.py
61
+ fi
62
+ - run: python -m build
63
+ - run: python -m twine check --strict dist/*
64
+ - run: python tools/check_release.py --dist dist
65
+ - run: python tools/smoke_wheel.py dist/*.whl
66
+ - uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
67
+ with:
68
+ name: python-distributions
69
+ path: dist/
70
+ if-no-files-found: error
71
+ retention-days: 7
72
+
73
+ docker:
74
+ runs-on: ubuntu-24.04
75
+ needs: unit
76
+ timeout-minutes: 30
77
+ steps:
78
+ - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
79
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
80
+ with:
81
+ python-version: '3.12'
82
+ - run: python -m pip install -e '.[dev]'
83
+ - run: python tools/ci_pipeline.py --work "${RUNNER_TEMP}/pg-maker-fixtures" --fixtures-only
84
+ - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
85
+ if: always()
86
+ with:
87
+ name: fixture-evidence
88
+ path: ${{ runner.temp }}/pg-maker-fixtures/exports
89
+ retention-days: 7
90
+
91
+ postgresql:
92
+ if: github.event_name == 'workflow_dispatch'
93
+ runs-on: ubuntu-24.04
94
+ needs: docker
95
+ timeout-minutes: 120
96
+ steps:
97
+ - uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6
98
+ - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 # v6
99
+ with:
100
+ python-version: '3.12'
101
+ - run: python -m pip install -e '.[dev]'
102
+ - name: Build PostgreSQL packages; database tests are explicit
103
+ env:
104
+ RUN_DB_TESTS: ${{ inputs.run_db_tests }}
105
+ WITH_DOC: ${{ inputs.with_doc }}
106
+ shell: bash
107
+ run: |
108
+ args=()
109
+ if [ "$RUN_DB_TESTS" = true ]; then args+=(--run-db-tests); fi
110
+ if [ "$WITH_DOC" = true ]; then args+=(--with-doc); fi
111
+ python tools/ci_pipeline.py --work "${RUNNER_TEMP}/pg-maker-postgresql" "${args[@]}"
112
+ - uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4
113
+ if: always()
114
+ with:
115
+ name: postgresql-evidence
116
+ path: ${{ runner.temp }}/pg-maker-postgresql/exports
117
+ retention-days: 7
@@ -0,0 +1,33 @@
1
+ .venv/
2
+ venv/
3
+ .env
4
+ .env.*
5
+ !.env.example
6
+ __pycache__/
7
+ *.py[cod]
8
+ *.egg-info/
9
+ .pytest_cache/
10
+ .ruff_cache/
11
+ .mypy_cache/
12
+ .tox/
13
+ .nox/
14
+ .coverage
15
+ .coverage.*
16
+ coverage.xml
17
+ htmlcov/
18
+ build/
19
+ dist/
20
+ runs/
21
+ operations/
22
+ /.cache/
23
+ /inputs/
24
+ /development/
25
+ /work/
26
+ /delivery/
27
+ *.log
28
+ .DS_Store
29
+ Thumbs.db
30
+ .idea/
31
+ .vscode/
32
+ *.swp
33
+ *.swo
@@ -0,0 +1,22 @@
1
+ # Changelog
2
+
3
+ ## 0.1.0 — 2026-10-18
4
+
5
+ Initial alpha of the PostgreSQL distribution controller:
6
+
7
+ - Strict YAML configuration, pinned sources/environments, immutable locks and plans.
8
+ - Isolated Docker builds, durable operations, events, cancellation, recovery and caches.
9
+ - PostgreSQL 14–19 catalog; initial Debian 13 / x86_64 / DEB platform.
10
+ - Default pg_stat_statements, pg_stat_kcache and pg_wait_sampling recipes with manuals.
11
+ - Documentation-only and combined builds using DocBook/Sphinx, local assets, HTML/man/PDF
12
+ and explicit translation bundles.
13
+ - Server/client/libpq/docs packaging, manifests, offline installation checks and exports.
14
+ - Owned Git development sessions, patch import/refresh/pop/push/rebase, conflict recovery,
15
+ selected component rebuilds, debug commands and iteration retention.
16
+ - Optional pg_play CLI/API/MCP integration and runtime image handoff.
17
+ - English project documentation, distribution-content checks and a tag-triggered PyPI
18
+ Trusted Publishing workflow.
19
+
20
+ Database suites are opt-in; quick/development builds remain unverified. RPM, additional
21
+ platforms and PostgreSQL distribution repository publication remain future work.
22
+ See the [roadmap](docs/roadmap.md) and dated validation reports for precise boundaries.
@@ -0,0 +1,63 @@
1
+ # Contributing
2
+
3
+ Use Linux and Python 3.10 or newer. Install the checkout in a virtual environment:
4
+
5
+ ```bash
6
+ python3 -m venv .venv
7
+ .venv/bin/python -m pip install -e '.[dev]'
8
+ .venv/bin/ruff check .
9
+ .venv/bin/ruff format --check .
10
+ .venv/bin/python tools/generate_planning_schemas.py
11
+ .venv/bin/python tools/check_release.py
12
+ .venv/bin/pytest -q tests/unit tests/contracts
13
+ ```
14
+
15
+ Review generated schema changes with the matching interface contract. Keep every
16
+ project Markdown file in English, including examples and fixture descriptions.
17
+ PostgreSQL manuals produced by the utility can use configured languages. Preserve
18
+ upstream copyright/license notices in fixtures and generated artifacts.
19
+
20
+ Public changes need an updated MD contract and, where applicable, JSON Schema.
21
+ Use MakerService for CLI/API behavior, typed argv for commands, the shared logger,
22
+ durable state/events and owned-resource cleanup. Prefer small concrete adapters;
23
+ add protocols only at real replacement boundaries. See [architecture](docs/architecture.md)
24
+ and [interfaces](docs/interfaces/README.md).
25
+
26
+ ## Tests and storage
27
+
28
+ Unit/contract tests do not require PostgreSQL builds. Small Docker tests are opt-in;
29
+ variables select already available images. A tiny development pipeline fixture needs
30
+ an image with Make and the current non-root build user:
31
+
32
+ ```bash
33
+ PG_MAKER_DEVELOPMENT_IMAGE=sha256:FULL_IMAGE_ID .venv/bin/pytest -q tests/integration/test_development_pipeline.py
34
+ ```
35
+
36
+ This checks failed extension builds, Git fixes, core/component reuse, debug execution
37
+ and retention without starting a database. Other fixtures use PG_MAKER_DOCKER_IMAGE,
38
+ PG_MAKER_BUILD_IMAGE, PG_MAKER_PREPARATION_IMAGE, PG_MAKER_PACKAGE_ENVIRONMENTS and
39
+ PG_MAKER_DOC_ENVIRONMENTS. CI prepares its own fixture environments through
40
+ `tools/ci_pipeline.py --fixtures-only`.
41
+
42
+ Database suites remain off by default. The expensive PG_MAKER_BUILD_LOCK integration
43
+ and manual --run-db-tests path are separate checks, not routine prerequisites for
44
+ editing the Python utility. Never treat a successful quick build as database qualification.
45
+ Check free disk before work; use [explicit cleanup](docs/development-storage.md) and
46
+ retain useful evidence. Do not put runs, inputs, environments, credentials or build
47
+ artifacts into Git.
48
+
49
+ ## Distribution checks
50
+
51
+ ```bash
52
+ .venv/bin/python -m build
53
+ .venv/bin/python -m twine check --strict dist/*
54
+ .venv/bin/python tools/check_release.py --dist dist
55
+ .venv/bin/python tools/smoke_wheel.py dist/*.whl
56
+ ```
57
+
58
+ Use a distribution directory containing exactly one version. Release checks compare
59
+ all Markdown and runtime package files byte-for-byte between source, wheel and sdist,
60
+ and ensure test fixtures/tooling are present in sdist. Wheel smoke creates and removes
61
+ a temporary isolated environment, installs dependencies, checks entry points and
62
+ initializes/validates a project outside checkout. It does not contact Docker.
63
+ Publication is described in [releasing](docs/releasing.md).
pg_maker-0.1.0/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Oleg Gurov
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,10 @@
1
+ include LICENSE *.md pyproject.toml MANIFEST.in
2
+ include .gitignore .gitattributes
3
+ recursive-include .github/workflows *.yml
4
+ recursive-include docs *.md
5
+ recursive-include tests *.py
6
+ recursive-include tests/fixtures *
7
+ recursive-include tools *.py
8
+ global-exclude __pycache__ *.py[cod]
9
+ prune build
10
+ prune dist
@@ -0,0 +1,200 @@
1
+ Metadata-Version: 2.4
2
+ Name: pg-maker
3
+ Version: 0.1.0
4
+ Summary: Build PostgreSQL distributions, documentation and patches in isolated environments
5
+ Author-email: O2eg <oleg.ispu@gmail.com>
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://o2eg.com/
8
+ Project-URL: Repository, https://github.com/O2eg/pg_maker
9
+ Project-URL: Issues, https://github.com/O2eg/pg_maker/issues
10
+ Project-URL: Documentation, https://github.com/O2eg/pg_maker/blob/main/README.md
11
+ Keywords: postgresql,build,packaging,documentation,docker
12
+ Classifier: Development Status :: 3 - Alpha
13
+ Classifier: Environment :: Console
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: Intended Audience :: System Administrators
16
+ Classifier: Operating System :: POSIX :: Linux
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3 :: Only
19
+ Classifier: Programming Language :: Python :: 3.10
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Topic :: Database
22
+ Classifier: Topic :: Software Development :: Build Tools
23
+ Requires-Python: >=3.10
24
+ Description-Content-Type: text/markdown
25
+ License-File: LICENSE
26
+ Requires-Dist: jsonschema<5,>=4.23
27
+ Requires-Dist: PyYAML<7,>=6
28
+ Requires-Dist: packaging<27,>=24
29
+ Requires-Dist: lxml<7,>=5.3
30
+ Provides-Extra: dev
31
+ Requires-Dist: build<2,>=1.2; extra == "dev"
32
+ Requires-Dist: pytest<9,>=8.3; extra == "dev"
33
+ Requires-Dist: ruff<1,>=0.12; extra == "dev"
34
+ Requires-Dist: twine<7,>=6; extra == "dev"
35
+ Requires-Dist: tomli<3,>=2; python_version < "3.11" and extra == "dev"
36
+ Dynamic: license-file
37
+
38
+ # pg_maker
39
+
40
+ A Python controller for building PostgreSQL distributions, packages and documentation
41
+ in isolated Docker environments. It also provides Git development sessions for
42
+ editing patches, recovering failed builds and rebuilding individual extensions.
43
+
44
+ The current package is an **alpha**. The implemented platform is Debian 13 / x86_64,
45
+ with release/debug builds and DEB packages. The PostgreSQL catalog covers majors
46
+ 14–19, including beta/RC identities; versions below 14 are unsupported. Catalog
47
+ coverage is distinct from validation coverage: see the [major-version report](docs/validation/postgresql-majors.md).
48
+ RPM, other platforms and distribution repository publishing remain on the
49
+ [roadmap](docs/roadmap.md).
50
+
51
+ ## Installation
52
+
53
+ Requires Linux and Python 3.10+. Container operations require a local Docker daemon;
54
+ Git development sessions also require Git. Installing the Python package and reading
55
+ capabilities do not require Docker.
56
+
57
+ From PyPI:
58
+
59
+ ```bash
60
+ python3 -m venv .venv
61
+ .venv/bin/python -m pip install pg-maker
62
+ .venv/bin/pg-maker --help
63
+ ```
64
+
65
+ For development, from a source checkout:
66
+
67
+ ```bash
68
+ python3 -m venv .venv
69
+ .venv/bin/python -m pip install -e '.[dev]'
70
+ .venv/bin/pg-maker --help
71
+ .venv/bin/pg-maker --component-capabilities
72
+ .venv/bin/pg-maker doctor --machine
73
+ ```
74
+
75
+ A built wheel can be installed with `python -m pip install /path/to/pg_maker-VERSION-py3-none-any.whl`.
76
+
77
+ ## Build a distribution
78
+
79
+ ```bash
80
+ pg-maker init example
81
+ pg-maker validate example/build.yaml
82
+ pg-maker config show example/build.yaml --resolved
83
+ pg-maker env prepare example/build.yaml --out example/environments.json --operations example/operations
84
+ pg-maker resolve example/build.yaml --environments example/environments.json --out example/lock.json --input-store example/inputs --operations example/operations
85
+ pg-maker plan example/lock.json --out example/plan.json --goal build
86
+ pg-maker build example/lock.json --plan example/plan.json --operations example/operations --detach
87
+ ```
88
+
89
+ `init` creates editable vendor/defaults/documentation YAML, a `my-feature` variant,
90
+ component recipes, schemas and the built-in socket-directory patch. The initial
91
+ target is PostgreSQL 18.1 / Debian 13 / x86_64 / DEB, without documentation.
92
+ The default components are `pg_stat_statements`, `pg_stat_kcache 2.3.2` and
93
+ `pg_wait_sampling 1.1.11`. External sources are pinned by commit SHA. Set
94
+ `components: []` to omit additional extensions. See [component recipes](docs/interfaces/components.md).
95
+
96
+ `env prepare` downloads missing base images and installs dependencies inside
97
+ containers. Its result records build/test image IDs, package versions and toolchain
98
+ inventory. `resolve` freezes source commits, submodules, snapshots, archive
99
+ checksums and ChangeSets in a BuildLock. Offline resolution reuses stored inputs
100
+ and reports missing ones. Both operations support `--detach` and `--request-id`.
101
+
102
+ The build user defaults to `1000:1000` and must match the non-root owner of the
103
+ workspace. Environment preparation creates this user inside the image. Build
104
+ commands run with networking disabled. Outputs stay inside the operation directory.
105
+
106
+ **Database tests are disabled by default while developing the utility.** A normal
107
+ build compiles the candidate and components without `check`, `check-world`,
108
+ component tests, acceptance tests or a baseline build. Reports remain `unverified`,
109
+ with `db_tests=skipped` and `publication_eligible=false`. Tests of pg_maker itself
110
+ remain enabled.
111
+
112
+ Use `--goal package` to build server/client/libpq DEBs, manifests, installation
113
+ instructions and HTML/JSON reports. A quick package build remains unverified.
114
+ The long source/database test adapter currently supports major 18 only:
115
+
116
+ ```bash
117
+ pg-maker build example/lock.json --run-db-tests --operations example/operations
118
+ # Explicitly requests source and installed-package qualification:
119
+ pg-maker build example/lock.json --goal verified --operations example/operations
120
+ ```
121
+
122
+ A supplied plan controls the test mode; create it with `plan --run-db-tests` when
123
+ needed. `--skip-db-tests` explicitly selects the quick path. Successful source
124
+ suites grant at most `source-verified`; `package-verified` requires installed-package
125
+ qualification too. See [build](docs/interfaces/build.md) and [packaging](docs/interfaces/packaging.md).
126
+
127
+ ## Build documentation only
128
+
129
+ ```bash
130
+ pg-maker init docs-project --with-doc --doc-language en
131
+ pg-maker env prepare docs-project/build.yaml --out docs-project/environments.json
132
+ pg-maker resolve docs-project/build.yaml --environments docs-project/environments.json --out docs-project/lock.json
133
+ pg-maker docs build docs-project/lock.json
134
+ ```
135
+
136
+ `docs build` builds documentation without compiling the server or producing DEBs.
137
+ It accepts official archive/Git sources or a snapshot of a locally modified source
138
+ tree. Set `branding: none` for upstream PostgreSQL branding. The default HTML uses
139
+ `sphinx_book_theme`, with an expandable sidebar, page contents and local search.
140
+ The footer uses the selected product, version, feature, language and optional vendor
141
+ links. `html_backend: docbook` selects the original DocBook layout explicitly.
142
+
143
+ `config/documentation.yaml` selects HTML/man/PDF. The two external extensions'
144
+ guides join the main Sphinx HTML/PDF manual when documentation is enabled.
145
+ Russian PostgreSQL output requires a complete, current external translation bundle;
146
+ the project's own Markdown documentation is English. HTML/PDF can be packaged in
147
+ a separate docs DEB, with manpages assigned to the packages that own their commands.
148
+ See the [documentation contract](docs/interfaces/documentation.md).
149
+
150
+ ## Develop code and patches
151
+
152
+ ```bash
153
+ pg-maker dev open development --from-run example/operations/FAILED_RUN
154
+ pg-maker dev status development
155
+ # Edit the source paths returned by status, then record a patch:
156
+ pg-maker dev patch development commit --scope component:pg-wait-sampling --id fix-build
157
+ pg-maker dev explain development --component pg-wait-sampling
158
+ pg-maker dev build development --component pg-wait-sampling
159
+ ```
160
+
161
+ Each session owns real Git repositories. It can import an existing local repository
162
+ with history, maintain intermediate commits, refresh patches, pop/push a series and
163
+ resolve rebase conflicts. New iterations freeze changed inputs into new locks;
164
+ `resume` retains its original meaning: retry the same operation with the same inputs.
165
+ Independent extensions and the core can be reused when their inputs match. Header,
166
+ ABI, toolchain and declared dependency changes invalidate affected results.
167
+ [Development guide](docs/development.md) and [interface contract](docs/interfaces/development.md).
168
+
169
+ ## Observe and retain results
170
+
171
+ ```bash
172
+ pg-maker status example/operations/RUN --machine
173
+ pg-maker events example/operations/RUN --after-sequence 0 --limit 20 --machine
174
+ pg-maker wait example/operations/RUN --timeout 120 --machine
175
+ pg-maker cancel example/operations/RUN --machine
176
+ pg-maker export example/operations/RUN --out exported-result
177
+ ```
178
+
179
+ The detached worker owns the operation. Closing a waiting CLI does not cancel it;
180
+ cancellation is explicit and repeatable. `status` returns success when it can read
181
+ the operation, even if the operation failed; `wait` returns the operation's exit code.
182
+ The [Python API](docs/interfaces/api.md) and optional pg_play CLI/MCP integration
183
+ use the same service and machine contract.
184
+
185
+ Source stores, workspaces, checkpoints and Docker caches consume disk space.
186
+ Check `df -h`, workspace sizes and `docker system df` before long runs. Use explicit
187
+ preview/apply cleanup and preserve needed outputs. See [storage and cleanup](docs/development-storage.md).
188
+
189
+ ## Project documentation
190
+
191
+ - [Architecture](docs/architecture.md) and [reuse decisions](docs/reuse.md).
192
+ - [Roadmap and implementation limits](docs/roadmap.md).
193
+ - [Interface specifications](docs/interfaces/README.md).
194
+ - [Validation reports](docs/validation/stage56.md), [documentation](docs/validation/stage7.md)
195
+ and [integration](docs/validation/integration.md).
196
+ - [Contributing and local checks](CONTRIBUTING.md).
197
+ - [Git and PyPI release procedure](docs/releasing.md).
198
+
199
+ Distributed under the [MIT License](LICENSE). Third-party test fixtures retain their
200
+ original copyright and license notices.