repomatic 7.3.0__tar.gz → 7.3.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 (160) hide show
  1. {repomatic-7.3.0 → repomatic-7.3.1}/PKG-INFO +2 -2
  2. {repomatic-7.3.0 → repomatic-7.3.1}/pyproject.toml +12 -5
  3. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/__init__.py +2 -2
  4. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/changelog.py +21 -5
  5. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/_release-engine.yaml +29 -19
  6. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/autofix.yaml +74 -62
  7. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/cancel-runs.yaml +2 -2
  8. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/changelog.yaml +22 -20
  9. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/debug.yaml +3 -3
  10. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/docs.yaml +6 -6
  11. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/labels.yaml +10 -10
  12. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/lint.yaml +17 -17
  13. repomatic-7.3.1/repomatic/data/pytest.toml +35 -0
  14. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/release.yaml +1 -1
  15. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/skill-babysit-ci.md +6 -0
  16. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/skill-repomatic-changelog.md +1 -1
  17. repomatic-7.3.1/repomatic/data/skill-repomatic-ship.md +190 -0
  18. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/tests.yaml +15 -5
  19. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/unsubscribe.yaml +2 -2
  20. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/init_project.py +14 -1
  21. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/tool_runner.py +56 -17
  22. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/uv.py +38 -20
  23. repomatic-7.3.0/repomatic/data/pytest.toml +0 -21
  24. repomatic-7.3.0/repomatic/data/skill-repomatic-ship.md +0 -153
  25. {repomatic-7.3.0 → repomatic-7.3.1}/license +0 -0
  26. {repomatic-7.3.0 → repomatic-7.3.1}/readme.md +0 -0
  27. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/__main__.py +0 -0
  28. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/binaries_page.py +0 -0
  29. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/binary.py +0 -0
  30. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/broken_links.py +0 -0
  31. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/cache.py +0 -0
  32. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/checksums.py +0 -0
  33. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/cli.py +0 -0
  34. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/config.py +0 -0
  35. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/__init__.py +0 -0
  36. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/action-publish-pypi.yaml +0 -0
  37. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/agent-grunt-qa.md +0 -0
  38. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/agent-qa-engineer.md +0 -0
  39. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/agent-sphinx-docs.md +0 -0
  40. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/autolock.yaml +0 -0
  41. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/awesome_template/.github/ISSUE_TEMPLATE/config.yml +0 -0
  42. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/awesome_template/.github/ISSUE_TEMPLATE/new-link.yaml +0 -0
  43. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/awesome_template/.github/code-of-conduct.md +0 -0
  44. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/awesome_template/.github/contributing.md +0 -0
  45. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/awesome_template/.github/contributing.zh.md +0 -0
  46. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/awesome_template/.github/funding.yml +0 -0
  47. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/awesome_template/.github/pull_request_template.md +0 -0
  48. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/awesome_template/__init__.py +0 -0
  49. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/awesome_template/license +0 -0
  50. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/bumpversion.toml +0 -0
  51. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/codecov.yaml +0 -0
  52. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/labeller-content-based.yaml +0 -0
  53. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/labeller-file-based.yaml +0 -0
  54. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/labels.toml +0 -0
  55. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/lychee.toml +0 -0
  56. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/mdformat.toml +0 -0
  57. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/mypy.toml +0 -0
  58. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/ruff.toml +0 -0
  59. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/skill-av-false-positive.md +0 -0
  60. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/skill-awesome-triage.md +0 -0
  61. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/skill-benchmark-update.md +0 -0
  62. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/skill-brand-assets.md +0 -0
  63. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/skill-file-bug-report.md +0 -0
  64. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/skill-repomatic-audit.md +0 -0
  65. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/skill-repomatic-deps.md +0 -0
  66. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/skill-repomatic-init.md +0 -0
  67. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/skill-repomatic-topics.md +0 -0
  68. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/skill-sphinx-docs-sync.md +0 -0
  69. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/skill-translation-sync.md +0 -0
  70. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/skill-upstream-audit.md +0 -0
  71. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/typos.toml +0 -0
  72. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/uv.toml +0 -0
  73. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/yamllint.yaml +0 -0
  74. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/data/zizmor.yaml +0 -0
  75. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/dep_sources.py +0 -0
  76. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/deps_graph.py +0 -0
  77. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/docs.py +0 -0
  78. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/git_ops.py +0 -0
  79. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/github/__init__.py +0 -0
  80. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/github/actions.py +0 -0
  81. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/github/dev_release.py +0 -0
  82. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/github/gh.py +0 -0
  83. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/github/issue.py +0 -0
  84. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/github/matrix.py +0 -0
  85. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/github/pr.py +0 -0
  86. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/github/pr_body.py +0 -0
  87. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/github/release_sync.py +0 -0
  88. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/github/releases.py +0 -0
  89. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/github/sponsor.py +0 -0
  90. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/github/status.py +0 -0
  91. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/github/token.py +0 -0
  92. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/github/unsubscribe.py +0 -0
  93. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/github/workflow_sync.py +0 -0
  94. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/gitignore.py +0 -0
  95. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/http.py +0 -0
  96. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/images.py +0 -0
  97. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/lint_repo.py +0 -0
  98. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/mailmap.py +0 -0
  99. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/metadata.py +0 -0
  100. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/npm.py +0 -0
  101. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/prepare_release.py +0 -0
  102. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/py.typed +0 -0
  103. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/pypi.py +0 -0
  104. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/pyproject.py +0 -0
  105. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/registry.py +0 -0
  106. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/setup_guide.py +0 -0
  107. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/sync_ops.py +0 -0
  108. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/__init__.py +0 -0
  109. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/available-admonition.md +0 -0
  110. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/broken-links-issue.md +0 -0
  111. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/bump-version.md +0 -0
  112. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/detect-squash-merge.md +0 -0
  113. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/development-warning.md +0 -0
  114. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/fix-changelog.md +0 -0
  115. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/fix-typos.md +0 -0
  116. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/fix-vulnerable-deps.md +0 -0
  117. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/format-images.md +0 -0
  118. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/format-json.md +0 -0
  119. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/format-markdown.md +0 -0
  120. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/format-pyproject.md +0 -0
  121. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/format-python.md +0 -0
  122. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/format-shell.md +0 -0
  123. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/generated-footer.md +0 -0
  124. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/github-releases.md +0 -0
  125. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/immutable-releases.md +0 -0
  126. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/pr-metadata.md.noformat +0 -0
  127. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/prepare-release.md +0 -0
  128. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/refresh-tip.md +0 -0
  129. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/release-notes.md +0 -0
  130. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/release-sync-report.md +0 -0
  131. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/setup-guide-branch-ruleset.md +0 -0
  132. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/setup-guide-dependabot.md +0 -0
  133. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/setup-guide-fork-pr-approval.md +0 -0
  134. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/setup-guide-notifications-pat.md +0 -0
  135. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/setup-guide-pages-source.md +0 -0
  136. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/setup-guide-pypi-trusted-publisher.md +0 -0
  137. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/setup-guide-token.md +0 -0
  138. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/setup-guide-verify.md +0 -0
  139. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/setup-guide-virustotal.md +0 -0
  140. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/setup-guide.md +0 -0
  141. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/sync-action-pins.md +0 -0
  142. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/sync-bumpversion.md +0 -0
  143. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/sync-dep-sources.md +0 -0
  144. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/sync-gitignore.md +0 -0
  145. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/sync-mailmap.md +0 -0
  146. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/sync-repomatic.md +0 -0
  147. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/sync-tool-versions.md +0 -0
  148. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/sync-uv-lock.md +0 -0
  149. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/sync-workflow-pins.md +0 -0
  150. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/unavailable-admonition.md +0 -0
  151. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/unsubscribe-phase1.md +0 -0
  152. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/unsubscribe-phase2.md +0 -0
  153. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/update-deps-graph.md +0 -0
  154. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/update-docs.md +0 -0
  155. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/templates/yanked-admonition.md +0 -0
  156. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/test_matrix.py +0 -0
  157. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/tool_runner_page.py +0 -0
  158. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/version_sync.py +0 -0
  159. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/virustotal.py +0 -0
  160. {repomatic-7.3.0 → repomatic-7.3.1}/repomatic/vulnerable_deps.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: repomatic
3
- Version: 7.3.0
3
+ Version: 7.3.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
@@ -58,7 +58,7 @@ Requires-Dist: wcmatch>=10
58
58
  Requires-Python: >=3.10
59
59
  Project-URL: Changelog, https://github.com/kdeldycke/repomatic/blob/main/changelog.md
60
60
  Project-URL: Documentation, https://kdeldycke.github.io/repomatic
61
- Project-URL: Download, https://github.com/kdeldycke/repomatic/releases/tag/v7.3.0
61
+ Project-URL: Download, https://github.com/kdeldycke/repomatic/releases/tag/v7.3.1
62
62
  Project-URL: Funding, https://github.com/sponsors/kdeldycke
63
63
  Project-URL: Homepage, https://github.com/kdeldycke/repomatic
64
64
  Project-URL: Issues, https://github.com/kdeldycke/repomatic/issues
@@ -5,7 +5,7 @@ requires = [ "uv-build>=0.9,<0.12" ]
5
5
  [project]
6
6
  # Docs: https://packaging.python.org/en/latest/guides/writing-pyproject-toml/
7
7
  name = "repomatic"
8
- version = "7.3.0"
8
+ version = "7.3.1"
9
9
  description = "🏭 Automate repository maintenance, releases, and CI/CD workflows"
10
10
  readme = "readme.md"
11
11
  keywords = [
@@ -128,7 +128,7 @@ dependencies = [
128
128
  ]
129
129
  urls.Changelog = "https://github.com/kdeldycke/repomatic/blob/main/changelog.md"
130
130
  urls.Documentation = "https://kdeldycke.github.io/repomatic"
131
- urls.Download = "https://github.com/kdeldycke/repomatic/releases/tag/v7.3.0"
131
+ urls.Download = "https://github.com/kdeldycke/repomatic/releases/tag/v7.3.1"
132
132
  urls.Funding = "https://github.com/sponsors/kdeldycke"
133
133
  urls.Homepage = "https://github.com/kdeldycke/repomatic"
134
134
  urls.Issues = "https://github.com/kdeldycke/repomatic/issues"
@@ -225,7 +225,7 @@ copyright = "Kevin Deldycke <kevin@deldycke.com> and contributors. Distributed u
225
225
  file-description = "🏭 Automate repository maintenance, releases, and CI/CD workflows"
226
226
  # Numeric only: Nuitka rejects PEP 440 .devN suffixes. Kept in sync with the
227
227
  # package version by the dedicated [tool.bumpversion] rule that strips the suffix.
228
- file-version = "7.3.0"
228
+ file-version = "7.3.1"
229
229
  include-data-dir = [
230
230
  "repomatic/data/awesome_template=repomatic/data/awesome_template",
231
231
  ]
@@ -243,7 +243,7 @@ include-package-data = [ "click_extra" ]
243
243
  linux-icon = "docs/assets/icon.png"
244
244
  macos-app-icon = "docs/assets/icon.icns"
245
245
  product-name = "Repomatic"
246
- product-version = "7.3.0"
246
+ product-version = "7.3.1"
247
247
  windows-icon-from-ico = "docs/assets/icon.ico"
248
248
 
249
249
  [tool.ruff]
@@ -343,11 +343,18 @@ addopts = [
343
343
  "--cov",
344
344
  "--cov-report=term",
345
345
  "--numprocesses=auto",
346
+ # Import test modules via importlib instead of prepending their root dir to
347
+ # sys.path. Avoids "import file mismatch" collection errors when an installed
348
+ # copy of the package coexists with the source tree, as in distro builds.
349
+ "--import-mode=importlib",
346
350
  ]
347
351
  # https://docs.pytest.org/en/latest/customize.html#pyproject-toml
348
352
  markers = [
349
353
  "once: Tests that only need to run once, not across the full CI matrix.",
350
354
  ]
355
+ # Restrict collection to the test suite, so pytest never descends into the
356
+ # package or an installed copy of it in dual-copy builds.
357
+ testpaths = [ "tests" ]
351
358
  # Make sure tests that are expected to fail do not resurrect and start working all of a sudden.
352
359
  xfail_strict = true
353
360
 
@@ -358,7 +365,7 @@ run.source = [ "repomatic" ]
358
365
  report.precision = 2
359
366
 
360
367
  [tool.bumpversion]
361
- current_version = "7.3.0"
368
+ current_version = "7.3.1"
362
369
  # Parse versions with an optional .devN suffix (PEP 440).
363
370
  parse = "(?P<major>\\d+)\\.(?P<minor>\\d+)\\.(?P<patch>\\d+)(\\.dev(?P<dev>\\d+))?"
364
371
  serialize = [
@@ -17,5 +17,5 @@
17
17
 
18
18
  from __future__ import annotations
19
19
 
20
- __version__ = "7.3.0"
21
- __git_tag_sha__ = "2b89c62f0953d8ef59d0d023085a9323f6c32f1d"
20
+ __version__ = "7.3.1"
21
+ __git_tag_sha__ = "c81fb2e6fa884cb62ef46e69b8c8db44fa6fad15"
@@ -959,7 +959,16 @@ def lint_changelog_dates(
959
959
  archive_headings = Changelog(
960
960
  archive_path.read_text(encoding="UTF-8")
961
961
  ).extract_all_version_headings()
962
- all_known = set(pypi_data) | set(github_releases) | set(tag_versions)
962
+ # The changelog documents only final releases. Exclude pre-releases
963
+ # (dev/alpha/beta/rc) so a published `X.Y.Z.dev0` tag, PyPI upload, or
964
+ # GitHub prerelease is never mistaken for a missing changelog entry: an
965
+ # orphan insertion would both drop a spurious pre-release section and
966
+ # rewrite the adjacent release's comparison-URL base to point at it.
967
+ all_known = {
968
+ v
969
+ for v in (set(pypi_data) | set(github_releases) | set(tag_versions))
970
+ if not Version(v).is_prerelease
971
+ }
963
972
  orphans = all_known - changelog_headings - archive_headings
964
973
  if orphans:
965
974
  for orphan in sorted(orphans, key=Version):
@@ -1004,6 +1013,11 @@ def lint_changelog_dates(
1004
1013
 
1005
1014
  date_corrections: dict[str, str] = {}
1006
1015
  abandoned = frozenset(abandoned_versions)
1016
+ # Point maintainers at the remedy: a version that is intentionally absent
1017
+ # from the reference source is declared once in config, not re-flagged.
1018
+ abandoned_hint = (
1019
+ "list under [tool.repomatic] abandoned-versions if intentionally unpublished"
1020
+ )
1007
1021
 
1008
1022
  for version, changelog_date in releases:
1009
1023
  if use_pypi:
@@ -1018,10 +1032,10 @@ def lint_changelog_dates(
1018
1032
  f" {version}: predates PyPI (first: {first_pypi_version})"
1019
1033
  )
1020
1034
  continue
1021
- logging.warning(f"⚠ {version}: not found on PyPI")
1035
+ logging.warning(f"⚠ {version}: not found on PyPI ({abandoned_hint})")
1022
1036
  emit_annotation(
1023
1037
  AnnotationLevel.WARNING,
1024
- f"Version {version} not found on PyPI",
1038
+ f"Version {version} not found on PyPI ({abandoned_hint})",
1025
1039
  )
1026
1040
  continue
1027
1041
  ref_date = release.date
@@ -1033,10 +1047,12 @@ def lint_changelog_dates(
1033
1047
  if version in abandoned:
1034
1048
  logging.info(f" {version}: abandoned (skipped per config)")
1035
1049
  continue
1036
- logging.warning(f"⚠ {version}: not found on {source}")
1050
+ logging.warning(
1051
+ f"⚠ {version}: not found on {source} ({abandoned_hint})"
1052
+ )
1037
1053
  emit_annotation(
1038
1054
  AnnotationLevel.WARNING,
1039
- f"Version {version} not found on {source}",
1055
+ f"Version {version} not found on {source} ({abandoned_hint})",
1040
1056
  )
1041
1057
  continue
1042
1058
  ref_date = tag_date
@@ -36,7 +36,7 @@ jobs:
36
36
  has_virustotal_key: ${{ steps.check-vt-key.outputs.has_key }}
37
37
  metadata: ${{ steps.metadata.outputs.metadata }}
38
38
  steps:
39
- - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
39
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
40
40
  with:
41
41
  # Checkout pull request HEAD commit to ignore actions/checkout's merge commit. Fallback to push SHA.
42
42
  # See: https://github.com/actions/checkout/issues/504
@@ -51,7 +51,7 @@ jobs:
51
51
  - name: Run repomatic metadata
52
52
  id: metadata
53
53
  run: >
54
- uvx --no-progress 'repomatic==7.3.0' metadata
54
+ uvx --no-progress 'repomatic==7.3.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
@@ -88,7 +88,7 @@ jobs:
88
88
  attestations: write
89
89
  contents: read
90
90
  steps:
91
- - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
91
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
92
92
  with:
93
93
  ref: ${{ matrix.commit }}
94
94
  - uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
@@ -113,7 +113,7 @@ jobs:
113
113
  uv --no-progress sync --frozen ${flags}
114
114
  - name: Pre-bake build metadata
115
115
  if: contains(matrix.current_version, '.dev')
116
- run: uvx --no-progress 'click-extra==8.3.0' prebake all
116
+ run: uvx --no-progress 'click-extra==8.4.0' prebake all
117
117
  - name: Build binary
118
118
  id: build-binary
119
119
  continue-on-error: true
@@ -132,7 +132,7 @@ jobs:
132
132
  # NUITKA_PYTHON_FLAGS holds the entry point's --python-flag (if any),
133
133
  # meant to word-split.
134
134
  # shellcheck disable=SC2086
135
- uvx --no-progress 'repomatic==7.3.0' run nuitka -- \
135
+ uvx --no-progress 'repomatic==7.3.1' run nuitka -- \
136
136
  ${NUITKA_PYTHON_FLAGS} \
137
137
  --output-filename="${BIN_NAME}" "${MODULE_PATH}"
138
138
  - name: Upload Nuitka crash report
@@ -176,7 +176,7 @@ jobs:
176
176
  BIN_NAME: ${{ matrix.bin_name }}
177
177
  shell: bash
178
178
  run: >
179
- uvx --no-progress 'repomatic==7.3.0'
179
+ uvx --no-progress 'repomatic==7.3.1'
180
180
  verify-binary --target "${TARGET}" --binary "${BIN_NAME}"
181
181
  - name: Upload binaries
182
182
  uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
@@ -191,7 +191,7 @@ jobs:
191
191
  if: >-
192
192
  github.ref == 'refs/heads/main'
193
193
  && fromJSON(needs.metadata.outputs.metadata).release_commits_matrix
194
- uses: actions/attest@a1948c3f048ba23858d222213b7c278aabede763 # v4.1.1
194
+ uses: actions/attest@f7c74d28b9d84cb8768d0b8ca14a4bac6ef463e6 # v4.2.0
195
195
  with:
196
196
  subject-path: ${{ matrix.bin_name }}
197
197
  - name: Verify binary attestation
@@ -237,7 +237,7 @@ jobs:
237
237
  # We keep going when a job flagged as not stable fails.
238
238
  continue-on-error: ${{ matrix.state == 'unstable' }}
239
239
  steps:
240
- - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
240
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
241
241
  with:
242
242
  ref: ${{ matrix.commit }}
243
243
  - name: Download artifact
@@ -281,7 +281,7 @@ jobs:
281
281
  permissions:
282
282
  contents: write
283
283
  steps:
284
- - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
284
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
285
285
  with:
286
286
  ref: ${{ matrix.commit }}
287
287
  # PAT required so tag pushes trigger downstream on.push.tags workflows.
@@ -295,7 +295,7 @@ jobs:
295
295
  CURRENT_VERSION: ${{ matrix.current_version }}
296
296
  COMMIT: ${{ matrix.commit }}
297
297
  run: >
298
- uvx --no-progress 'repomatic==7.3.0' git-tag
298
+ uvx --no-progress 'repomatic==7.3.1' git-tag
299
299
  --tag "v${CURRENT_VERSION}"
300
300
  --commit "${COMMIT}"
301
301
  --skip-existing
@@ -316,7 +316,7 @@ jobs:
316
316
  # Allow project without REPOMATIC_PAT to create a GitHub release.
317
317
  contents: write
318
318
  steps:
319
- - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
319
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
320
320
  with:
321
321
  ref: ${{ matrix.commit }}
322
322
  - uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
@@ -336,7 +336,7 @@ jobs:
336
336
  continue-on-error: true
337
337
  env:
338
338
  GH_TOKEN: ${{ secrets.REPOMATIC_PAT || github.token }}
339
- run: uvx --no-progress 'repomatic==7.3.0' sync-dev-release --live --delete
339
+ run: uvx --no-progress 'repomatic==7.3.1' sync-dev-release --live --delete
340
340
  - name: Create GitHub release draft
341
341
  # Idempotent: skips if release already exists (e.g. workflow re-run).
342
342
  # Notes carry the PyPI availability admonition from the start: baking it
@@ -390,7 +390,7 @@ jobs:
390
390
  permissions:
391
391
  contents: write
392
392
  steps:
393
- - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
393
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
394
394
  with:
395
395
  ref: ${{ matrix.commit }}
396
396
  - uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
@@ -510,7 +510,7 @@ jobs:
510
510
  permissions:
511
511
  contents: write
512
512
  steps:
513
- - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
513
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
514
514
  with:
515
515
  # Scan records and the binaries page are committed on top of the
516
516
  # default branch tip, not the release commit. The PAT (when
@@ -538,7 +538,7 @@ jobs:
538
538
  VIRUSTOTAL_API_KEY: ${{ secrets.VIRUSTOTAL_API_KEY }}
539
539
  CURRENT_VERSION: ${{ matrix.current_version }}
540
540
  run: >
541
- uvx --no-progress 'repomatic==7.3.0' scan-virustotal
541
+ uvx --no-progress 'repomatic==7.3.1' scan-virustotal
542
542
  --tag "v${CURRENT_VERSION}"
543
543
  --binaries-dir ./binaries
544
544
  --poll
@@ -551,7 +551,7 @@ jobs:
551
551
  env:
552
552
  GH_TOKEN: ${{ github.token }}
553
553
  run: >
554
- uvx --no-progress 'repomatic==7.3.0' sync-binaries
554
+ uvx --no-progress 'repomatic==7.3.1' sync-binaries
555
555
  --repo "${{ github.repository }}"
556
556
  --page docs/binaries.md
557
557
  --records docs/assets/virustotal-scans.json
@@ -566,7 +566,7 @@ jobs:
566
566
  CURRENT_VERSION: ${{ matrix.current_version }}
567
567
  DEFAULT_BRANCH: ${{ github.event.repository.default_branch }}
568
568
  run: >
569
- uvx --no-progress 'repomatic==7.3.0' git-commit-push
569
+ uvx --no-progress 'repomatic==7.3.1' git-commit-push
570
570
  --message "Record v${CURRENT_VERSION} binaries"
571
571
  --branch "${DEFAULT_BRANCH}"
572
572
  docs/binaries.md
@@ -587,11 +587,21 @@ jobs:
587
587
  && github.ref == 'refs/heads/main'
588
588
  && !fromJSON(needs.metadata.outputs.metadata).release_commits_matrix
589
589
  && fromJSON(needs.metadata.outputs.metadata).current_version
590
+ # Serialise this job across overlapping release runs: the dev pre-release is a
591
+ # single mutable GitHub resource this job deletes, recreates and uploads to. The
592
+ # run-level concurrency in release.yaml cancels a superseded run mid-sync, which
593
+ # can leave the pre-release half-rewritten and fail the next run's sync. A
594
+ # dedicated per-repository group that never cancels in progress lets each sync
595
+ # finish cleanly before the next starts; GitHub keeps only the latest queued one,
596
+ # so the pre-release still converges to the newest build.
597
+ concurrency:
598
+ group: sync-dev-release-${{ github.repository }}
599
+ cancel-in-progress: false
590
600
  runs-on: ubuntu-slim
591
601
  permissions:
592
602
  contents: write
593
603
  steps:
594
- - uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
604
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
595
605
  - uses: astral-sh/setup-uv@11f9893b081a58869d3b5fccaea48c9e9e46f990 # v8.3.2
596
606
  - name: Download all build artifacts
597
607
  uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
@@ -602,5 +612,5 @@ jobs:
602
612
  env:
603
613
  GH_TOKEN: ${{ github.token }}
604
614
  run: >
605
- uvx --no-progress 'repomatic==7.3.0' sync-dev-release --live
615
+ uvx --no-progress 'repomatic==7.3.1' sync-dev-release --live
606
616
  --upload-assets release_assets