repomatic 7.4.0__tar.gz → 7.4.1__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 (164) hide show
  1. {repomatic-7.4.0 → repomatic-7.4.1}/PKG-INFO +2 -2
  2. {repomatic-7.4.0 → repomatic-7.4.1}/pyproject.toml +8 -7
  3. {repomatic-7.4.0 → repomatic-7.4.1}/pyproject.toml.orig +11 -7
  4. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/__init__.py +2 -2
  5. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/binaries_page.py +4 -11
  6. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/cli.py +21 -0
  7. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/_release-engine.yaml +10 -10
  8. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/agent-sphinx-docs.md +28 -12
  9. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/autofix.yaml +41 -41
  10. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/cancel-runs.yaml +1 -1
  11. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/changelog.yaml +17 -14
  12. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/debug.yaml +1 -1
  13. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/docs.yaml +3 -3
  14. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/labels.yaml +5 -5
  15. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/lint.yaml +8 -8
  16. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/skill-repomatic-ship.md +3 -2
  17. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/tests.yaml +7 -2
  18. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/unsubscribe.yaml +1 -1
  19. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/uv.toml +1 -1
  20. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/github/pr_body.py +47 -0
  21. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/github/releases.py +69 -0
  22. repomatic-7.4.0/repomatic/templates/prepare-release.md → repomatic-7.4.1/repomatic/templates/prepare-release.md.noformat +3 -7
  23. {repomatic-7.4.0 → repomatic-7.4.1}/license +0 -0
  24. {repomatic-7.4.0 → repomatic-7.4.1}/readme.md +0 -0
  25. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/__main__.py +0 -0
  26. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/binary.py +0 -0
  27. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/broken_links.py +0 -0
  28. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/bundle.py +0 -0
  29. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/cache.py +0 -0
  30. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/changelog.py +0 -0
  31. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/checksums.py +0 -0
  32. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/compat.py +0 -0
  33. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/config.py +0 -0
  34. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/__init__.py +0 -0
  35. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/action-publish-pypi.yaml +0 -0
  36. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/agent-grunt-qa.md +0 -0
  37. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/agent-qa-engineer.md +0 -0
  38. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/autolock.yaml +0 -0
  39. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/awesome_template/.github/ISSUE_TEMPLATE/config.yml +0 -0
  40. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/awesome_template/.github/ISSUE_TEMPLATE/new-link.yaml +0 -0
  41. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/awesome_template/.github/code-of-conduct.md +0 -0
  42. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/awesome_template/.github/contributing.md +0 -0
  43. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/awesome_template/.github/contributing.zh.md +0 -0
  44. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/awesome_template/.github/funding.yml +0 -0
  45. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/awesome_template/.github/pull_request_template.md +0 -0
  46. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/awesome_template/__init__.py +0 -0
  47. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/awesome_template/license +0 -0
  48. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/bumpversion.toml +0 -0
  49. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/codecov.yaml +0 -0
  50. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/labeller-content-based.yaml +0 -0
  51. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/labeller-file-based.yaml +0 -0
  52. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/labels.toml +0 -0
  53. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/lychee.toml +0 -0
  54. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/mdformat.toml +0 -0
  55. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/mypy.toml +0 -0
  56. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/pytest.toml +0 -0
  57. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/release.yaml +0 -0
  58. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/ruff.toml +0 -0
  59. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/skill-av-false-positive.md +0 -0
  60. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/skill-awesome-triage.md +0 -0
  61. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/skill-babysit-ci.md +0 -0
  62. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/skill-benchmark-update.md +0 -0
  63. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/skill-brand-assets.md +0 -0
  64. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/skill-file-bug-report.md +0 -0
  65. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/skill-repomatic-audit.md +0 -0
  66. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/skill-repomatic-changelog.md +0 -0
  67. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/skill-repomatic-deps.md +0 -0
  68. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/skill-repomatic-init.md +0 -0
  69. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/skill-repomatic-topics.md +0 -0
  70. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/skill-sphinx-docs-sync.md +0 -0
  71. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/skill-translation-sync.md +0 -0
  72. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/skill-upstream-audit.md +0 -0
  73. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/typos.toml +0 -0
  74. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/yamllint.yaml +0 -0
  75. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/data/zizmor.yaml +0 -0
  76. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/dep_graph.py +0 -0
  77. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/dep_report.py +0 -0
  78. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/dep_sources.py +0 -0
  79. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/docs.py +0 -0
  80. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/git_ops.py +0 -0
  81. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/github/__init__.py +0 -0
  82. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/github/actions.py +0 -0
  83. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/github/dev_release.py +0 -0
  84. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/github/gh.py +0 -0
  85. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/github/issue.py +0 -0
  86. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/github/matrix.py +0 -0
  87. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/github/release_sync.py +0 -0
  88. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/github/sponsor.py +0 -0
  89. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/github/status.py +0 -0
  90. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/github/token.py +0 -0
  91. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/github/unsubscribe.py +0 -0
  92. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/github/workflow_sync.py +0 -0
  93. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/gitignore.py +0 -0
  94. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/http.py +0 -0
  95. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/images.py +0 -0
  96. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/init_project.py +0 -0
  97. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/labels.py +0 -0
  98. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/lint_repo.py +0 -0
  99. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/mailmap.py +0 -0
  100. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/matrix_axes.py +0 -0
  101. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/metadata.py +0 -0
  102. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/npm.py +0 -0
  103. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/prepare_release.py +0 -0
  104. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/py.typed +0 -0
  105. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/pypi.py +0 -0
  106. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/pyproject.py +0 -0
  107. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/registry.py +0 -0
  108. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/setup_guide.py +0 -0
  109. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/sync_ops.py +0 -0
  110. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/__init__.py +0 -0
  111. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/available-admonition.md +0 -0
  112. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/broken-links-issue.md +0 -0
  113. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/bump-version.md +0 -0
  114. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/detect-squash-merge.md +0 -0
  115. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/development-warning.md +0 -0
  116. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/fix-changelog.md +0 -0
  117. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/fix-typos.md +0 -0
  118. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/fix-vulnerable-deps.md +0 -0
  119. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/format-images.md +0 -0
  120. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/format-json.md +0 -0
  121. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/format-markdown.md +0 -0
  122. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/format-pyproject.md +0 -0
  123. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/format-python.md +0 -0
  124. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/format-shell.md +0 -0
  125. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/generated-footer.md +0 -0
  126. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/github-releases.md +0 -0
  127. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/immutable-releases.md +0 -0
  128. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/pr-metadata.md.noformat +0 -0
  129. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/refresh-tip.md +0 -0
  130. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/release-notes.md +0 -0
  131. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/release-sync-report.md +0 -0
  132. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/setup-guide-branch-ruleset.md +0 -0
  133. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/setup-guide-dependabot.md +0 -0
  134. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/setup-guide-fork-pr-approval.md +0 -0
  135. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/setup-guide-notifications-pat.md +0 -0
  136. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/setup-guide-pages-source.md +0 -0
  137. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/setup-guide-pypi-trusted-publisher.md +0 -0
  138. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/setup-guide-sha-pinning-required.md +0 -0
  139. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/setup-guide-token.md +0 -0
  140. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/setup-guide-verify.md +0 -0
  141. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/setup-guide-virustotal.md +0 -0
  142. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/setup-guide.md +0 -0
  143. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/sync-action-pins.md +0 -0
  144. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/sync-bumpversion.md +0 -0
  145. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/sync-dep-sources.md +0 -0
  146. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/sync-gitignore.md +0 -0
  147. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/sync-mailmap.md +0 -0
  148. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/sync-repomatic.md +0 -0
  149. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/sync-tool-versions.md +0 -0
  150. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/sync-uv-lock.md +0 -0
  151. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/sync-workflow-pins.md +0 -0
  152. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/unavailable-admonition.md +0 -0
  153. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/unsubscribe-phase1.md +0 -0
  154. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/unsubscribe-phase2.md +0 -0
  155. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/update-dep-graph.md +0 -0
  156. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/update-docs.md +0 -0
  157. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/templates/yanked-admonition.md +0 -0
  158. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/tool_registry.py +0 -0
  159. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/tool_runner.py +0 -0
  160. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/tool_runner_page.py +0 -0
  161. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/uv.py +0 -0
  162. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/version_sync.py +0 -0
  163. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/virustotal.py +0 -0
  164. {repomatic-7.4.0 → repomatic-7.4.1}/repomatic/vulnerable_deps.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: repomatic
