repomatic 7.3.1__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 (166) hide show
  1. {repomatic-7.3.1 → repomatic-7.4.1}/PKG-INFO +4 -7
  2. repomatic-7.4.1/pyproject.toml +338 -0
  3. repomatic-7.3.1/pyproject.toml → repomatic-7.4.1/pyproject.toml.orig +53 -26
  4. {repomatic-7.3.1 → repomatic-7.4.1}/readme.md +0 -4
  5. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/__init__.py +2 -2
  6. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/binaries_page.py +48 -24
  7. repomatic-7.4.1/repomatic/binary.py +493 -0
  8. repomatic-7.4.1/repomatic/bundle.py +67 -0
  9. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/changelog.py +6 -7
  10. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/checksums.py +29 -17
  11. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/cli.py +248 -362
  12. repomatic-7.4.1/repomatic/compat.py +33 -0
  13. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/config.py +37 -4
  14. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/_release-engine.yaml +77 -45
  15. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/action-publish-pypi.yaml +1 -1
  16. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/agent-sphinx-docs.md +165 -60
  17. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/autofix.yaml +68 -68
  18. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/cancel-runs.yaml +2 -2
  19. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/changelog.yaml +21 -18
  20. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/debug.yaml +3 -3
  21. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/docs.yaml +13 -9
  22. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/labels.yaml +13 -13
  23. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/lint.yaml +36 -26
  24. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/lychee.toml +10 -1
  25. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/release.yaml +16 -0
  26. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/skill-babysit-ci.md +5 -3
  27. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/skill-repomatic-audit.md +1 -1
  28. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/skill-repomatic-changelog.md +1 -1
  29. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/skill-repomatic-deps.md +3 -3
  30. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/skill-repomatic-ship.md +10 -5
  31. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/skill-sphinx-docs-sync.md +15 -6
  32. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/tests.yaml +11 -6
  33. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/typos.toml +2 -2
  34. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/unsubscribe.yaml +2 -2
  35. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/uv.toml +4 -3
  36. repomatic-7.3.1/repomatic/deps_graph.py → repomatic-7.4.1/repomatic/dep_graph.py +7 -6
  37. repomatic-7.4.1/repomatic/dep_report.py +664 -0
  38. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/dep_sources.py +6 -7
  39. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/docs.py +67 -32
  40. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/git_ops.py +77 -0
  41. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/github/actions.py +24 -15
  42. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/github/dev_release.py +2 -31
  43. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/github/issue.py +72 -3
  44. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/github/pr_body.py +48 -15
  45. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/github/release_sync.py +8 -13
  46. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/github/releases.py +104 -5
  47. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/github/status.py +8 -10
  48. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/github/token.py +0 -8
  49. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/github/workflow_sync.py +4 -71
  50. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/gitignore.py +2 -3
  51. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/http.py +71 -3
  52. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/images.py +6 -9
  53. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/init_project.py +14 -235
  54. repomatic-7.4.1/repomatic/labels.py +332 -0
  55. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/lint_repo.py +390 -235
  56. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/mailmap.py +8 -17
  57. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/metadata.py +109 -84
  58. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/npm.py +12 -24
  59. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/prepare_release.py +57 -0
  60. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/pypi.py +14 -37
  61. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/registry.py +3 -3
  62. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/setup_guide.py +28 -9
  63. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/sync_ops.py +164 -105
  64. repomatic-7.3.1/repomatic/templates/prepare-release.md → repomatic-7.4.1/repomatic/templates/prepare-release.md.noformat +3 -7
  65. repomatic-7.4.1/repomatic/templates/setup-guide-sha-pinning-required.md +18 -0
  66. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/setup-guide.md +3 -1
  67. repomatic-7.3.1/repomatic/templates/update-deps-graph.md → repomatic-7.4.1/repomatic/templates/update-dep-graph.md +1 -1
  68. repomatic-7.3.1/repomatic/tool_runner.py → repomatic-7.4.1/repomatic/tool_registry.py +44 -998
  69. repomatic-7.4.1/repomatic/tool_runner.py +972 -0
  70. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/tool_runner_page.py +1 -1
  71. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/uv.py +44 -699
  72. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/version_sync.py +10 -28
  73. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/virustotal.py +8 -16
  74. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/vulnerable_deps.py +24 -14
  75. repomatic-7.3.1/repomatic/binary.py +0 -315
  76. repomatic-7.3.1/repomatic/github/pr.py +0 -95
  77. {repomatic-7.3.1 → repomatic-7.4.1}/license +0 -0
  78. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/__main__.py +0 -0
  79. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/broken_links.py +0 -0
  80. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/cache.py +0 -0
  81. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/__init__.py +0 -0
  82. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/agent-grunt-qa.md +0 -0
  83. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/agent-qa-engineer.md +0 -0
  84. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/autolock.yaml +0 -0
  85. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/awesome_template/.github/ISSUE_TEMPLATE/config.yml +0 -0
  86. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/awesome_template/.github/ISSUE_TEMPLATE/new-link.yaml +0 -0
  87. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/awesome_template/.github/code-of-conduct.md +0 -0
  88. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/awesome_template/.github/contributing.md +0 -0
  89. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/awesome_template/.github/contributing.zh.md +0 -0
  90. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/awesome_template/.github/funding.yml +0 -0
  91. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/awesome_template/.github/pull_request_template.md +0 -0
  92. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/awesome_template/__init__.py +0 -0
  93. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/awesome_template/license +0 -0
  94. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/bumpversion.toml +0 -0
  95. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/codecov.yaml +0 -0
  96. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/labeller-content-based.yaml +0 -0
  97. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/labeller-file-based.yaml +0 -0
  98. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/labels.toml +0 -0
  99. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/mdformat.toml +0 -0
  100. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/mypy.toml +0 -0
  101. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/pytest.toml +0 -0
  102. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/ruff.toml +0 -0
  103. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/skill-av-false-positive.md +0 -0
  104. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/skill-awesome-triage.md +0 -0
  105. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/skill-benchmark-update.md +0 -0
  106. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/skill-brand-assets.md +0 -0
  107. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/skill-file-bug-report.md +0 -0
  108. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/skill-repomatic-init.md +0 -0
  109. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/skill-repomatic-topics.md +0 -0
  110. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/skill-translation-sync.md +0 -0
  111. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/skill-upstream-audit.md +0 -0
  112. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/yamllint.yaml +0 -0
  113. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/data/zizmor.yaml +0 -0
  114. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/github/__init__.py +0 -0
  115. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/github/gh.py +0 -0
  116. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/github/matrix.py +0 -0
  117. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/github/sponsor.py +0 -0
  118. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/github/unsubscribe.py +0 -0
  119. /repomatic-7.3.1/repomatic/test_matrix.py → /repomatic-7.4.1/repomatic/matrix_axes.py +0 -0
  120. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/py.typed +0 -0
  121. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/pyproject.py +0 -0
  122. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/__init__.py +0 -0
  123. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/available-admonition.md +0 -0
  124. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/broken-links-issue.md +0 -0
  125. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/bump-version.md +0 -0
  126. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/detect-squash-merge.md +0 -0
  127. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/development-warning.md +0 -0
  128. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/fix-changelog.md +0 -0
  129. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/fix-typos.md +0 -0
  130. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/fix-vulnerable-deps.md +0 -0
  131. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/format-images.md +0 -0
  132. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/format-json.md +0 -0
  133. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/format-markdown.md +0 -0
  134. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/format-pyproject.md +0 -0
  135. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/format-python.md +0 -0
  136. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/format-shell.md +0 -0
  137. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/generated-footer.md +0 -0
  138. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/github-releases.md +0 -0
  139. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/immutable-releases.md +0 -0
  140. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/pr-metadata.md.noformat +0 -0
  141. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/refresh-tip.md +0 -0
  142. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/release-notes.md +0 -0
  143. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/release-sync-report.md +0 -0
  144. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/setup-guide-branch-ruleset.md +0 -0
  145. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/setup-guide-dependabot.md +0 -0
  146. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/setup-guide-fork-pr-approval.md +0 -0
  147. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/setup-guide-notifications-pat.md +0 -0
  148. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/setup-guide-pages-source.md +0 -0
  149. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/setup-guide-pypi-trusted-publisher.md +0 -0
  150. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/setup-guide-token.md +0 -0
  151. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/setup-guide-verify.md +0 -0
  152. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/setup-guide-virustotal.md +0 -0
  153. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/sync-action-pins.md +0 -0
  154. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/sync-bumpversion.md +0 -0
  155. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/sync-dep-sources.md +0 -0
  156. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/sync-gitignore.md +0 -0
  157. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/sync-mailmap.md +0 -0
  158. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/sync-repomatic.md +0 -0
  159. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/sync-tool-versions.md +0 -0
  160. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/sync-uv-lock.md +0 -0
  161. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/sync-workflow-pins.md +0 -0
  162. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/unavailable-admonition.md +0 -0
  163. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/unsubscribe-phase1.md +0 -0
  164. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/unsubscribe-phase2.md +0 -0
  165. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/update-docs.md +0 -0
  166. {repomatic-7.3.1 → repomatic-7.4.1}/repomatic/templates/yanked-admonition.md +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: repomatic
