repomatic 6.31.0__tar.gz → 7.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 (165) hide show
  1. {repomatic-6.31.0 → repomatic-7.1.0}/PKG-INFO +7 -7
  2. {repomatic-6.31.0 → repomatic-7.1.0}/pyproject.toml +37 -22
  3. {repomatic-6.31.0 → repomatic-7.1.0}/readme.md +3 -2
  4. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/__init__.py +2 -2
  5. repomatic-7.1.0/repomatic/binaries_page.py +448 -0
  6. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/binary.py +7 -0
  7. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/cache.py +6 -0
  8. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/changelog.py +14 -1
  9. repomatic-7.1.0/repomatic/checksums.py +132 -0
  10. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/cli.py +832 -345
  11. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/config.py +97 -131
  12. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/_release-engine.yaml +52 -30
  13. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/action-publish-pypi.yaml +4 -0
  14. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/agent-sphinx-docs.md +24 -27
  15. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/autofix.yaml +217 -67
  16. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/changelog.yaml +24 -18
  17. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/debug.yaml +3 -3
  18. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/docs.yaml +7 -7
  19. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/labeller-content-based.yaml +0 -1
  20. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/labeller-file-based.yaml +0 -1
  21. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/labels.yaml +11 -11
  22. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/lint.yaml +29 -23
  23. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/lychee.toml +3 -0
  24. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/release.yaml +1 -1
  25. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/ruff.toml +7 -0
  26. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/skill-av-false-positive.md +7 -4
  27. repomatic-7.1.0/repomatic/data/skill-babysit-ci.md +258 -0
  28. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/skill-repomatic-audit.md +2 -3
  29. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/skill-repomatic-changelog.md +1 -1
  30. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/skill-repomatic-deps.md +2 -2
  31. repomatic-7.1.0/repomatic/data/skill-repomatic-ship.md +151 -0
  32. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/tests.yaml +3 -3
  33. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/unsubscribe.yaml +22 -2
  34. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/zizmor.yaml +1 -1
  35. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/deps_graph.py +226 -77
  36. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/git_ops.py +244 -8
  37. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/github/issue.py +17 -1
  38. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/github/matrix.py +1 -1
  39. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/github/pr_body.py +94 -1
  40. repomatic-7.1.0/repomatic/github/releases.py +502 -0
  41. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/github/token.py +12 -47
  42. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/github/workflow_sync.py +30 -11
  43. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/init_project.py +2 -102
  44. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/lint_repo.py +94 -15
  45. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/metadata.py +86 -108
  46. repomatic-7.1.0/repomatic/npm.py +89 -0
  47. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/pypi.py +1 -1
  48. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/registry.py +10 -10
  49. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/release_prep.py +25 -75
  50. repomatic-7.1.0/repomatic/sync_ops.py +984 -0
  51. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/fix-changelog.md +1 -0
  52. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/setup-guide-dependabot.md +2 -2
  53. repomatic-7.1.0/repomatic/templates/setup-guide-notifications-pat.md +21 -0
  54. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/setup-guide-token.md +4 -5
  55. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/setup-guide.md +3 -1
  56. repomatic-7.1.0/repomatic/templates/sync-action-pins.md +18 -0
  57. repomatic-7.1.0/repomatic/templates/sync-tool-versions.md +18 -0
  58. repomatic-7.1.0/repomatic/templates/sync-workflow-pins.md +18 -0
  59. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/tool_runner.py +655 -28
  60. repomatic-7.1.0/repomatic/tool_runner_page.py +217 -0
  61. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/uv.py +363 -145
  62. repomatic-7.1.0/repomatic/version_sync.py +501 -0
  63. repomatic-7.1.0/repomatic/virustotal.py +467 -0
  64. repomatic-6.31.0/repomatic/checksums.py +0 -197
  65. repomatic-6.31.0/repomatic/data/renovate.json5 +0 -204
  66. repomatic-6.31.0/repomatic/data/renovate.yaml +0 -138
  67. repomatic-6.31.0/repomatic/data/skill-babysit-ci.md +0 -246
  68. repomatic-6.31.0/repomatic/data/skill-repomatic-ship.md +0 -147
  69. repomatic-6.31.0/repomatic/github/releases.py +0 -141
  70. repomatic-6.31.0/repomatic/renovate.py +0 -358
  71. repomatic-6.31.0/repomatic/templates/renovate-migration.md +0 -13
  72. repomatic-6.31.0/repomatic/tool_checksums.py +0 -223
  73. repomatic-6.31.0/repomatic/virustotal.py +0 -417
  74. {repomatic-6.31.0 → repomatic-7.1.0}/license +0 -0
  75. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/__main__.py +0 -0
  76. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/broken_links.py +0 -0
  77. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/__init__.py +0 -0
  78. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/agent-grunt-qa.md +0 -0
  79. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/agent-qa-engineer.md +0 -0
  80. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/autolock.yaml +0 -0
  81. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/awesome_template/.github/ISSUE_TEMPLATE/config.yml +0 -0
  82. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/awesome_template/.github/ISSUE_TEMPLATE/new-link.yaml +0 -0
  83. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/awesome_template/.github/code-of-conduct.md +0 -0
  84. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/awesome_template/.github/contributing.md +0 -0
  85. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/awesome_template/.github/contributing.zh.md +0 -0
  86. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/awesome_template/.github/funding.yml +0 -0
  87. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/awesome_template/.github/pull_request_template.md +0 -0
  88. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/awesome_template/__init__.py +0 -0
  89. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/awesome_template/license +0 -0
  90. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/bumpversion.toml +0 -0
  91. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/cancel-runs.yaml +0 -0
  92. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/codecov.yaml +0 -0
  93. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/labels.toml +0 -0
  94. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/mdformat.toml +0 -0
  95. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/mypy.toml +0 -0
  96. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/pytest.toml +0 -0
  97. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/skill-awesome-triage.md +0 -0
  98. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/skill-benchmark-update.md +0 -0
  99. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/skill-brand-assets.md +0 -0
  100. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/skill-file-bug-report.md +0 -0
  101. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/skill-repomatic-init.md +0 -0
  102. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/skill-repomatic-topics.md +0 -0
  103. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/skill-sphinx-docs-sync.md +0 -0
  104. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/skill-translation-sync.md +0 -0
  105. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/skill-upstream-audit.md +0 -0
  106. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/typos.toml +0 -0
  107. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/uv.toml +0 -0
  108. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/data/yamllint.yaml +0 -0
  109. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/github/__init__.py +0 -0
  110. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/github/actions.py +0 -0
  111. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/github/advisories.py +0 -0
  112. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/github/dev_release.py +0 -0
  113. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/github/gh.py +0 -0
  114. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/github/pr.py +0 -0
  115. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/github/release_sync.py +0 -0
  116. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/github/status.py +0 -0
  117. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/github/unsubscribe.py +0 -0
  118. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/images.py +0 -0
  119. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/mailmap.py +0 -0
  120. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/myst_converter.py +0 -0
  121. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/myst_docstrings.py +0 -0
  122. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/py.typed +0 -0
  123. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/pyproject.py +0 -0
  124. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/rst_to_myst.py +0 -0
  125. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/sponsor.py +0 -0
  126. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/__init__.py +0 -0
  127. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/available-admonition.md +0 -0
  128. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/broken-links-issue.md +0 -0
  129. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/bump-version.md +0 -0
  130. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/detect-squash-merge.md +0 -0
  131. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/development-warning.md +0 -0
  132. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/fix-typos.md +0 -0
  133. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/fix-vulnerable-deps.md +0 -0
  134. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/format-images.md +0 -0
  135. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/format-json.md +0 -0
  136. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/format-markdown.md +0 -0
  137. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/format-pyproject.md +0 -0
  138. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/format-python.md +0 -0
  139. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/format-shell.md +0 -0
  140. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/generated-footer.md +0 -0
  141. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/github-releases.md +0 -0
  142. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/immutable-releases.md +0 -0
  143. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/pr-metadata.md.noformat +0 -0
  144. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/prepare-release.md +0 -0
  145. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/refresh-tip.md +0 -0
  146. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/release-notes.md +0 -0
  147. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/release-sync-report.md +0 -0
  148. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/setup-guide-branch-ruleset.md +0 -0
  149. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/setup-guide-fork-pr-approval.md +0 -0
  150. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/setup-guide-pages-source.md +0 -0
  151. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/setup-guide-pypi-trusted-publisher.md +0 -0
  152. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/setup-guide-verify.md +0 -0
  153. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/setup-guide-virustotal.md +0 -0
  154. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/sync-bumpversion.md +0 -0
  155. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/sync-gitignore.md +0 -0
  156. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/sync-mailmap.md +0 -0
  157. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/sync-repomatic.md +0 -0
  158. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/sync-uv-lock.md +0 -0
  159. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/unavailable-admonition.md +0 -0
  160. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/unsubscribe-phase1.md +0 -0
  161. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/unsubscribe-phase2.md +0 -0
  162. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/update-deps-graph.md +0 -0
  163. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/update-docs.md +0 -0
  164. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/templates/yanked-admonition.md +0 -0
  165. {repomatic-6.31.0 → repomatic-7.1.0}/repomatic/test_matrix.py +0 -0
@@ -1,8 +1,8 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: repomatic
3
- Version: 6.31.0
3
+ Version: 7.1.0
4
4
  Summary: 🏭 Automate repository maintenance, releases, and CI/CD workflows
5
- Keywords: changelog-formatter,dependabot-alternative,github-actions,github-labels,github-workflow,gitignore,mailmap,mypy,nuitka,python-automation,release-automation,renovate,repository-automation,repository-management,reusable-workflows,software-factory,sphinx-doc,typo,uv,workflow-reusable
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
7
7
  Author-email: Kevin Deldycke <kevin@deldycke.com>
8
8
  License-Expression: GPL-2.0-or-later
@@ -46,11 +46,10 @@ 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.1
49
+ Requires-Dist: click-extra>=8.3
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: pydriller>=2
54
53
  Requires-Dist: pyproject-metadata>=0.9
55
54
  Requires-Dist: pyyaml>=6.0.3
56
55
  Requires-Dist: tomlrt>=1.7.6
@@ -59,7 +58,7 @@ Requires-Dist: wcmatch>=10
59
58
  Requires-Python: >=3.10
60
59
  Project-URL: Changelog, https://github.com/kdeldycke/repomatic/blob/main/changelog.md
61
60
  Project-URL: Documentation, https://kdeldycke.github.io/repomatic
62
- Project-URL: Download, https://github.com/kdeldycke/repomatic/releases/tag/v6.31.0
61
+ Project-URL: Download, https://github.com/kdeldycke/repomatic/releases/tag/v7.1.0
63
62
  Project-URL: Funding, https://github.com/sponsors/kdeldycke
64
63
  Project-URL: Homepage, https://github.com/kdeldycke/repomatic
65
64
  Project-URL: Issues, https://github.com/kdeldycke/repomatic/issues
@@ -89,7 +88,8 @@ A Python CLI and `pyproject.toml` configuration that let you **release Python pa
89
88
  - Cross-platform binary compilation (Linux / macOS / Windows, x86_64 / arm64)
90
89
  - Formatting autofix for Python, Markdown, JSON, Shell, and typos
91
90
  - Linting: Python types with mypy, YAML, GitHub Actions, workflow security, URLs, secrets, and Awesome lists
92
- - Synchronization of `uv.lock`, `.gitignore`, `.mailmap`, and Mermaid dependency graph
91
+ - Synchronization of `uv.lock`, GitHub Action pins, workflow version literals, and `repomatic run` tool versions with configurable stabilization cooldowns
92
+ - Synchronization of `.gitignore`, `.mailmap`, and Mermaid dependency graph
93
93
  - Label management with file-based and content-based rules
94
94
  - Inactive issue locking
95
95
  - Static image optimization
@@ -101,7 +101,7 @@ A Python CLI and `pyproject.toml` configuration that let you **release Python pa
101
101
  - [18 third-party GitHub Actions replaced](https://kdeldycke.github.io/repomatic/security.html#third-party-action-minimization) by internal CLI commands and SHA-256-verified binary downloads, keeping the supply chain attack surface minimal
102
102
  - [8 Python linters and formatters](https://kdeldycke.github.io/repomatic/security.html#ruff-consolidation) (pylint, black, isort, pyupgrade, pydocstyle, pycln, docformatter, blacken-docs) consolidated into ruff
103
103
  - [5 packaging and install tools](https://kdeldycke.github.io/repomatic/security.html#uv-consolidation) (poetry, build, twine, check-wheel-contents, pip-audit) consolidated into uv
104
- - All `uses:` references [pinned to full commit SHAs](https://kdeldycke.github.io/repomatic/security.html#supply-chain-security) via Renovate, with stabilization windows before adopting new versions
104
+ - All `uses:` references [pinned to full commit SHAs](https://kdeldycke.github.io/repomatic/security.html#supply-chain-security) with stabilization windows before adopting new versions, managed entirely by self-hosted sync jobs
105
105
  - [SLSA provenance attestations](https://kdeldycke.github.io/repomatic/security.html#supply-chain-security) on every release artifact (wheels and compiled binaries)
106
106
  - [VirusTotal scanning](https://kdeldycke.github.io/repomatic/security.html#av-false-positive-submissions) of compiled binaries to seed AV vendor databases and reduce false positives
107
107
  - [Trusted Publishing](https://kdeldycke.github.io/repomatic/workflows.html#github-workflows-release-yaml-jobs) for PyPI uploads: no long-lived tokens stored as secrets
@@ -5,7 +5,7 @@ requires = [ "uv-build>=0.9" ]
5
5
  [project]
6
6
  # Docs: https://packaging.python.org/en/latest/guides/writing-pyproject-toml/
7
7
  name = "repomatic"
8
- version = "6.31.0"
8
+ version = "7.1.0"
9
9
  description = "🏭 Automate repository maintenance, releases, and CI/CD workflows"
10
10
  readme = "readme.md"
11
11
  keywords = [
@@ -20,7 +20,6 @@ keywords = [
20
20
  "nuitka",
21
21
  "python-automation",
22
22
  "release-automation",
23
- "renovate",
24
23
  "repository-automation",
25
24
  "repository-management",
26
25
  "reusable-workflows",
@@ -85,11 +84,10 @@ dependencies = [
85
84
  "backports-strenum>=1; python_version<'3.11'",
86
85
  # boltons 25.0.0 dropped Python 3.9, matching our requires-python >= 3.10.
87
86
  "boltons>=25",
88
- # 8.1.0 is the first release carrying the APIs repomatic uses: the `test-suite`
89
- # engine (renamed from `test-plan`), the `CONFIG_PATH_METADATA_KEY` /
90
- # `NORMALIZE_KEYS_METADATA_KEY` schema-metadata constants, and the
91
- # `@sort_by_option` / `ColumnSpec` `columns=` table registry.
92
- "click-extra>=8.1",
87
+ # click-extra 8.3 adds the `click:config` Sphinx directive and the
88
+ # `schema_field_infos()` introspection API that `configuration.md` and
89
+ # `show-config` are built on.
90
+ "click-extra>=8.3",
93
91
  # extra-platforms 12.0.2 reimplemented is_macos() with sys.platform, avoiding
94
92
  # the platform.platform() shell-out to ``cmd /c ver`` on Windows that broke
95
93
  # under patched subprocess in tests and triggered a CPython 3.10.x bug.
@@ -101,8 +99,6 @@ dependencies = [
101
99
  # XXX Replace py-walk with wcmatch once the latter supports gitignore files:
102
100
  # https://github.com/facelessuser/wcmatch/issues/226
103
101
  "py-walk>=0.3.1",
104
- # pydriller 2.0 redesigned the API; Git, Commit, and Repository are core 2.x classes.
105
- "pydriller>=2",
106
102
  # pyproject-metadata 0.9 added PEP 639 (license expressions) and PEP 685 (extras
107
103
  # normalization); our StandardMetadata.from_pyproject() call benefits from these.
108
104
  "pyproject-metadata>=0.9",
@@ -126,7 +122,7 @@ dependencies = [
126
122
  ]
127
123
  urls.Changelog = "https://github.com/kdeldycke/repomatic/blob/main/changelog.md"
128
124
  urls.Documentation = "https://kdeldycke.github.io/repomatic"
129
- urls.Download = "https://github.com/kdeldycke/repomatic/releases/tag/v6.31.0"
125
+ urls.Download = "https://github.com/kdeldycke/repomatic/releases/tag/v7.1.0"
130
126
  urls.Funding = "https://github.com/sponsors/kdeldycke"
131
127
  urls.Homepage = "https://github.com/kdeldycke/repomatic"
132
128
  urls.Issues = "https://github.com/kdeldycke/repomatic/issues"
@@ -166,6 +162,9 @@ docs = [
166
162
  "sphinx-autodoc-typehints>=2.4",
167
163
  # sphinx-copybutton 0.5.2 stabilized the copy button behavior for code blocks.
168
164
  "sphinx-copybutton>=0.5.2",
165
+ # sphinx-datatables 1.0.0 is the first stable release; makes the binaries
166
+ # catalog table searchable and sortable client-side (pulls sphinxcontrib-jquery).
167
+ "sphinx-datatables>=1",
169
168
  # sphinx-design 0.6 introduced the current directive syntax for cards, grids, and tabs.
170
169
  "sphinx-design>=0.6",
171
170
  # sphinxcontrib-mermaid 1.2.3 fixed mermaid_d3_zoom configuration support.
@@ -174,12 +173,14 @@ docs = [
174
173
  "sphinxext-opengraph>=0.13",
175
174
  ]
176
175
  # types-boltons: first stub release covering boltons 25.0 API (FrozenDict, unique, flatten,
177
- # strip_ansi). types-pyyaml: stub release covering PyYAML 6.0 (safe_load, safe_dump, full_load).
176
+ # strip_ansi). types-docutils: covers the docutils.nodes imports in docs/conf.py.
177
+ # types-pyyaml: stub release covering PyYAML 6.0 (safe_load, safe_dump, full_load).
178
178
  typing = [
179
179
  # backports-strenum: provides StrEnum stubs for mypy --python-version 3.10 analysis;
180
180
  # not in main deps (version-gated to Python<3.11 there), so added here unconditionally.
181
181
  "backports-strenum>=1",
182
182
  "types-boltons>=25.0.0.20250822",
183
+ "types-docutils>=0.22.3.20251115",
183
184
  "types-pyyaml>=6.0.12.9",
184
185
  ]
185
186
 
@@ -204,10 +205,8 @@ exclude-newer = "1 week"
204
205
  # bypasses at that date and prunes each entry once its held version ages past
205
206
  # `exclude-newer`, returning the package to the normal cooldown. repomatic is
206
207
  # pinned to git main (no PyPI release to freeze), so it keeps a permanent
207
- # "0 day" span. click-extra is held at its 8.1.0 release date so the lock adopts
208
- # it before the 1-week cooldown elapses; sync-uv-lock prunes this entry once
209
- # 8.1.0 ages past `exclude-newer`.
210
- exclude-newer-package = { click-extra = "2026-06-25T00:00:00Z", repomatic = "0 day" }
208
+ # "0 day" span.
209
+ exclude-newer-package = { click-extra = "2026-07-10T00:00:00Z", repomatic = "0 day" }
211
210
  # Package is at root level, not in "./src/".
212
211
  build-backend.module-root = ""
213
212
 
@@ -220,7 +219,7 @@ copyright = "Kevin Deldycke <kevin@deldycke.com> and contributors. Distributed u
220
219
  file-description = "🏭 Automate repository maintenance, releases, and CI/CD workflows"
221
220
  # Numeric only: Nuitka rejects PEP 440 .devN suffixes. Kept in sync with the
222
221
  # package version by the dedicated [tool.bumpversion] rule that strips the suffix.
223
- file-version = "6.31.0"
222
+ file-version = "7.1.0"
224
223
  include-data-dir = [
225
224
  "repomatic/data/awesome_template=repomatic/data/awesome_template",
226
225
  ]
@@ -238,7 +237,7 @@ include-package-data = [ "click_extra" ]
238
237
  linux-icon = "docs/assets/icon.png"
239
238
  macos-app-icon = "docs/assets/icon.icns"
240
239
  product-name = "Repomatic"
241
- product-version = "6.31.0"
240
+ product-version = "7.1.0"
242
241
  windows-icon-from-ico = "docs/assets/icon.ico"
243
242
 
244
243
  [tool.ruff]
@@ -249,6 +248,13 @@ show-fixes = true
249
248
  # Enable reformatting of code snippets in docstrings.
250
249
  # https://docs.astral.sh/ruff/formatter/#docstring-formatting
251
250
  format.docstring-code-format = true
251
+ # PLW1514: `open` and friends called without an explicit `encoding` argument.
252
+ # Windows defaults text I/O to cp1252, so a bare `open()`, `read_text()` or
253
+ # `write_text()` breaks on non-ASCII content, and only on Windows runners.
254
+ # Preview rule; its type inference misses unannotated `Path` locals, so
255
+ # PEP 597's `PYTHONWARNDEFAULTENCODING=1` remains the complete runtime net.
256
+ # See: https://docs.astral.sh/ruff/rules/unspecified-encoding/
257
+ lint.extend-select = [ "PLW1514" ]
252
258
  # D400: First line should end with a period.
253
259
  # Allows docstrings to end up with any punctuation, not just a period.
254
260
  # See: https://github.com/astral-sh/ruff/issues/1858#issuecomment-1382640623
@@ -311,10 +317,8 @@ pretty = true
311
317
  warn_unused_configs = true
312
318
  overrides = [
313
319
  { module = [
314
- "bumpversion.*",
315
- "gitdb.*",
316
320
  "py_walk.*",
317
- "pydriller.*",
321
+ "sphinxcontrib.mermaid",
318
322
  "vt",
319
323
  ], ignore_missing_imports = true },
320
324
  ]
@@ -325,7 +329,6 @@ addopts = [
325
329
  "--cov",
326
330
  "--cov-report=term",
327
331
  "--numprocesses=auto",
328
- "--dist=loadgroup",
329
332
  ]
330
333
  # https://docs.pytest.org/en/latest/customize.html#pyproject-toml
331
334
  markers = [
@@ -341,7 +344,7 @@ run.source = [ "repomatic" ]
341
344
  report.precision = 2
342
345
 
343
346
  [tool.bumpversion]
344
- current_version = "6.31.0"
347
+ current_version = "7.1.0"
345
348
  # Parse versions with an optional .devN suffix (PEP 440).
346
349
  parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)(\\.dev(?P<dev>\\d+))?"
347
350
  serialize = [
@@ -423,8 +426,19 @@ exclude = [
423
426
  "archive\\.ph",
424
427
  # npmjs.com returns 403 to bots.
425
428
  "^https://www\\.npmjs\\.com/package/.*$",
429
+ # VirusTotal analysis pages are a JS app that rate-limits bots, and the
430
+ # binaries page links one per released binary.
431
+ "^https://www\\.virustotal\\.com/gui/.*$",
426
432
  # star-history.com fragments are JS-rendered and invisible to lychee.
427
433
  "^https://star-history\\.com/.*$",
434
+ # githubstatus.com returns 405 to HEAD requests from bots.
435
+ "githubstatus\\.com",
436
+ # Local intra-docs heading fragments are Sphinx cross-references, validated
437
+ # at doc build time via `myst_heading_anchors`. Lychee's GitHub-style slugger
438
+ # strips dots (`cache.dir` → `cachedir`) and cannot see MyST `(target)=`
439
+ # anchors, so it would false-positive links that resolve fine in the rendered
440
+ # docs. Anchored to `file://` so external `.../docs/*.md#` URLs stay checked.
441
+ "^file://.*/docs/[\\w.-]+\\.md#",
428
442
  ]
429
443
  exclude_path = [
430
444
  # Template files contain $variable placeholders that are not real URLs.
@@ -441,5 +455,6 @@ abandoned-versions = [
441
455
  "6.0.0",
442
456
  "6.18.0",
443
457
  ]
458
+ changelog.archive-location = "./docs/changelog-archive.md"
444
459
  exclude = [ "workflows" ]
445
460
  pypi-package-history = [ "gha-utils", "repokit" ]
@@ -21,7 +21,8 @@ A Python CLI and `pyproject.toml` configuration that let you **release Python pa
21
21
  - Cross-platform binary compilation (Linux / macOS / Windows, x86_64 / arm64)
22
22
  - Formatting autofix for Python, Markdown, JSON, Shell, and typos
23
23
  - Linting: Python types with mypy, YAML, GitHub Actions, workflow security, URLs, secrets, and Awesome lists
24
- - Synchronization of `uv.lock`, `.gitignore`, `.mailmap`, and Mermaid dependency graph
24
+ - Synchronization of `uv.lock`, GitHub Action pins, workflow version literals, and `repomatic run` tool versions with configurable stabilization cooldowns
25
+ - Synchronization of `.gitignore`, `.mailmap`, and Mermaid dependency graph
25
26
  - Label management with file-based and content-based rules
26
27
  - Inactive issue locking
27
28
  - Static image optimization
@@ -33,7 +34,7 @@ A Python CLI and `pyproject.toml` configuration that let you **release Python pa
33
34
  - [18 third-party GitHub Actions replaced](https://kdeldycke.github.io/repomatic/security.html#third-party-action-minimization) by internal CLI commands and SHA-256-verified binary downloads, keeping the supply chain attack surface minimal
34
35
  - [8 Python linters and formatters](https://kdeldycke.github.io/repomatic/security.html#ruff-consolidation) (pylint, black, isort, pyupgrade, pydocstyle, pycln, docformatter, blacken-docs) consolidated into ruff
35
36
  - [5 packaging and install tools](https://kdeldycke.github.io/repomatic/security.html#uv-consolidation) (poetry, build, twine, check-wheel-contents, pip-audit) consolidated into uv
36
- - All `uses:` references [pinned to full commit SHAs](https://kdeldycke.github.io/repomatic/security.html#supply-chain-security) via Renovate, with stabilization windows before adopting new versions
37
+ - All `uses:` references [pinned to full commit SHAs](https://kdeldycke.github.io/repomatic/security.html#supply-chain-security) with stabilization windows before adopting new versions, managed entirely by self-hosted sync jobs
37
38
  - [SLSA provenance attestations](https://kdeldycke.github.io/repomatic/security.html#supply-chain-security) on every release artifact (wheels and compiled binaries)
38
39
  - [VirusTotal scanning](https://kdeldycke.github.io/repomatic/security.html#av-false-positive-submissions) of compiled binaries to seed AV vendor databases and reduce false positives
39
40
  - [Trusted Publishing](https://kdeldycke.github.io/repomatic/workflows.html#github-workflows-release-yaml-jobs) for PyPI uploads: no long-lived tokens stored as secrets
@@ -17,5 +17,5 @@
17
17
 
18
18
  from __future__ import annotations
19
19
 
20
- __version__ = "6.31.0"
21
- __git_tag_sha__ = "3a04e66e0f653c320bf6e93a8d584f4bf9605a50"
20
+ __version__ = "7.1.0"
21
+ __git_tag_sha__ = "8d3bdd26cb0a91c422f1b7210cb978ba75865822"