3
- Version: 7.4.0
3
+ Version: 7.4.1
4
4
  Summary: 🏭 Automate repository maintenance, releases, and CI/CD workflows
5
5
  Keywords: changelog-formatter,dependabot-alternative,github-actions,github-labels,github-workflow,gitignore,mailmap,mypy,nuitka,python-automation,release-automation,repository-automation,repository-management,reusable-workflows,software-factory,sphinx-doc,typo,uv,workflow-reusable
6
6
  Author: Kevin Deldycke
@@ -59,7 +59,7 @@ Requires-Dist: wcmatch>=10
59
59
  Requires-Python: >=3.10
60
60
  Project-URL: Changelog, https://github.com/kdeldycke/repomatic/blob/main/changelog.md
61
61
  Project-URL: Documentation, https://kdeldycke.github.io/repomatic
62
- Project-URL: Download, https://github.com/kdeldycke/repomatic/releases/tag/v7.4.0
62
+ Project-URL: Download, https://github.com/kdeldycke/repomatic/releases/tag/v7.4.1
63
63
  Project-URL: Funding, https://github.com/sponsors/kdeldycke
64
64
  Project-URL: Homepage, https://github.com/kdeldycke/repomatic
65
65
  Project-URL: Issues, https://github.com/kdeldycke/repomatic/issues