3
- Version: 7.3.1
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
@@ -46,10 +46,11 @@ Classifier: Typing :: Typed
46
46
  Requires-Dist: arrow>=1.3
47
47
  Requires-Dist: backports-strenum>=1 ; python_full_version < '3.11'
48
48
  Requires-Dist: boltons>=25
49
- Requires-Dist: click-extra>=8.5
49
+ Requires-Dist: click-extra>=8.8
50
50
  Requires-Dist: extra-platforms>=12.0.2
51
51
  Requires-Dist: packaging>=17
52
52
  Requires-Dist: py-walk>=0.3.1
53
+ Requires-Dist: pyelftools>=0.33
53
54
  Requires-Dist: pyproject-metadata>=0.9
54
55
  Requires-Dist: pyyaml>=6.0.3
55
56
  Requires-Dist: tomlrt>=1.7.6
@@ -58,7 +59,7 @@ Requires-Dist: wcmatch>=10
58
59
  Requires-Python: >=3.10
59
60
  Project-URL: Changelog, https://github.com/kdeldycke/repomatic/blob/main/changelog.md
60
61
  Project-URL: Documentation, https://kdeldycke.github.io/repomatic
61
- Project-URL: Download, https://github.com/kdeldycke/repomatic/releases/tag/v7.3.1
62
+ Project-URL: Download, https://github.com/kdeldycke/repomatic/releases/tag/v7.4.1
62
63
  Project-URL: Funding, https://github.com/sponsors/kdeldycke
63
64
  Project-URL: Homepage, https://github.com/kdeldycke/repomatic
64
65
  Project-URL: Issues, https://github.com/kdeldycke/repomatic/issues
@@ -153,7 +154,3 @@ Check these projects to get real-life examples of usage and inspiration:
153
154
  - ![GitHub stars](https://img.shields.io/github/stars/kdeldycke/extra-platforms?label=%E2%AD%90&style=flat-square) [Extra Platforms](https://github.com/kdeldycke/extra-platforms) - Detect platforms and group them by family.
154
155
 
155
156
  Send a PR to add your project if you use repomatic.
156
-
157
- ## Development
158
-
159
- See `claude.md` for development commands, code style, testing guidelines, and design principles.
@@ -0,0 +1,338 @@
1
+ [build-system]
2
+ build-backend = "uv_build"
3
+ requires = ["uv-build>=0.8"]
4
+
5
+ [project]
6
+ name = "repomatic"
7
+ version = "7.4.1"
8
+ description = "🏭 Automate repository maintenance, releases, and CI/CD workflows"
9
+ readme = "readme.md"
10
+ keywords = [
11
+ "changelog-formatter",
12
+ "dependabot-alternative",
13
+ "github-actions",
14
+ "github-labels",
15
+ "github-workflow",
16
+ "gitignore",
17
+ "mailmap",
18
+ "mypy",
19
+ "nuitka",
20
+ "python-automation",
21
+ "release-automation",
22
+ "repository-automation",
23
+ "repository-management",
24
+ "reusable-workflows",
25
+ "software-factory",
26
+ "sphinx-doc",
27
+ "typo",
28
+ "uv",
29
+ "workflow-reusable",
30
+ ]
31
+ license = "GPL-2.0-or-later"
32
+ license-files = ["license"]
33
+ requires-python = ">=3.10"
34
+ classifiers = [
35
+ "Development Status :: 5 - Production/Stable",
36
+ "Environment :: Console",
37
+ "Framework :: Sphinx",
38
+ "Intended Audience :: Developers",
39
+ "Operating System :: MacOS :: MacOS X",
40
+ "Operating System :: Microsoft :: Windows",
41
+ "Operating System :: POSIX :: BSD :: FreeBSD",
42
+ "Operating System :: POSIX :: BSD :: NetBSD",
43
+ "Operating System :: POSIX :: BSD :: OpenBSD",
44
+ "Operating System :: POSIX :: Linux",
45
+ "Programming Language :: Python :: 3 :: Only",
46
+ "Programming Language :: Python :: 3.10",
47
+ "Programming Language :: Python :: 3.11",
48
+ "Programming Language :: Python :: 3.12",
49
+ "Programming Language :: Python :: 3.13",
50
+ "Programming Language :: Python :: 3.14",
51
+ "Programming Language :: Python :: Implementation :: CPython",
52
+ "Programming Language :: Unix Shell",
53
+ "Topic :: Documentation :: Sphinx",
54
+ "Topic :: File Formats :: JSON",
55
+ "Topic :: Security",
56
+ "Topic :: Software Development :: Build Tools",
57
+ "Topic :: Software Development :: Compilers",
58
+ "Topic :: Software Development :: Documentation",
59
+ "Topic :: Software Development :: Libraries :: Python Modules",
60
+ "Topic :: Software Development :: Quality Assurance",
61
+ "Topic :: Software Development :: Version Control :: Git",
62
+ "Topic :: System :: Archiving :: Packaging",
63
+ "Topic :: System :: Installation/Setup",
64
+ "Topic :: System :: Shells",
65
+ "Topic :: System :: Software Distribution",
66
+ "Topic :: Terminals",
67
+ "Topic :: Text Processing :: Markup :: HTML",
68
+ "Topic :: Text Processing :: Markup :: Markdown",
69
+ "Topic :: Utilities",
70
+ "Typing :: Typed",
71
+ ]
72
+ dependencies = [
73
+ "arrow>=1.3",
74
+ "backports-strenum>=1; python_version<'3.11'",
75
+ "boltons>=25",
76
+ "click-extra>=8.8",
77
+ "extra-platforms>=12.0.2",
78
+ "packaging>=17",
79
+ "py-walk>=0.3.1",
80
+ "pyelftools>=0.33",
81
+ "pyproject-metadata>=0.9",
82
+ "pyyaml>=6.0.3",
83
+ "tomlrt>=1.7.6",
84
+ "vt-py>=0.18",
85
+ "wcmatch>=10",
86
+ ]
87
+
88
+ [[project.authors]]
89
+ name = "Kevin Deldycke"
90
+ email = "kevin@deldycke.com"
91
+
92
+ [project.urls]
93
+ Changelog = "https://github.com/kdeldycke/repomatic/blob/main/changelog.md"
94
+ Documentation = "https://kdeldycke.github.io/repomatic"
95
+ Download = "https://github.com/kdeldycke/repomatic/releases/tag/v7.4.1"
96
+ Funding = "https://github.com/sponsors/kdeldycke"
97
+ Homepage = "https://github.com/kdeldycke/repomatic"
98
+ Issues = "https://github.com/kdeldycke/repomatic/issues"
99
+ Repository = "https://github.com/kdeldycke/repomatic"
100
+
101
+ [project.scripts]
102
+ repomatic = "repomatic.__main__:main"
103
+
104
+ [dependency-groups]
105
+ test = [
106
+ "coverage[toml]>=7.11",
107
+ "pytest>=9",
108
+ "pytest-cov>=4",
109
+ "pytest-github-actions-annotate-failures>=0.2",
110
+ "pytest-randomly>=3",
111
+ "pytest-xdist[psutil]>=3.7",
112
+ ]
113
+ docs = [
114
+ "click-extra[sphinx]",
115
+ "furo>=2025.9.25",
116
+ "myst-parser>=5.1",
117
+ "sphinx>=8",
118
+ "sphinx-autodoc-typehints>=2.4",
119
+ "sphinx-copybutton>=0.5.2",
120
+ "sphinx-datatables>=1",
121
+ "sphinx-design>=0.6",
122
+ "sphinxcontrib-jquery>=4",
123
+ "sphinxcontrib-mermaid>=1.2.3",
124
+ "sphinxext-opengraph>=0.13",
125
+ ]
126
+ typing = [
127
+ "backports-strenum>=1",
128
+ "types-boltons>=25.0.0.20250822",
129
+ "types-docutils>=0.22.3.20251115",
130
+ "types-pyyaml>=6.0.12.9",
131
+ ]
132
+
133
+ [tool.uv]
134
+ required-version = ">=0.11.15"
135
+ exclude-newer = "1 week"
136
+
137
+ [tool.uv.dependency-groups.docs]
138
+ requires-python = ">= 3.14"
139
+
140
+ [tool.uv.exclude-newer-package]
141
+ click-extra = "2026-08-02T00:00:00Z"
142
+ extra-platforms = "2026-07-28T00:00:00Z"
143
+ repomatic = "0 day"
144
+
145
+ [tool.uv.build-backend]
146
+ module-root = ""
147
+
148
+ [tool.nuitka]
149
+ copyright = "Kevin Deldycke <kevin@deldycke.com> and contributors. Distributed under GPL-2.0-or-later license."
150
+ file-description = "🏭 Automate repository maintenance, releases, and CI/CD workflows"
151
+ file-version = "7.4.1"
152
+ include-data-dir = ["repomatic/data/awesome_template=repomatic/data/awesome_template"]
153
+ include-data-files = ["repomatic/templates/*.md=repomatic/templates/"]
154
+ include-package-data = ["click_extra"]
155
+ linux-icon = "docs/assets/icon.png"
156
+ macos-app-icon = "docs/assets/icon.icns"
157
+ product-name = "Repomatic"
158
+ product-version = "7.4.1"
159
+ windows-icon-from-ico = "docs/assets/icon.ico"
160
+
161
+ [tool.ruff]
162
+ preview = true
163
+ fix = true
164
+ unsafe-fixes = false
165
+ show-fixes = true
166
+
167
+ [tool.ruff.format]
168
+ docstring-code-format = true
169
+
170
+ [tool.ruff.lint]
171
+ extend-select = ["PLW1514"]
172
+ ignore = [
173
+ "D400",
174
+ "ERA001",
175
+ "LOG015",
176
+ ]
177
+ future-annotations = true
178
+
179
+ [tool.ruff.lint.isort]
180
+ combine-as-imports = true
181
+
182
+ [tool.typos.default]
183
+ extend-ignore-re = [
184
+ "(?s)<!-- typos:off -->.*?<!-- typos:on -->",
185
+ '\{qeury\}',
186
+ 'base32 "[0-9a-z]{52}"',
187
+ ]
188
+ extend-ignore-identifiers-re = [
189
+ "certifi",
190
+ "nwo",
191
+ "vulnerabilit",
192
+ "WARNIN",
193
+ ]
194
+
195
+ [tool.typos.default.extend-identifiers]
196
+ Github = "GitHub"
197
+ IOS = "iOS"
198
+ Javascript = "JavaScript"
199
+ MacOS = "macOS"
200
+ PNGs = "PNGs"
201
+ PyPi = "PyPI"
202
+ Typescript = "TypeScript"
203
+
204
+ [tool.typos.default.extend-words]
205
+ astroid = "astroid"
206
+ oject = "oject"
207
+ PNGs = "PNGs"
208
+ sur = "sur"
209
+
210
+ [tool.mypy]
211
+ mypy_path = "docs"
212
+ check_untyped_defs = true
213
+ warn_redundant_casts = true
214
+ warn_unused_ignores = true
215
+ warn_return_any = true
216
+ warn_unreachable = true
217
+ pretty = true
218
+ warn_unused_configs = true
219
+
220
+ [[tool.mypy.overrides]]
221
+ module = [
222
+ "py_walk.*",
223
+ "sphinxcontrib.mermaid",
224
+ "vt",
225
+ ]
226
+ ignore_missing_imports = true
227
+
228
+ [tool.pytest]
229
+ addopts = [
230
+ "--durations=10",
231
+ "--cov",
232
+ "--cov-report=term",
233
+ "--numprocesses=auto",
234
+ "--import-mode=importlib",
235
+ ]
236
+ markers = ["once: Tests that only need to run once, not across the full CI matrix."]
237
+ testpaths = ["tests"]
238
+ xfail_strict = true
239
+
240
+ [tool.coverage.run]
241
+ branch = true
242
+ source = ["repomatic"]
243
+
244
+ [tool.coverage.report]
245
+ precision = 2
246
+
247
+ [tool.bumpversion]
248
+ current_version = "7.4.1"
249
+ parse = '(?P<major>\d+)\.(?P<minor>\d+)\.(?P<patch>\d+)(\.dev(?P<dev>\d+))?'
250
+ serialize = [
251
+ "{major}.{minor}.{patch}.dev{dev}",
252
+ "{major}.{minor}.{patch}",
253
+ ]
254
+ ignore_missing_files = true
255
+ allow_dirty = true
256
+
257
+ [tool.bumpversion.parts.dev]
258
+ optional_value = "release"
259
+ values = [
260
+ "0",
261
+ "release",
262
+ ]
263
+
264
+ [[tool.bumpversion.files]]
265
+ glob = "./**/__init__.py"
266
+ ignore_missing_version = true
267
+
268
+ [[tool.bumpversion.files]]
269
+ filename = "./pyproject.toml"
270
+ regex = true
271
+ search = '(?m)^version = "{current_version}"'
272
+ replace = 'version = "{new_version}"'
273
+
274
+ [[tool.bumpversion.files]]
275
+ filename = "./pyproject.toml"
276
+ search = "releases/tag/v{current_version}"
277
+ replace = "releases/tag/v{new_version}"
278
+
279
+ [[tool.bumpversion.files]]
280
+ filename = "./pyproject.toml"
281
+ ignore_missing_version = true
282
+ serialize = ["{major}.{minor}.{patch}"]
283
+ search = '-version = "{current_version}"'
284
+ replace = '-version = "{new_version}"'
285
+
286
+ [[tool.bumpversion.files]]
287
+ filename = "./changelog.md"
288
+ search = "## [`{current_version}` (unreleased)]("
289
+ replace = "## [`{new_version}` (unreleased)]("
290
+
291
+ [[tool.bumpversion.files]]
292
+ filename = "./citation.cff"
293
+ regex = true
294
+ search = "(?m)^version: {current_version}"
295
+ replace = "version: {new_version}"
296
+
297
+ [[tool.bumpversion.files]]
298
+ filename = "./citation.cff"
299
+ regex = true
300
+ search = 'date-released: \d{{4}}-\d{{2}}-\d{{2}}'
301
+ replace = "date-released: {utcnow:%Y-%m-%d}"
302
+
303
+ [tool.lychee]
304
+ exclude = [
305
+ "^https://github.com/.+/issues/[0-9]+#issuecomment-.*$",
306
+ "^https://github.com/.+/releases/.+/download/.*$",
307
+ "^https://doi.org/.+/zenodo.*$",
308
+ 'bitdefender\.com',
309
+ 'archive\.ph',
310
+ '^https://www\.npmjs\.com/package/.*$',
311
+ '^https://www\.virustotal\.com/gui/.*$',
312
+ '^https://star-history\.com/.*$',
313
+ 'githubstatus\.com',
314
+ '^file://.*/docs/[\w.-]+\.md#',
315
+ ]
316
+ exclude_path = ["repomatic/templates/"]
317
+
318
+ [tool.repomatic]
319
+ abandoned-versions = [
320
+ "4.1.0",
321
+ "4.6.1",
322
+ "4.7.0",
323
+ "4.8.0",
324
+ "5.0.0",
325
+ "6.0.0",
326
+ "6.18.0",
327
+ ]
328
+ exclude = ["workflows"]
329
+ pypi-package-history = [
330
+ "gha-utils",
331
+ "repokit",
332
+ ]
333
+
334
+ [tool.repomatic.changelog]
335
+ archive-location = "./docs/changelog-archive.md"
336
+
337
+ [tool.repomatic.manpages]
338
+ script = "repomatic.cli:repomatic"
@@ -1,11 +1,18 @@
1
1
  [build-system]
2
2
  build-backend = "uv_build"
3
- requires = [ "uv-build>=0.9,<0.12" ]
3
+ # uv-build is intentionally left uncapped. uv warns on build that the sdist
4
+ # could break on a future breaking uv-build release, but repomatic is pure
5
+ # Python with none of the packaging edge cases that warning guards against (no
6
+ # compiled extensions, no GPU/CUDA targets). Flexibility is preferred here:
7
+ # repomatic runs across the ecosystem, where uv versions drift between projects,
8
+ # and a hard ceiling risks a chicken-and-egg deadlock when one project's uv
9
+ # moves ahead of repomatic's next release.
10
+ requires = [ "uv-build>=0.8" ]
4
11
 
5
12
  [project]
6
13
  # Docs: https://packaging.python.org/en/latest/guides/writing-pyproject-toml/
7
14
  name = "repomatic"
8
- version = "7.3.1"
15
+ version = "7.4.1"
9
16
  description = "🏭 Automate repository maintenance, releases, and CI/CD workflows"
10
17
  readme = "readme.md"
11
18
  keywords = [
@@ -84,16 +91,21 @@ dependencies = [
84
91
  "backports-strenum>=1; python_version<'3.11'",
85
92
  # boltons 25.0.0 dropped Python 3.9, matching our requires-python >= 3.10.
86
93
  "boltons>=25",
87
- # click-extra 8.5 ships the `python:render` `:mirror:` regions and extends
88
- # `refresh-directives` to refresh them (update_mirror_blocks), with the
89
- # fence-aware scanner that stops `update-docs` phase 4 from rewriting
90
- # examples nested in code fences. 8.5 also carries the
91
- # `make_schema_callable(warn_unknown=...)` unknown-key warning
92
- # `load_repomatic_config` opts into, and the `click_extra.sphinx.
93
- # myst_docstrings` extension `docs/conf.py` loads (absorbed from
94
- # `repomatic.myst_docstrings`). (8.3 brought the `click:config` directive
95
- # and `schema_field_infos()` that `configuration.md` and `show-config` use.)
96
- "click-extra>=8.5",
94
+ # click-extra 8.8.0 is the floor: repomatic delegates to the utilities absorbed
95
+ # there — `format_size` (byte sizes in the image and cache reports), the
96
+ # `parse_duration`/`parse_friendly_duration`/`parse_iso8601_duration` family
97
+ # (uv cooldown spans in `uv.py`/`version_sync.py`), `prep_path`/`is_stdout`
98
+ # (CLI `--output` handling), and `config_table_to_flags` (tool flag
99
+ # translation). Earlier floors remain in play: `binaries_page` imports
100
+ # `click_extra.blocks` (`replace_region`, 8.7.1) to splice the binaries page
101
+ # chart region; `OperationTrail` and `resolve_jobs` (8.6.0) render the `sync-*`
102
+ # resolve trail; the `{matrix}` newest-first default (8.6.0) backs the committed
103
+ # Python-compatibility table in `docs/install.md`; the `python:render`
104
+ # `:mirror:` regions (8.5) drive the `update-docs` phase 4 refresh, and
105
+ # `click_extra.sphinx.myst_docstrings` (8.5, absorbed from
106
+ # `repomatic.myst_docstrings`) is loaded by `docs/conf.py`; `click:config`
107
+ # and `schema_field_infos()` (8.3) back `configuration.md` and `show-config`.
108
+ "click-extra>=8.8",
97
109
  # extra-platforms 12.0.2 reimplemented is_macos() with sys.platform, avoiding
98
110
  # the platform.platform() shell-out to ``cmd /c ver`` on Windows that broke
99
111
  # under patched subprocess in tests and triggered a CPython 3.10.x bug.
@@ -105,6 +117,11 @@ dependencies = [
105
117
  # XXX Replace py-walk with wcmatch once the latter supports gitignore files:
106
118
  # https://github.com/facelessuser/wcmatch/issues/226
107
119
  "py-walk>=0.3.1",
120
+ # pyelftools parses the ELF headers of compiled binaries, so verify-binary can
121
+ # check architectures and glibc floors natively, inside manylinux containers,
122
+ # without installing exiftool. 0.33 is the first release to declare
123
+ # requires-python (>= 3.10, matching ours); earlier ones carry no guard.
124
+ "pyelftools>=0.33",
108
125
  # pyproject-metadata 0.9 added PEP 639 (license expressions) and PEP 685 (extras
109
126
  # normalization); our StandardMetadata.from_pyproject() call benefits from these.
110
127
  "pyproject-metadata>=0.9",
@@ -128,7 +145,7 @@ dependencies = [
128
145
  ]
129
146
  urls.Changelog = "https://github.com/kdeldycke/repomatic/blob/main/changelog.md"
130
147
  urls.Documentation = "https://kdeldycke.github.io/repomatic"
131
- urls.Download = "https://github.com/kdeldycke/repomatic/releases/tag/v7.3.1"
148
+ urls.Download = "https://github.com/kdeldycke/repomatic/releases/tag/v7.4.1"
132
149
  urls.Funding = "https://github.com/sponsors/kdeldycke"
133
150
  urls.Homepage = "https://github.com/kdeldycke/repomatic"
134
151
  urls.Issues = "https://github.com/kdeldycke/repomatic/issues"
@@ -173,6 +190,10 @@ docs = [
173
190
  "sphinx-datatables>=1",
174
191
  # sphinx-design 0.6 introduced the current directive syntax for cards, grids, and tabs.
175
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",
176
197
  # sphinxcontrib-mermaid 1.2.3 fixed mermaid_d3_zoom configuration support.
177
198
  "sphinxcontrib-mermaid>=1.2.3",
178
199
  # sphinxext-opengraph 0.13 stabilized OpenGraph metadata generation for Sphinx 8+.
@@ -191,14 +212,15 @@ typing = [
191
212
  ]
192
213
 
193
214
  [tool.uv]
194
- # Pin uv to the 0.11 series so every contributor and CI runner resolves
195
- # uv.lock with the same resolver. astral-sh/setup-uv reads this automatically
196
- # (its `version` input defaults to the pyproject value), and uv enforces it on
197
- # every local invocation. Together with sync-uv-lock discarding cosmetic-only
198
- # re-locks (see repomatic.uv.sync_uv_lock), this stops uv.lock from
199
- # ping-ponging between machines that re-spell equivalent markers differently.
200
- # Bump the ceiling once a new uv minor has regenerated the lock.
201
- required-version = ">=0.11.23,<0.12"
215
+ # Floor uv at the minimum resolver repomatic relies on, with no upper bound.
216
+ # astral-sh/setup-uv reads this automatically (its `version` input defaults to
217
+ # the pyproject value) and installs the newest uv satisfying it, so CI and
218
+ # contributors move forward without a manual ceiling bump each minor (a hard
219
+ # upper cap breaks every machine the day the next uv minor lands, since uv
220
+ # self-updates). uv.lock stays stable across minors because sync-uv-lock
221
+ # discards a re-lock that only re-spells equivalent markers (see
222
+ # repomatic.uv.sync_uv_lock).
223
+ required-version = ">=0.11.15"
202
224
  # Docs group requires Python >= 3.14 for recent MyST-Parser and click-extra features.
203
225
  dependency-groups.docs = { requires-python = ">= 3.14" }
204
226
  # Cooldown period: 7-day buffer before using newly released packages.
@@ -212,7 +234,7 @@ exclude-newer = "1 week"
212
234
  # `exclude-newer`, returning the package to the normal cooldown. repomatic is
213
235
  # pinned to git main (no PyPI release to freeze), so it keeps a permanent
214
236
  # "0 day" span.
215
- exclude-newer-package = { click-extra = "2026-07-24T00:00:00Z", repomatic = "0 day" }
237
+ exclude-newer-package = { click-extra = "2026-08-02T00:00:00Z", extra-platforms = "2026-07-28T00:00:00Z", repomatic = "0 day" }
216
238
  # Package is at root level, not in "./src/".
217
239
  build-backend.module-root = ""
218
240
 
@@ -225,7 +247,7 @@ copyright = "Kevin Deldycke <kevin@deldycke.com> and contributors. Distributed u
225
247
  file-description = "🏭 Automate repository maintenance, releases, and CI/CD workflows"
226
248
  # Numeric only: Nuitka rejects PEP 440 .devN suffixes. Kept in sync with the
227
249
  # package version by the dedicated [tool.bumpversion] rule that strips the suffix.
228
- file-version = "7.3.1"
250
+ file-version = "7.4.1"
229
251
  include-data-dir = [
230
252
  "repomatic/data/awesome_template=repomatic/data/awesome_template",
231
253
  ]
@@ -243,7 +265,7 @@ include-package-data = [ "click_extra" ]
243
265
  linux-icon = "docs/assets/icon.png"
244
266
  macos-app-icon = "docs/assets/icon.icns"
245
267
  product-name = "Repomatic"
246
- product-version = "7.3.1"
268
+ product-version = "7.4.1"
247
269
  windows-icon-from-ico = "docs/assets/icon.ico"
248
270
 
249
271
  [tool.ruff]
@@ -281,7 +303,7 @@ lint.future-annotations = true
281
303
  [tool.typos]
282
304
  default.extend-identifiers = { Github = "GitHub", IOS = "iOS", Javascript = "JavaScript", MacOS = "macOS", PNGs = "PNGs", PyPi = "PyPI", Typescript = "TypeScript" }
283
305
  # False positives.
284
- default.extend-words = { astroid = "astroid", oject = "oject", PNGs = "PNGs" }
306
+ default.extend-words = { astroid = "astroid", oject = "oject", PNGs = "PNGs", sur = "sur" }
285
307
  # Skip content between <!-- typos:off --> and <!-- typos:on --> markers.
286
308
  default.extend-ignore-re = [
287
309
  "(?s)<!-- typos:off -->.*?<!-- typos:on -->",
@@ -365,7 +387,7 @@ run.source = [ "repomatic" ]
365
387
  report.precision = 2
366
388
 
367
389
  [tool.bumpversion]
368
- current_version = "7.3.1"
390
+ current_version = "7.4.1"
369
391
  # Parse versions with an optional .devN suffix (PEP 440).
370
392
  parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)(\\.dev(?P<dev>\\d+))?"
371
393
  serialize = [
@@ -482,4 +504,9 @@ abandoned-versions = [
482
504
  ]
483
505
  changelog.archive-location = "./docs/changelog-archive.md"
484
506
  exclude = [ "workflows" ]
507
+ # Render the Click command tree as roff `.1` files and attach a
508
+ # `repomatic-manpages.tar.gz` asset to every GitHub release. The script target
509
+ # mirrors `click_extra_manpages` in `docs/conf.py`, so the release tarball and
510
+ # the HTML docs site stay in lockstep.
511
+ manpages.script = "repomatic.cli:repomatic"
485
512
  pypi-package-history = [ "gha-utils", "repokit" ]
@@ -86,7 +86,3 @@ Check these projects to get real-life examples of usage and inspiration:
86
86
  - ![GitHub stars](https://img.shields.io/github/stars/kdeldycke/extra-platforms?label=%E2%AD%90&style=flat-square) [Extra Platforms](https://github.com/kdeldycke/extra-platforms) - Detect platforms and group them by family.
87
87
 
88
88
  Send a PR to add your project if you use repomatic.
89
-
90
- ## Development
91
-
92
- See `claude.md` for development commands, code style, testing guidelines, and design principles.
@@ -17,5 +17,5 @@
17
17
 
18
18
  from __future__ import annotations
19
19
 
20
- __version__ = "7.3.1"
21
- __git_tag_sha__ = "c81fb2e6fa884cb62ef46e69b8c8db44fa6fad15"
20
+ __version__ = "7.4.1"
21
+ __git_tag_sha__ = "f3fd0341a6ffbe9f948e78e3270ca30faf2b2459"