@@ -1,10 +1,10 @@
1
1
  [build-system]
2
2
  build-backend = "uv_build"
3
- requires = ["uv-build>=0.12"]
3
+ requires = ["uv-build>=0.8"]
4
4
 
5
5
  [project]
6
6
  name = "repomatic"
7
- version = "7.4.0"
7
+ version = "7.4.1"
8
8
  description = "🏭 Automate repository maintenance, releases, and CI/CD workflows"
9
9
  readme = "readme.md"
10
10
  keywords = [
@@ -92,7 +92,7 @@ email = "kevin@deldycke.com"
92
92
  [project.urls]
93
93
  Changelog = "https://github.com/kdeldycke/repomatic/blob/main/changelog.md"
94
94
  Documentation = "https://kdeldycke.github.io/repomatic"
95
- Download = "https://github.com/kdeldycke/repomatic/releases/tag/v7.4.0"
95
+ Download = "https://github.com/kdeldycke/repomatic/releases/tag/v7.4.1"
96
96
  Funding = "https://github.com/sponsors/kdeldycke"
97
97
  Homepage = "https://github.com/kdeldycke/repomatic"
98
98
  Issues = "https://github.com/kdeldycke/repomatic/issues"
@@ -119,6 +119,7 @@ docs = [
119
119
  "sphinx-copybutton>=0.5.2",
120
120
  "sphinx-datatables>=1",
121
121
  "sphinx-design>=0.6",
122
+ "sphinxcontrib-jquery>=4",
122
123
  "sphinxcontrib-mermaid>=1.2.3",
123
124
  "sphinxext-opengraph>=0.13",
124
125
  ]
@@ -130,7 +131,7 @@ typing = [
130
131
  ]
131
132
 
132
133
  [tool.uv]
133
- required-version = ">=0.12"
134
+ required-version = ">=0.11.15"
134
135
  exclude-newer = "1 week"
135
136
 
136
137
  [tool.uv.dependency-groups.docs]
@@ -147,14 +148,14 @@ module-root = ""
147
148
  [tool.nuitka]
148
149
  copyright = "Kevin Deldycke <kevin@deldycke.com> and contributors. Distributed under GPL-2.0-or-later license."
149
150
  file-description = "🏭 Automate repository maintenance, releases, and CI/CD workflows"
150
- file-version = "7.4.0"
151
+ file-version = "7.4.1"
151
152
  include-data-dir = ["repomatic/data/awesome_template=repomatic/data/awesome_template"]
152
153
  include-data-files = ["repomatic/templates/*.md=repomatic/templates/"]
153
154
  include-package-data = ["click_extra"]
154
155
  linux-icon = "docs/assets/icon.png"
155
156
  macos-app-icon = "docs/assets/icon.icns"
156
157
  product-name = "Repomatic"
157
- product-version = "7.4.0"
158
+ product-version = "7.4.1"
158
159
  windows-icon-from-ico = "docs/assets/icon.ico"
159
160
 
160
161
  [tool.ruff]
@@ -244,7 +245,7 @@ source = ["repomatic"]
244
245
  precision = 2
245
246
 
246
247
  [tool.bumpversion]
247
- current_version = "7.4.0"
248
+ current_version = "7.4.1"
248
249
  parse = '(?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)(\.dev(?P<dev>\d+))?'
249
250
  serialize = [
250
251
  "{major}.{minor}.{patch}.dev{dev}",
@@ -7,12 +7,12 @@ build-backend = "uv_build"
7
7
  # repomatic runs across the ecosystem, where uv versions drift between projects,
8
8
  # and a hard ceiling risks a chicken-and-egg deadlock when one project's uv
9
9
  # moves ahead of repomatic's next release.
10
- requires = [ "uv-build>=0.12" ]
10
+ requires = [ "uv-build>=0.8" ]
11
11
 
12
12
  [project]
13
13
  # Docs: https://packaging.python.org/en/latest/guides/writing-pyproject-toml/
14
14
  name = "repomatic"
15
- version = "7.4.0"
15
+ version = "7.4.1"
16
16
  description = "🏭 Automate repository maintenance, releases, and CI/CD workflows"
17
17
  readme = "readme.md"
18
18
  keywords = [
@@ -145,7 +145,7 @@ dependencies = [
145
145
  ]
146
146
  urls.Changelog = "https://github.com/kdeldycke/repomatic/blob/main/changelog.md"
147
147
  urls.Documentation = "https://kdeldycke.github.io/repomatic"
148
- urls.Download = "https://github.com/kdeldycke/repomatic/releases/tag/v7.4.0"
148
+ urls.Download = "https://github.com/kdeldycke/repomatic/releases/tag/v7.4.1"
149
149
  urls.Funding = "https://github.com/sponsors/kdeldycke"
150
150
  urls.Homepage = "https://github.com/kdeldycke/repomatic"
151
151
  urls.Issues = "https://github.com/kdeldycke/repomatic/issues"
@@ -190,6 +190,10 @@ docs = [
190
190
  "sphinx-datatables>=1",
191
191
  # sphinx-design 0.6 introduced the current directive syntax for cards, grids, and tabs.
192
192
  "sphinx-design>=0.6",
193
+ # sphinxcontrib-jquery is loaded explicitly in docs/conf.py (sphinx-datatables
194
+ # activates it too late to register jquery.js on its own); declare it so the
195
+ # build never relies on it arriving only transitively via sphinx-datatables.
196
+ "sphinxcontrib-jquery>=4",
193
197
  # sphinxcontrib-mermaid 1.2.3 fixed mermaid_d3_zoom configuration support.
194
198
  "sphinxcontrib-mermaid>=1.2.3",
195
199
  # sphinxext-opengraph 0.13 stabilized OpenGraph metadata generation for Sphinx 8+.
@@ -216,7 +220,7 @@ typing = [
216
220
  # self-updates). uv.lock stays stable across minors because sync-uv-lock
217
221
  # discards a re-lock that only re-spells equivalent markers (see
218
222
  # repomatic.uv.sync_uv_lock).
219
- required-version = ">=0.12"
223
+ required-version = ">=0.11.15"
220
224
  # Docs group requires Python >= 3.14 for recent MyST-Parser and click-extra features.
221
225
  dependency-groups.docs = { requires-python = ">= 3.14" }
222
226
  # Cooldown period: 7-day buffer before using newly released packages.
@@ -243,7 +247,7 @@ copyright = "Kevin Deldycke <kevin@deldycke.com> and contributors. Distributed u
243
247
  file-description = "🏭 Automate repository maintenance, releases, and CI/CD workflows"
244
248
  # Numeric only: Nuitka rejects PEP 440 .devN suffixes. Kept in sync with the
245
249
  # package version by the dedicated [tool.bumpversion] rule that strips the suffix.
246
- file-version = "7.4.0"
250
+ file-version = "7.4.1"
247
251
  include-data-dir = [
248
252
  "repomatic/data/awesome_template=repomatic/data/awesome_template",
249
253
  ]
@@ -261,7 +265,7 @@ include-package-data = [ "click_extra" ]
261
265
  linux-icon = "docs/assets/icon.png"
262
266
  macos-app-icon = "docs/assets/icon.icns"
263
267
  product-name = "Repomatic"
264
- product-version = "7.4.0"
268
+ product-version = "7.4.1"
265
269
  windows-icon-from-ico = "docs/assets/icon.ico"
266
270
 
267
271
  [tool.ruff]
@@ -383,7 +387,7 @@ run.source = [ "repomatic" ]
383
387
  report.precision = 2
384
388
 
385
389
  [tool.bumpversion]
386
- current_version = "7.4.0"
390
+ current_version = "7.4.1"
387
391
  # Parse versions with an optional .devN suffix (PEP 440).
388
392
  parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)(\\.dev(?P<dev>\\d+))?"
389
393
  serialize = [
@@ -17,5 +17,5 @@
17
17
 
18
18
  from __future__ import annotations
19
19
 
20
- __version__ = "7.4.0"
21
- __git_tag_sha__ = "730a6caca5226f9b3c80c238504310c5dad86993"
20
+ __version__ = "7.4.1"
21
+ __git_tag_sha__ = "f3fd0341a6ffbe9f948e78e3270ca30faf2b2459"
@@ -56,9 +56,9 @@ import logging
56
56
  from pathlib import Path
57
57
 
58
58
  from click_extra.blocks import replace_region
59
- from packaging.version import InvalidVersion, Version
60
59
 
61
60
  from .binary import NUITKA_BUILD_TARGETS
61
+ from .github.releases import parse_release_version
62
62
  from .virustotal import VIRUSTOTAL_GUI_URL
63
63
 
64
64
  TYPE_CHECKING = False
@@ -182,14 +182,6 @@ def _platform_target(name: str) -> str:
182
182
  return name
183
183
 
184
184
 
185
- def _release_version(tag: str) -> Version | None:
186
- """Parse a release tag as a version, or `None` for foreign tag schemes."""
187
- try:
188
- return Version(tag.removeprefix("v"))
189
- except InvalidVersion:
190
- return None
191
-
192
-
193
185
  def _binary_assets(release: ReleaseWithAssets) -> list[ReleaseAsset]:
194
186
  """Return the release's compiled binaries, sorted by filename.
195
187
 
@@ -261,7 +253,7 @@ def render_chart_section(records: Sequence[ScanRecord]) -> str:
261
253
 
262
254
  points = []
263
255
  for tag, (date, flagged, total) in per_tag.items():
264
- version = _release_version(tag)
256
+ version = parse_release_version(tag)
265
257
  if version is None:
266
258
  continue
267
259
  if total:
@@ -383,7 +375,8 @@ def render_binaries_csv(
383
375
  versioned = [
384
376
  (version, release)
385
377
  for release in releases
386
- if not release.draft and (version := _release_version(release.tag)) is not None
378
+ if not release.draft
379
+ and (version := parse_release_version(release.tag)) is not None
387
380
  ]
388
381
  versioned.sort(key=lambda pair: pair[0], reverse=True)
389
382
 
@@ -105,6 +105,7 @@ from .github.dev_release import (
105
105
  from .github.issue import close_open_prs_on_branch
106
106
  from .github.pr_body import (
107
107
  build_pr_body,
108
+ build_release_review_steps,
108
109
  generate_pr_metadata_block,
109
110
  generate_refresh_tip,
110
111
  get_template_names,
@@ -4026,6 +4027,24 @@ def pr_body(
4026
4027
  logging.info(f"Auto-detected version: {ver}")
4027
4028
  return ver
4028
4029
 
4030
+ def _resolve_version() -> str:
4031
+ """Resolve the release version from --version, else the bumpversion config."""
4032
+ return version if version is not None else _auto_version()
4033
+
4034
+ # The prepare-release checklist's two review steps share one GitHub
4035
+ # releases lookup; memoize it so both template args reuse a single fetch,
4036
+ # and so no other template pays for it (only prepare-release declares them).
4037
+ review_steps: dict[str, str] = {}
4038
+
4039
+ def _review_step(key: str) -> str:
4040
+ if not review_steps:
4041
+ dev_review, changes_review = build_release_review_steps(
4042
+ Metadata(), _resolve_version()
4043
+ )
4044
+ review_steps["dev_release_review"] = dev_review
4045
+ review_steps["changes_review"] = changes_review
4046
+ return review_steps[key]
4047
+
4029
4048
  cli_extra_args: dict[str, str | None] = {}
4030
4049
  for entry in template_args_cli:
4031
4050
  if "=" not in entry:
@@ -4037,6 +4056,8 @@ def pr_body(
4037
4056
  # Map argument names to their values or callables. CLI-provided extras
4038
4057
  # override built-in flag-driven sources so callers can pass any name.
4039
4058
  arg_sources: dict[str, str | None | Callable[[], str | None]] = {
4059
+ "changes_review": lambda: _review_step("changes_review"),
4060
+ "dev_release_review": lambda: _review_step("dev_release_review"),
4040
4061
  "diff_table": os.getenv("REPOMATIC_DIFF_TABLE", ""),
4041
4062
  "part": part,
4042
4063
  "pr_ref": pr_ref,
@@ -51,7 +51,7 @@ jobs:
51
51
  - name: Run repomatic metadata
52
52
  id: metadata
53
53
  run: >
54
- uvx --no-progress 'repomatic==7.4.0' metadata
54
+ uvx --no-progress 'repomatic==7.4.1' metadata
55
55
  --format github-json --output "$GITHUB_OUTPUT"
56
56
  new_commits_matrix release_commits_matrix build_targets nuitka_matrix
57
57
  nuitka_extras is_python_project package_name current_version
@@ -134,7 +134,7 @@ jobs:
134
134
  uv --no-progress sync --frozen ${flags}
135
135
  - name: Pre-bake build metadata
136
136
  if: contains(matrix.current_version, '.dev')
137
- run: uvx --no-progress 'click-extra==8.5.0' prebake all
137
+ run: uvx --no-progress 'click-extra==8.6.0' prebake all
138
138
  - name: Build binary
139
139
  id: build-binary
140
140
  continue-on-error: true
@@ -158,7 +158,7 @@ jobs:
158
158
  # NUITKA_PYTHON_FLAGS holds the entry point's --python-flag (if any),
159
159
  # meant to word-split.
160
160
  # shellcheck disable=SC2086
161
- uvx --no-progress 'repomatic==7.4.0' run nuitka -- \
161
+ uvx --no-progress 'repomatic==7.4.1' run nuitka -- \
162
162
  ${NUITKA_PYTHON_FLAGS} \
163
163
  --output-filename="${BIN_NAME}" "${MODULE_PATH}"
164
164
  - name: Upload Nuitka crash report
@@ -183,7 +183,7 @@ jobs:
183
183
  BIN_NAME: ${{ matrix.bin_name }}
184
184
  shell: bash
185
185
  run: >
186
- uvx --no-progress 'repomatic==7.4.0'
186
+ uvx --no-progress 'repomatic==7.4.1'
187
187
  verify-binary --target "${TARGET}" --binary "${BIN_NAME}"
188
188
  - name: Upload binaries
189
189
  uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
@@ -327,7 +327,7 @@ jobs:
327
327
  CURRENT_VERSION: ${{ matrix.current_version }}
328
328
  COMMIT: ${{ matrix.commit }}
329
329
  run: >
330
- uvx --no-progress 'repomatic==7.4.0' git-tag
330
+ uvx --no-progress 'repomatic==7.4.1' git-tag
331
331
  --tag "v${CURRENT_VERSION}"
332
332
  --commit "${COMMIT}"
333
333
  --skip-existing
@@ -368,7 +368,7 @@ jobs:
368
368
  continue-on-error: true
369
369
  env:
370
370
  GH_TOKEN: ${{ secrets.REPOMATIC_PAT || github.token }}
371
- run: uvx --no-progress 'repomatic==7.4.0' sync-dev-release --live --delete
371
+ run: uvx --no-progress 'repomatic==7.4.1' sync-dev-release --live --delete
372
372
  - name: Create GitHub release draft
373
373
  # Idempotent: skips if release already exists (e.g. workflow re-run).
374
374
  # Notes carry the PyPI availability admonition from the start: baking it
@@ -570,7 +570,7 @@ jobs:
570
570
  VIRUSTOTAL_API_KEY: ${{ secrets.VIRUSTOTAL_API_KEY }}
571
571
  CURRENT_VERSION: ${{ matrix.current_version }}
572
572
  run: >
573
- uvx --no-progress 'repomatic==7.4.0' scan-virustotal
573
+ uvx --no-progress 'repomatic==7.4.1' scan-virustotal
574
574
  --tag "v${CURRENT_VERSION}"
575
575
  --binaries-dir ./binaries
576
576
  --poll
@@ -583,7 +583,7 @@ jobs:
583
583
  env:
584
584
  GH_TOKEN: ${{ github.token }}
585
585
  run: >
586
- uvx --no-progress 'repomatic==7.4.0' sync-binaries
586
+ uvx --no-progress 'repomatic==7.4.1' sync-binaries
587
587
  --repo "${{ github.repository }}"
588
588
  --page docs/binaries.md
589
589
  --records docs/assets/virustotal-scans.json
@@ -598,7 +598,7 @@ jobs:
598
598
  CURRENT_VERSION: ${{ matrix.current_version }}
599
599
  DEFAULT_BRANCH: ${{ github.event.repository.default_branch }}
600
600
  run: >
601
- uvx --no-progress 'repomatic==7.4.0' git-commit-push
601
+ uvx --no-progress 'repomatic==7.4.1' git-commit-push
602
602
  --message "Record v${CURRENT_VERSION} binaries"
603
603
  --branch "${DEFAULT_BRANCH}"
604
604
  docs/binaries.md
@@ -644,5 +644,5 @@ jobs:
644
644
  env:
645
645
  GH_TOKEN: ${{ github.token }}
646
646
  run: >
647
- uvx --no-progress 'repomatic==7.4.0' sync-dev-release --live
647
+ uvx --no-progress 'repomatic==7.4.1' sync-dev-release --live
648
648
  --upload-assets release_assets
@@ -545,8 +545,6 @@ Hand-written, but with a strict structure that downstream projects should mirror
545
545
 
546
546
  7. **Release verification** section showing `gh attestation verify` against the package's own repo, with the `--signer-repo` flag if the release workflow runs as a reusable workflow from another repo. Mirror exactly: a stale flag here breaks reader trust.
547
547
 
548
- 8. **Dependencies graph** — a `## Dependencies` section closing the page, embedding `assets/dependencies.mmd` via a plain ```` ```mermaid ```` fence with `:align: center`. The `.mmd` is regenerated by `repomatic update-dep-graph` from `uv.lock`; never hand-edit it. One sentence explains the shapes: boxes hold the directly-declared dependencies of each group, drawn as hexagons; transitive dependencies render outside the boxes as ovals.
549
-
550
548
  Sync rules:
551
549
 
552
550
  - Re-check the Repology page on every release. New distros get a new tab; dropped distros get the tab removed.
@@ -554,6 +552,14 @@ Sync rules:
554
552
  - Version-number references in download URLs must use `releases/latest/download/...`, not pinned tags. Hand-pinned versions in install.md were a long-running source of doc drift.
555
553
  - The Try it tab-set's `Specific version` tab does carry a pinned version as an example — that's intentional (it teaches the syntax). From repomatic `v7.4.0` on, the prepare-release freeze step bumps it automatically (`freeze_install_cli_version` rewrites `{package}@X.Y.Z` and `{package}==X.Y.Z` pins in `docs/install.md`); hand-bumping is only needed on repos pinned to older release engines.
556
554
 
555
+ ### `packaging.md`: distribution and dependency reference
556
+
557
+ A maintainer/packager-facing page. Every project carries the **dependency graph** here; projects distributed through package managers add their per-channel build instructions on the same page.
558
+
559
+ **Dependencies graph** — a `## Dependencies` section embedding `assets/dependencies.mmd` via a plain ```` ```mermaid ```` fence with `:align: center`. The `.mmd` is regenerated by `repomatic update-dep-graph` from `uv.lock`; never hand-edit it. One sentence explains the shapes: boxes hold the directly-declared dependencies of each group, drawn as hexagons; transitive dependencies render outside the boxes as ovals.
560
+
561
+ The graph used to close `install.md`; it moved here so the install page stays end-user-focused while packager-facing material lives on one page. `meta-package-manager` is the reference: its `packaging.md` renders the graph above a full per-distro build catalog.
562
+
557
563
  ## Standard page roster
558
564
 
559
565
  A Sphinx site for a CLI/library project should converge on a predictable page set. Downstream repos that mirror this roster get free coherence with every other repo following the convention, and readers learn one navigation pattern.
@@ -565,7 +571,7 @@ Primary toctree (user-facing), in this order:
565
571
  01. `install` — § Recipes › `install.md`. Always first.
566
572
  02. `cli` — § Recipes › `cli.md`. CLIs only.
567
573
  03. `configuration` — § Recipes › `configuration.md`. Projects with `[tool.X]` schema.
568
- 04. `dependencies` — Dependency policy page (version-specifier rules, floor-comment conventions, audit procedures). The project's own dependency graph does not get a page of its own: it lives in `install.md`'s `## Dependencies` section (see § Recipes › `install.md`, step 8).
574
+ 04. `dependencies` — Dependency policy page (version-specifier rules, floor-comment conventions, audit procedures). The project's own dependency graph is not a page of its own: it renders in `packaging.md`'s `## Dependencies` section (see § Recipes › `packaging.md`).
569
575
  05. `tool-runner` — Only when the project ships a `repomatic run`-style tool runner.
570
576
  06. `workflows` — Only when the project publishes reusable workflows.
571
577
  07. `test-matrix` — Only when the project documents its CI test-matrix composition.
@@ -579,14 +585,15 @@ Development toctree, in this order:
579
585
  02. `upstream-development` — Project-internal release process. Mark `(upstream maintainers only)` in the page heading so readers know this is not for consumers.
580
586
  03. `operation-contracts` — Optional, for projects with formal automated-operation contracts.
581
587
  04. `API <{package}>`, `tests` — Autodoc API pages: the `API <...>` entry aliases the package's root autodoc page, `tests` covers the test-suite package. Both keep plain octicon-free headings (see Title octicons below).
582
- 05. `binaries` — Standalone-executables catalog written by the repomatic binaries pipeline. Only for projects compiling Nuitka binaries; a maintainer-facing reference, so it belongs here rather than in the primary toctree (end users reach the same downloads through `install.md`'s `## Executables` section).
583
- 06. `genindex`, `modindex` — Sphinx-generated index and module index.
584
- 07. `changelog` — Reference the root changelog via `{include} ../changelog.md` so the file stays single-sourced.
585
- 08. `changelog-archive` — Only when `[tool.repomatic] changelog.archive-location` points into `docs/`.
586
- 09. `todolist` — `sphinx.ext.todo` output. Drop this entry when the project has no TODOs.
587
- 10. `code-of-conduct`, `license` — `{include}` from root files; never duplicate the text.
588
- 11. `GitHub repository <https://...>` — External link as the last entry.
589
- 12. `Funding <https://github.com/sponsors/...>` — External link if the project accepts funding.
588
+ 05. `packaging` — Distribution and dependency reference (see § Recipes › `packaging.md`). Every project renders its dependency graph here; projects distributed through package managers add their per-channel build instructions alongside it. Maintainer/packager-facing, so it sits in Development.
589
+ 06. `binaries` — Standalone-executables catalog written by the repomatic binaries pipeline. Only for projects compiling Nuitka binaries; a maintainer-facing reference, so it belongs here rather than in the primary toctree (end users reach the same downloads through `install.md`'s `## Executables` section).
590
+ 07. `genindex`, `modindex` — Sphinx-generated index and module index.
591
+ 08. `changelog` — Reference the root changelog via `{include} ../changelog.md` so the file stays single-sourced.
592
+ 09. `changelog-archive` — Only when `[tool.repomatic] changelog.archive-location` points into `docs/`.
593
+ 10. `todolist` — `sphinx.ext.todo` output. Drop this entry when the project has no TODOs.
594
+ 11. `code-of-conduct`, `license` — `{include}` from root files; never duplicate the text.
595
+ 12. `GitHub repository <https://...>` — External link as the last entry.
596
+ 13. `Funding <https://github.com/sponsors/...>` — External link if the project accepts funding.
590
597
 
591
598
  Page-shape rules that apply across the roster:
592
599
 
@@ -600,6 +607,8 @@ Page-shape rules that apply across the roster:
600
607
  | `add-packaging-channel.md` | `git-merge` |
601
608
  | `agents.md` | `dependabot` |
602
609
  | `architectures.md` | `cpu` |
610
+ | `augmentations.md` | `plus-circle` |
611
+ | `bar-plugin.md` | `plug` |
603
612
  | `benchmark.md` | `trophy` |
604
613
  | `binaries.md` | `desktop-download` |
605
614
  | `carapace.md` | `chevron-right` |
@@ -614,9 +623,12 @@ Page-shape rules that apply across the roster:
614
623
  | `configuration.md` | `sliders` |
615
624
  | `context.md` | `database` |
616
625
  | `contributing.md` | `git-pull-request` |
626
+ | `cooldown.md` | `history` |
617
627
  | `decorators.md` | `mention` |
618
628
  | `dependencies.md` | `package-dependencies` |
619
629
  | `detection.md` | `pulse` |
630
+ | `dump.md` | `file-moved` |
631
+ | `duplicates.md` | `stack` |
620
632
  | `envvar.md` | `pin` |
621
633
  | `execution.md` | `play` |
622
634
  | `falsehoods.md` | `copilot-warning` |
@@ -626,15 +638,18 @@ Page-shape rules that apply across the roster:
626
638
  | `license.md` | `law` |
627
639
  | `logging.md` | `log` |
628
640
  | `man-page.md` | `repo` |
641
+ | `managers.md` | `file-submodule` |
629
642
  | `mkdocs.md` | `markdown` |
630
643
  | `myst-docstrings.md` | `pencil` |
631
644
  | `operation-contracts.md` | `tasklist` |
645
+ | `overrides.md` | `pin` |
632
646
  | `packaging.md` | `package-dependents` |
633
647
  | `parameters.md` | `tasklist` |
634
648
  | `platforms.md` | `codespaces` |
635
649
  | `pygments.md` | `file-code` |
636
650
  | `pytest.md` | `meter` |
637
651
  | `releasing.md` | `rocket` |
652
+ | `sbom.md` | `verified` |
638
653
  | `screenshots.md` | `device-camera` |
639
654
  | `security.md` | `shield-lock` |
640
655
  | `shells.md` | `chevron-right` |
@@ -642,6 +657,7 @@ Page-shape rules that apply across the roster:
642
657
  | `sphinx.md` | `book` |
643
658
  | `spinner.md` | `sync` |
644
659
  | `styling.md` | `typography` |
660
+ | `sudo.md` | `key` |
645
661
  | `table.md` | `table` |
646
662
  | `telemetry.md` | `broadcast` |
647
663
  | `terminals.md` | `terminal` |
@@ -754,7 +770,7 @@ Strictness flags:
754
770
  Theme assets and OpenGraph:
755
771
 
756
772
  - `html_logo = "assets/logo-square.svg"` and `html_favicon = "assets/favicon.svg"` are the canonical paths. Both files live under `docs/assets/` and ship as SVG so the Furo theme's dark-mode swap works without a separate asset bundle. The `/brand-assets` skill is the canonical producer of these files: it manages the SVG sources (favicon, square logo, banner, social banner), exports light/dark PNG variants, and wires the new files into `docs/conf.py`. When `html_logo`/`html_favicon` are missing or out of date, run `/brand-assets` instead of editing the assets by hand.
757
- - `ogp_image = "assets/banner-social-light.png"` — set when the project has a banner asset for social previews. Without `ogp_image`, `sphinxext.opengraph` falls back to the favicon, which scales poorly. Always pair it with `ogp_site_url = f"https://{github_user}.github.io/{project_id}/"`: the image path is resolved against the site URL, not the page, and without one the raw HTML carries a relative `og:image` that social crawlers cannot follow (verified on repomatic's own built pages). The PNG is exported from `assets/banner-social.svg` by the `/brand-assets` skill (which also produces the dark variant for dark-mode social cards on platforms that support them).
773
+ - `ogp_image` must be an **absolute** URL to the committed PNG on the GitHub raw host — `f"https://raw.githubusercontent.com/{github_user}/{project_id}/main/docs/assets/banner-social-light.png"` — never a site-relative `assets/...` path. `docs/assets/` is not copied into the built site (it is neither in `html_static_path` nor referenced by any doc body, so Sphinx's image collector never picks it up), so a relative `ogp_image` resolves against `ogp_site_url` to a URL that 404s for the social crawlers that only ever see the raw HTML. Set it when the project has a banner asset; without `ogp_image`, `sphinxext.opengraph` falls back to the favicon, which scales poorly. Still define `ogp_site_url = f"https://{github_user}.github.io/{project_id}/"` for the page-level `og:url` tag. The PNG is exported from `assets/banner-social.svg` by the `/brand-assets` skill (which also produces the dark variant for dark-mode social cards on platforms that support them).
758
774
  - The Furo `announcement` banner template across this lineage references the same `github_user` constant defined at the top of `conf.py`. Rebuilding the announcement string locally inside `html_theme_options` avoids a per-theme override layer.
759
775
 
760
776
  Pruning checklist before merging any `conf.py` change: