python-semantic-release 10.5.2__tar.gz → 10.6.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 (241) hide show
  1. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/PKG-INFO +2 -2
  2. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/docs/api/commands.rst +26 -6
  3. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/docs/configuration/automatic-releases/github-actions.rst +14 -14
  4. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/docs/configuration/configuration-guides/uv_integration.rst +13 -13
  5. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/docs/configuration/configuration.rst +52 -3
  6. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/docs/upgrading/08-upgrade.rst +6 -6
  7. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/pyproject.toml +5 -4
  8. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/python_semantic_release.egg-info/SOURCES.txt +2 -0
  9. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/cli/commands/generate_config.py +27 -8
  10. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/cli/commands/publish.py +11 -6
  11. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/cli/commands/version.py +1 -0
  12. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/cli/config.py +16 -5
  13. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/cli/util.py +1 -1
  14. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/commit_parser/conventional/options_monorepo.py +26 -17
  15. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/commit_parser/emoji.py +6 -1
  16. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/gitproject.py +46 -2
  17. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/helpers.py +12 -2
  18. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/hvcs/github.py +12 -1
  19. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/version/declaration.py +3 -1
  20. python_semantic_release-10.6.0/src/semantic_release/version/declarations/file.py +145 -0
  21. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/version/declarations/i_version_replacer.py +6 -0
  22. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/const.py +2 -2
  23. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_config/test_generate_config.py +78 -0
  24. python_semantic_release-10.6.0/tests/e2e/cmd_publish/test_publish.py +170 -0
  25. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/test_version_stamp.py +130 -0
  26. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/fixtures/git_repo.py +16 -36
  27. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/fixtures/monorepos/example_monorepo.py +42 -2
  28. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/fixtures/monorepos/github_flow/monorepo_w_default_release.py +21 -8
  29. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/fixtures/monorepos/github_flow/monorepo_w_release_channels.py +15 -10
  30. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/fixtures/monorepos/trunk_based_dev/monorepo_w_tags.py +23 -7
  31. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/semantic_release/commit_parser/test_emoji.py +13 -5
  32. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/semantic_release/hvcs/test_github.py +222 -1
  33. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/semantic_release/test_gitproject.py +20 -0
  34. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/semantic_release/test_helpers.py +25 -0
  35. python_semantic_release-10.6.0/tests/unit/semantic_release/version/declarations/test_file_declaration.py +279 -0
  36. python_semantic_release-10.5.2/tests/e2e/cmd_publish/test_publish.py +0 -89
  37. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/LICENSE +0 -0
  38. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/MANIFEST.in +0 -0
  39. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/README.rst +0 -0
  40. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/docs/Makefile +0 -0
  41. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/docs/concepts/changelog_templates.rst +0 -0
  42. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/docs/concepts/commit_parsing.rst +0 -0
  43. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/docs/concepts/getting_started.rst +0 -0
  44. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/docs/concepts/index.rst +0 -0
  45. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/docs/concepts/installation.rst +0 -0
  46. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/docs/concepts/multibranch_releases.rst +0 -0
  47. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/docs/concepts/strict_mode.rst +0 -0
  48. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/docs/conf.py +0 -0
  49. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/docs/configuration/automatic-releases/cronjobs.rst +0 -0
  50. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/docs/configuration/automatic-releases/index.rst +0 -0
  51. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/docs/configuration/automatic-releases/travis.rst +0 -0
  52. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/docs/configuration/configuration-guides/index.rst +0 -0
  53. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/docs/configuration/configuration-guides/monorepos-ex-easy-before-release.png +0 -0
  54. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/docs/configuration/configuration-guides/monorepos-ex-easy-post-release.png +0 -0
  55. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/docs/configuration/configuration-guides/monorepos.rst +0 -0
  56. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/docs/configuration/index.rst +0 -0
  57. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/docs/contributing/contributing_guide.rst +0 -0
  58. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/docs/contributing/index.rst +0 -0
  59. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/docs/index.rst +0 -0
  60. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/docs/make.bat +0 -0
  61. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/docs/misc/psr_changelog.rst +0 -0
  62. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/docs/misc/troubleshooting.rst +0 -0
  63. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/docs/upgrading/09-upgrade.rst +0 -0
  64. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/docs/upgrading/10-upgrade.rst +0 -0
  65. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/docs/upgrading/index.rst +0 -0
  66. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/setup.cfg +0 -0
  67. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/__init__.py +0 -0
  68. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/__main__.py +0 -0
  69. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/changelog/__init__.py +0 -0
  70. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/changelog/context.py +0 -0
  71. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/changelog/release_history.py +0 -0
  72. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/changelog/template.py +0 -0
  73. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/cli/__init__.py +0 -0
  74. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/cli/changelog_writer.py +0 -0
  75. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/cli/cli_context.py +0 -0
  76. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/cli/commands/__init__.py +0 -0
  77. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/cli/commands/changelog.py +0 -0
  78. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/cli/commands/main.py +0 -0
  79. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/cli/const.py +0 -0
  80. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/cli/github_actions_output.py +0 -0
  81. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/cli/masking_filter.py +0 -0
  82. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/commit_parser/__init__.py +0 -0
  83. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/commit_parser/_base.py +0 -0
  84. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/commit_parser/angular.py +0 -0
  85. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/commit_parser/conventional/__init__.py +0 -0
  86. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/commit_parser/conventional/options.py +0 -0
  87. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/commit_parser/conventional/parser.py +0 -0
  88. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/commit_parser/conventional/parser_monorepo.py +0 -0
  89. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/commit_parser/scipy.py +0 -0
  90. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/commit_parser/tag.py +0 -0
  91. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/commit_parser/token.py +0 -0
  92. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/commit_parser/util.py +0 -0
  93. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/const.py +0 -0
  94. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/data/templates/conventional/md/.components/changelog_header.md.j2 +0 -0
  95. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/data/templates/conventional/md/.components/changelog_init.md.j2 +0 -0
  96. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/data/templates/conventional/md/.components/changelog_update.md.j2 +0 -0
  97. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/data/templates/conventional/md/.components/changes.md.j2 +0 -0
  98. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/data/templates/conventional/md/.components/first_release.md.j2 +0 -0
  99. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/data/templates/conventional/md/.components/macros.md.j2 +0 -0
  100. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/data/templates/conventional/md/.components/unreleased_changes.md.j2 +0 -0
  101. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/data/templates/conventional/md/.components/versioned_changes.md.j2 +0 -0
  102. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/data/templates/conventional/md/.release_notes.md.j2 +0 -0
  103. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/data/templates/conventional/md/CHANGELOG.md.j2 +0 -0
  104. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/data/templates/conventional/rst/.components/changelog_header.rst.j2 +0 -0
  105. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/data/templates/conventional/rst/.components/changelog_init.rst.j2 +0 -0
  106. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/data/templates/conventional/rst/.components/changelog_update.rst.j2 +0 -0
  107. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/data/templates/conventional/rst/.components/changes.rst.j2 +0 -0
  108. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/data/templates/conventional/rst/.components/first_release.rst.j2 +0 -0
  109. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/data/templates/conventional/rst/.components/macros.rst.j2 +0 -0
  110. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/data/templates/conventional/rst/.components/unreleased_changes.rst.j2 +0 -0
  111. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/data/templates/conventional/rst/.components/versioned_changes.rst.j2 +0 -0
  112. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/data/templates/conventional/rst/CHANGELOG.rst.j2 +0 -0
  113. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/enums.py +0 -0
  114. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/errors.py +0 -0
  115. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/globals.py +0 -0
  116. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/hvcs/__init__.py +0 -0
  117. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/hvcs/_base.py +0 -0
  118. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/hvcs/bitbucket.py +0 -0
  119. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/hvcs/gitea.py +0 -0
  120. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/hvcs/gitlab.py +0 -0
  121. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/hvcs/remote_hvcs_base.py +0 -0
  122. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/hvcs/token_auth.py +0 -0
  123. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/hvcs/util.py +0 -0
  124. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/py.typed +0 -0
  125. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/version/__init__.py +0 -0
  126. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/version/algorithm.py +0 -0
  127. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/version/declarations/__init__.py +0 -0
  128. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/version/declarations/enum.py +0 -0
  129. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/version/declarations/pattern.py +0 -0
  130. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/version/declarations/toml.py +0 -0
  131. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/version/translator.py +0 -0
  132. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/src/semantic_release/version/version.py +0 -0
  133. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/__init__.py +0 -0
  134. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/conftest.py +0 -0
  135. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/__init__.py +0 -0
  136. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_changelog/__init__.py +0 -0
  137. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_changelog/test_changelog.py +0 -0
  138. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_changelog/test_changelog_custom_parser.py +0 -0
  139. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_changelog/test_changelog_parsing.py +0 -0
  140. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_changelog/test_changelog_release_notes.py +0 -0
  141. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_config/__init__.py +0 -0
  142. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_publish/__init__.py +0 -0
  143. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/__init__.py +0 -0
  144. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/__init__.py +0 -0
  145. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/conftest.py +0 -0
  146. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/git_flow/__init__.py +0 -0
  147. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/git_flow/test_repo_1_channel.py +0 -0
  148. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/git_flow/test_repo_2_channels.py +0 -0
  149. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/git_flow/test_repo_3_channels.py +0 -0
  150. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/git_flow/test_repo_4_channels.py +0 -0
  151. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/github_flow/__init__.py +0 -0
  152. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/github_flow/test_repo_1_channel.py +0 -0
  153. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/github_flow/test_repo_1_channel_branch_update_merge.py +0 -0
  154. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/github_flow/test_repo_2_channels.py +0 -0
  155. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/github_flow_monorepo/__init__.py +0 -0
  156. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/github_flow_monorepo/test_monorepo_1_channel.py +0 -0
  157. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/github_flow_monorepo/test_monorepo_2_channels.py +0 -0
  158. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/trunk_based_dev/__init__.py +0 -0
  159. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/trunk_based_dev/test_repo_trunk.py +0 -0
  160. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/trunk_based_dev/test_repo_trunk_dual_version_support.py +0 -0
  161. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/trunk_based_dev/test_repo_trunk_dual_version_support_w_prereleases.py +0 -0
  162. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/trunk_based_dev/test_repo_trunk_w_prereleases.py +0 -0
  163. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/trunk_based_dev_monorepo/__init__.py +0 -0
  164. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/trunk_based_dev_monorepo/test_monorepo_trunk.py +0 -0
  165. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/test_version.py +0 -0
  166. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/test_version_build.py +0 -0
  167. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/test_version_bump.py +0 -0
  168. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/test_version_changelog.py +0 -0
  169. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/test_version_changelog_custom_commit_msg.py +0 -0
  170. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/test_version_github_actions.py +0 -0
  171. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/test_version_partial_tag.py +0 -0
  172. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/test_version_print.py +0 -0
  173. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/test_version_release_notes.py +0 -0
  174. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/test_version_shallow.py +0 -0
  175. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/test_version_strict.py +0 -0
  176. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/test_version_upstream_check.py +0 -0
  177. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/conftest.py +0 -0
  178. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/test_help.py +0 -0
  179. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/e2e/test_main.py +0 -0
  180. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/fixtures/__init__.py +0 -0
  181. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/fixtures/commit_parsers.py +0 -0
  182. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/fixtures/example_project.py +0 -0
  183. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/fixtures/monorepos/__init__.py +0 -0
  184. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/fixtures/monorepos/git_monorepo.py +0 -0
  185. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/fixtures/monorepos/github_flow/__init__.py +0 -0
  186. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/fixtures/monorepos/trunk_based_dev/__init__.py +0 -0
  187. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/fixtures/repos/__init__.py +0 -0
  188. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/fixtures/repos/git_flow/__init__.py +0 -0
  189. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/fixtures/repos/git_flow/repo_w_1_release_channel.py +0 -0
  190. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/fixtures/repos/git_flow/repo_w_2_release_channels.py +0 -0
  191. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/fixtures/repos/git_flow/repo_w_3_release_channels.py +0 -0
  192. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/fixtures/repos/git_flow/repo_w_4_release_channels.py +0 -0
  193. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/fixtures/repos/github_flow/__init__.py +0 -0
  194. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/fixtures/repos/github_flow/repo_w_default_release.py +0 -0
  195. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/fixtures/repos/github_flow/repo_w_default_release_w_branch_update_merge.py +0 -0
  196. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/fixtures/repos/github_flow/repo_w_release_channels.py +0 -0
  197. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/fixtures/repos/repo_initial_commit.py +0 -0
  198. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/fixtures/repos/trunk_based_dev/__init__.py +0 -0
  199. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/fixtures/repos/trunk_based_dev/repo_w_dual_version_support.py +0 -0
  200. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/fixtures/repos/trunk_based_dev/repo_w_dual_version_support_w_prereleases.py +0 -0
  201. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/fixtures/repos/trunk_based_dev/repo_w_no_tags.py +0 -0
  202. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/fixtures/repos/trunk_based_dev/repo_w_prereleases.py +0 -0
  203. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/fixtures/repos/trunk_based_dev/repo_w_tags.py +0 -0
  204. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/fixtures/scipy.py +0 -0
  205. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/__init__.py +0 -0
  206. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/conftest.py +0 -0
  207. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/semantic_release/__init__.py +0 -0
  208. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/semantic_release/changelog/__init__.py +0 -0
  209. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/semantic_release/changelog/conftest.py +0 -0
  210. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/semantic_release/changelog/test_changelog_context.py +0 -0
  211. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/semantic_release/changelog/test_default_changelog.py +0 -0
  212. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/semantic_release/changelog/test_release_history.py +0 -0
  213. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/semantic_release/changelog/test_release_notes.py +0 -0
  214. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/semantic_release/changelog/test_template.py +0 -0
  215. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/semantic_release/changelog/test_template_render.py +0 -0
  216. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/semantic_release/cli/__init__.py +0 -0
  217. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/semantic_release/cli/test_config.py +0 -0
  218. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/semantic_release/cli/test_github_actions_output.py +0 -0
  219. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/semantic_release/cli/test_masking_filter.py +0 -0
  220. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/semantic_release/cli/test_util.py +0 -0
  221. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/semantic_release/cli/test_version.py +0 -0
  222. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/semantic_release/commit_parser/__init__.py +0 -0
  223. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/semantic_release/commit_parser/test_conventional.py +0 -0
  224. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/semantic_release/commit_parser/test_parsed_commit.py +0 -0
  225. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/semantic_release/commit_parser/test_scipy.py +0 -0
  226. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/semantic_release/commit_parser/test_util.py +0 -0
  227. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/semantic_release/hvcs/__init__.py +0 -0
  228. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/semantic_release/hvcs/test__base.py +0 -0
  229. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/semantic_release/hvcs/test_bitbucket.py +0 -0
  230. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/semantic_release/hvcs/test_gitea.py +0 -0
  231. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/semantic_release/hvcs/test_gitlab.py +0 -0
  232. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/semantic_release/hvcs/test_token_auth.py +0 -0
  233. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/semantic_release/hvcs/test_util.py +0 -0
  234. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/semantic_release/version/__init__.py +0 -0
  235. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/semantic_release/version/declarations/__init__.py +0 -0
  236. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/semantic_release/version/declarations/test_pattern_declaration.py +0 -0
  237. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/semantic_release/version/declarations/test_toml_declaration.py +0 -0
  238. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/semantic_release/version/test_algorithm.py +0 -0
  239. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/semantic_release/version/test_translator.py +0 -0
  240. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/unit/semantic_release/version/test_version.py +0 -0
  241. {python_semantic_release-10.5.2 → python_semantic_release-10.6.0}/tests/util.py +0 -0
@@ -1,10 +1,10 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-semantic-release
3
- Version: 10.5.2
3
+ Version: 10.6.0
4
4
  Summary: Automatic Semantic Versioning for Python projects
5
5
  Author-email: Rolf Erik Lekang <me@rolflekang.com>, codejedi365 <codejedi365@gmail.com>
6
6
  License: MIT
7
- Project-URL: changelog, https://github.com/python-semantic-release/python-semantic-release/blob/master/CHANGELOG.md
7
+ Project-URL: changelog, https://python-semantic-release.readthedocs.io/en/stable/misc/psr_changelog.html
8
8
  Project-URL: documentation, https://python-semantic-release.readthedocs.io
9
9
  Project-URL: homepage, https://python-semantic-release.readthedocs.io
10
10
  Project-URL: issues, https://github.com/python-semantic-release/python-semantic-release/issues
@@ -473,16 +473,36 @@ Release corresponding to this version.
473
473
 
474
474
  Generate default configuration for semantic-release, to help you get started
475
475
  quickly. You can inspect the defaults, write to a file and then edit according to
476
- your needs.
477
- For example, to append the default configuration to your pyproject.toml
478
- file, you can use the following command::
476
+ your needs. For example, to append the default configuration to your ``pyproject.toml``
477
+ file, you can use the following command (in POSIX-Compliant shells):
479
478
 
480
- $ semantic-release generate-config -f toml --pyproject >> pyproject.toml
479
+ .. code-block:: bash
480
+
481
+ semantic-release generate-config --pyproject >> pyproject.toml
482
+
483
+ On Windows PowerShell, the redirection operators (`>`/`>>`) default to UTF-16LE,
484
+ which can introduce NUL characters. Prefer one of the following to keep UTF-8:
485
+
486
+ .. code-block:: console
487
+
488
+ # 2 File output Piping Options in PowerShell (Out-File or Set-Content)
489
+
490
+ # Example for writing to pyproject.toml using Out-File:
491
+ semantic-release generate-config --pyproject | Out-File -Encoding utf8 pyproject.toml
492
+
493
+ # Example for writing to a releaserc.toml file using Set-Content:
494
+ semantic-release generate-config -f toml | Set-Content -Encoding utf8 releaserc.toml
481
495
 
482
496
  If your project doesn't already leverage TOML files for configuration, it might better
483
- suit your project to use JSON instead::
497
+ suit your project to use JSON instead:
498
+
499
+ .. code-block:: bash
500
+
501
+ # POSIX-Compliant shell example
502
+ semantic-release generate-config -f json | tee releaserc.json
484
503
 
485
- $ semantic-release generate-config -f json
504
+ # Windows PowerShell example
505
+ semantic-release generate-config -f json | Out-File -Encoding utf8 releaserc.json
486
506
 
487
507
  If you would like to add JSON configuration to a shared file, e.g. ``package.json``, you
488
508
  can then simply add the output from this command as a **top-level** key to the file.
@@ -882,7 +882,7 @@ to the GitHub Release Assets as well.
882
882
  # while the workflow was running, which prevents accidentally releasing un-evaluated
883
883
  # changes.
884
884
  - name: Setup | Checkout Repository on Release Branch
885
- uses: actions/checkout@v4
885
+ uses: actions/checkout@COMMIT_HASH # v6
886
886
  with:
887
887
  ref: ${{ github.ref_name }}
888
888
 
@@ -893,21 +893,21 @@ to the GitHub Release Assets as well.
893
893
  - name: Action | Semantic Version Release
894
894
  id: release
895
895
  # Adjust tag with desired version if applicable.
896
- uses: python-semantic-release/python-semantic-release@v10.5.2
896
+ uses: python-semantic-release/python-semantic-release@COMMIT_HASH # v10.6.0
897
897
  with:
898
898
  github_token: ${{ secrets.GITHUB_TOKEN }}
899
899
  git_committer_name: "github-actions"
900
900
  git_committer_email: "actions@users.noreply.github.com"
901
901
 
902
902
  - name: Publish | Upload to GitHub Release Assets
903
- uses: python-semantic-release/publish-action@v10.5.2
903
+ uses: python-semantic-release/publish-action@COMMIT_HASH # v10.6.0
904
904
  if: steps.release.outputs.released == 'true'
905
905
  with:
906
906
  github_token: ${{ secrets.GITHUB_TOKEN }}
907
907
  tag: ${{ steps.release.outputs.tag }}
908
908
 
909
909
  - name: Upload | Distribution Artifacts
910
- uses: actions/upload-artifact@v4
910
+ uses: actions/upload-artifact@COMMIT_HASH # v4.X.X
911
911
  with:
912
912
  name: distribution-artifacts
913
913
  path: dist
@@ -931,7 +931,7 @@ to the GitHub Release Assets as well.
931
931
 
932
932
  steps:
933
933
  - name: Setup | Download Build Artifacts
934
- uses: actions/download-artifact@v4
934
+ uses: actions/download-artifact@COMMIT_HASH # v4.X.X
935
935
  id: artifact-download
936
936
  with:
937
937
  name: distribution-artifacts
@@ -947,7 +947,7 @@ to the GitHub Release Assets as well.
947
947
 
948
948
  # see https://docs.pypi.org/trusted-publishers/
949
949
  - name: Publish package distributions to PyPI
950
- uses: pypa/gh-action-pypi-publish@@SHA1_HASH # vX.X.X
950
+ uses: pypa/gh-action-pypi-publish@COMMIT_HASH # vX.X.X
951
951
  with:
952
952
  packages-dir: dist
953
953
  print-hash: true
@@ -971,7 +971,7 @@ to the GitHub Release Assets as well.
971
971
  .. note::
972
972
  As of v10.5.0, Python Semantic Release automatically detects and converts
973
973
  shallow clones to full clones when needed. While you can still use ``fetch-depth: 0``
974
- with ``actions/checkout@v4`` to fetch the full history upfront, it is no longer
974
+ with ``actions/checkout`` to fetch the full history upfront, it is no longer
975
975
  required. If you use the default shallow clone, Python Semantic Release will
976
976
  automatically fetch the full history before evaluating commits. If you are using
977
977
  an older version of PSR, you will need to unshallow the repository prior to use.
@@ -1005,7 +1005,7 @@ The equivalent GitHub Action configuration would be:
1005
1005
 
1006
1006
  - name: Action | Semantic Version Release
1007
1007
  # Adjust tag with desired version if applicable.
1008
- uses: python-semantic-release/python-semantic-release@v10.5.2
1008
+ uses: python-semantic-release/python-semantic-release@v10.5.3
1009
1009
  with:
1010
1010
  github_token: ${{ secrets.GITHUB_TOKEN }}
1011
1011
  force: patch
@@ -1064,14 +1064,14 @@ Publish Action.
1064
1064
 
1065
1065
  - name: Release submodule 1
1066
1066
  id: release-submod-1
1067
- uses: python-semantic-release/python-semantic-release@v10.5.2
1067
+ uses: python-semantic-release/python-semantic-release@v10.5.3
1068
1068
  with:
1069
1069
  directory: ${{ env.SUBMODULE_1_DIR }}
1070
1070
  github_token: ${{ secrets.GITHUB_TOKEN }}
1071
1071
 
1072
1072
  - name: Release submodule 2
1073
1073
  id: release-submod-2
1074
- uses: python-semantic-release/python-semantic-release@v10.5.2
1074
+ uses: python-semantic-release/python-semantic-release@v10.5.3
1075
1075
  with:
1076
1076
  directory: ${{ env.SUBMODULE_2_DIR }}
1077
1077
  github_token: ${{ secrets.GITHUB_TOKEN }}
@@ -1083,7 +1083,7 @@ Publish Action.
1083
1083
  # ------------------------------------------------------------------- #
1084
1084
 
1085
1085
  - name: Publish | Upload package 1 to GitHub Release Assets
1086
- uses: python-semantic-release/publish-action@v10.5.2
1086
+ uses: python-semantic-release/publish-action@v10.5.3
1087
1087
  if: steps.release-submod-1.outputs.released == 'true'
1088
1088
  with:
1089
1089
  directory: ${{ env.SUBMODULE_1_DIR }}
@@ -1091,7 +1091,7 @@ Publish Action.
1091
1091
  tag: ${{ steps.release-submod-1.outputs.tag }}
1092
1092
 
1093
1093
  - name: Publish | Upload package 2 to GitHub Release Assets
1094
- uses: python-semantic-release/publish-action@v10.5.2
1094
+ uses: python-semantic-release/publish-action@v10.5.3
1095
1095
  if: steps.release-submod-2.outputs.released == 'true'
1096
1096
  with:
1097
1097
  directory: ${{ env.SUBMODULE_2_DIR }}
@@ -1107,13 +1107,13 @@ Publish Action.
1107
1107
  # ------------------------------------------------------------------- #
1108
1108
 
1109
1109
  - name: Publish | Upload package 1 to PyPI
1110
- uses: pypa/gh-action-pypi-publish@SHA1_HASH # vX.X.X
1110
+ uses: pypa/gh-action-pypi-publish@COMMIT_HASH # vX.X.X
1111
1111
  if: steps.release-submod-1.outputs.released == 'true'
1112
1112
  with:
1113
1113
  packages-dir: ${{ format('{}/dist', env.SUBMODULE_1_DIR) }}
1114
1114
 
1115
1115
  - name: Publish | Upload package 2 to PyPI
1116
- uses: pypa/gh-action-pypi-publish@SHA1_HASH # vX.X.X
1116
+ uses: pypa/gh-action-pypi-publish@COMMIT_HASH # vX.X.X
1117
1117
  if: steps.release-submod-2.outputs.released == 'true'
1118
1118
  with:
1119
1119
  packages-dir: ${{ format('{}/dist', env.SUBMODULE_2_DIR) }}
@@ -158,7 +158,7 @@ look like this:
158
158
  lock_file_artifact: uv.lock
159
159
  steps:
160
160
  - name: Setup | Checkout Repository at workflow sha
161
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
161
+ uses: actions/checkout@COMMIT_HASH # vX.X.X
162
162
  with:
163
163
  ref: ${{ github.sha }}
164
164
 
@@ -166,7 +166,7 @@ look like this:
166
166
  run: git checkout -B ${{ github.ref_name }}
167
167
 
168
168
  - name: Setup | Install uv
169
- uses: asdf-vm/actions/install@1902764435ca0dd2f3388eea723a4f92a4eb8302 # v4.0.2
169
+ uses: asdf-vm/actions/install@COMMIT_HASH # v4.X.X
170
170
 
171
171
  - name: Setup | Install Python & Project dependencies
172
172
  run: uv sync --extra build
@@ -179,7 +179,7 @@ look like this:
179
179
 
180
180
  - name: Upload | Distribution Artifacts
181
181
  if: ${{ steps.version.outputs.released == 'true' }}
182
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
182
+ uses: actions/upload-artifact@COMMIT_HASH # v4.X.X
183
183
  with:
184
184
  name: ${{ env.dist_artifacts_name }}
185
185
  path: ${{ format('{0}/**', env.dist_artifacts_dir) }}
@@ -188,7 +188,7 @@ look like this:
188
188
 
189
189
  - name: Upload | Lock File Artifact
190
190
  if: ${{ steps.version.outputs.released == 'true' }}
191
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
191
+ uses: actions/upload-artifact@COMMIT_HASH # v4.X.X
192
192
  with:
193
193
  name: ${{ env.lock_file_artifact }}
194
194
  path: ${{ env.lock_file_artifact }}
@@ -209,13 +209,13 @@ look like this:
209
209
  runs-on: ubuntu-latest
210
210
  steps:
211
211
  - name: Setup | Checkout Repository
212
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
212
+ uses: actions/checkout@COMMIT_HASH # vX.X.X
213
213
  with:
214
214
  ref: ${{ github.sha }}
215
215
  fetch-depth: 1
216
216
 
217
217
  - name: Setup | Download Distribution Artifacts
218
- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
218
+ uses: actions/download-artifact@COMMIT_HASH # v4.X.X
219
219
  if: ${{ needs.build.outputs.new-release-detected == 'true' }}
220
220
  id: artifact-download
221
221
  with:
@@ -223,7 +223,7 @@ look like this:
223
223
  path: ./dist
224
224
 
225
225
  - name: Setup | Install uv
226
- uses: asdf-vm/actions/install@1902764435ca0dd2f3388eea723a4f92a4eb8302 # v4.0.2
226
+ uses: asdf-vm/actions/install@COMMIT_HASH # v4.X.X
227
227
 
228
228
  - name: Setup | Install Python & Project dependencies
229
229
  run: uv sync --extra test
@@ -255,7 +255,7 @@ look like this:
255
255
 
256
256
  steps:
257
257
  - name: Setup | Checkout Repository on Release Branch
258
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
258
+ uses: actions/checkout@COMMIT_HASH # vX.X.X
259
259
  with:
260
260
  ref: ${{ github.ref_name }}
261
261
 
@@ -263,20 +263,20 @@ look like this:
263
263
  run: git reset --hard ${{ github.sha }}
264
264
 
265
265
  - name: Setup | Install uv
266
- uses: asdf-vm/actions/install@1902764435ca0dd2f3388eea723a4f92a4eb8302 # v4.0.2
266
+ uses: asdf-vm/actions/install@COMMIT_HASH # v4.X.X
267
267
 
268
268
  - name: Setup | Install Python & Project dependencies
269
269
  run: uv sync --extra build
270
270
 
271
271
  - name: Setup | Download Build Artifacts
272
- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
272
+ uses: actions/download-artifact@COMMIT_HASH # v4.X.X
273
273
  id: artifact-download
274
274
  with:
275
275
  name: ${{ needs.build.outputs.distribution-artifacts }}
276
276
  path: dist
277
277
 
278
278
  - name: Setup | Download Lock File Artifact
279
- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
279
+ uses: actions/download-artifact@COMMIT_HASH # v4.X.X
280
280
  with:
281
281
  name: ${{ needs.build.outputs.lock-file-artifact }}
282
282
 
@@ -315,14 +315,14 @@ look like this:
315
315
 
316
316
  steps:
317
317
  - name: Setup | Download Build Artifacts
318
- uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
318
+ uses: actions/download-artifact@COMMIT_HASH # v4.X.X
319
319
  id: artifact-download
320
320
  with:
321
321
  name: ${{ needs.build.outputs.distribution-artifacts }}
322
322
  path: dist
323
323
 
324
324
  - name: Publish package distributions to PyPI
325
- uses: pypa/gh-action-pypi-publish@76f52bc884231f62b9a034ebfe128415bbaabdfc # v1.12.4
325
+ uses: pypa/gh-action-pypi-publish@COMMIT_HASH # v1.X.X
326
326
  with:
327
327
  packages-dir: dist
328
328
  print-hash: true
@@ -1326,6 +1326,10 @@ colon-separated definition with either 2 or 3 parts. The 2-part definition inclu
1326
1326
  the file path and the variable name. Newly with v9.20.0, it also accepts
1327
1327
  an optional 3rd part to allow configuration of the format type.
1328
1328
 
1329
+ As of ${NEW_RELEASE_TAG}, the ``version_variables`` option also supports entire file
1330
+ replacement by using an asterisk (``*``) as the pattern/variable name. This is useful
1331
+ for files that contain only a version number, such as ``VERSION`` files.
1332
+
1329
1333
  **Available Format Types**
1330
1334
 
1331
1335
  - ``nf``: Number format (ex. ``1.2.3``)
@@ -1348,6 +1352,9 @@ version numbers.
1348
1352
  "src/semantic_release/__init__.py:__version__", # Implied Default: Number format
1349
1353
  "docs/conf.py:version:nf", # Number format for sphinx docs
1350
1354
  "kustomization.yml:newTag:tf", # Tag format
1355
+ # File replacement (entire file content is replaced with version)
1356
+ "VERSION:*:nf", # Replace entire file with number format
1357
+ "RELEASE:*:tf", # Replace entire file with tag format
1351
1358
  ]
1352
1359
 
1353
1360
  First, the ``__version__`` variable in ``src/semantic_release/__init__.py`` will be updated
@@ -1370,7 +1377,7 @@ with the next version using the `SemVer`_ number format because of the explicit
1370
1377
  - version = "0.1.0"
1371
1378
  + version = "0.2.0"
1372
1379
 
1373
- Lastly, the ``newTag`` variable in ``kustomization.yml`` will be updated with the next version
1380
+ Then, the ``newTag`` variable in ``kustomization.yml`` will be updated with the next version
1374
1381
  with the next version using the configured :ref:`config-tag_format` because the definition
1375
1382
  included ``tf``.
1376
1383
 
@@ -1383,10 +1390,34 @@ included ``tf``.
1383
1390
  - newTag: v0.1.0
1384
1391
  + newTag: v0.2.0
1385
1392
 
1393
+ Next, the entire content of the ``VERSION`` file will be replaced with the next version
1394
+ using the `SemVer`_ number format (because of the ``*`` pattern and ``nf`` format type).
1395
+
1396
+ .. code-block:: diff
1397
+
1398
+ diff a/VERSION b/VERSION
1399
+
1400
+ - 0.1.0
1401
+ + 0.2.0
1402
+
1403
+ Finally, the entire content of the ``RELEASE`` file will be replaced with the next version
1404
+ using the configured :ref:`config-tag_format` (because of the ``*`` pattern and ``tf`` format type).
1405
+
1406
+ .. code-block:: diff
1407
+
1408
+ diff a/RELEASE b/RELEASE
1409
+
1410
+ - v0.1.0
1411
+ + v0.2.0
1412
+
1386
1413
  **How It works**
1387
1414
 
1388
- Each version variable will be transformed into a Regular Expression that will be used
1389
- to substitute the version number in the file. The replacement algorithm is **ONLY** a
1415
+ Each version variable will be transformed into either a Regular Expression (for pattern-based
1416
+ replacement) or a file replacement operation (when using the ``*`` pattern).
1417
+
1418
+ **Pattern-Based Replacement**
1419
+
1420
+ When a variable name is specified (not ``*``), the replacement algorithm is **ONLY** a
1390
1421
  pattern match and replace. It will **NOT** evaluate the code nor will PSR understand
1391
1422
  any internal object structures (ie. ``file:object.version`` will not work).
1392
1423
 
@@ -1420,6 +1451,24 @@ regardless of file extension because it looks for a matching pattern string.
1420
1451
  TOML files as it actually will interpret the TOML file and replace the version
1421
1452
  number before writing the file back to disk.
1422
1453
 
1454
+ **File Replacement**
1455
+
1456
+ When the pattern/variable name is specified as an asterisk (``*``), the entire file content
1457
+ will be replaced with the version string. This is useful for files that contain only a
1458
+ version number, such as ``VERSION`` files or similar single-line version storage files.
1459
+
1460
+ The file replacement operation:
1461
+
1462
+ 1. Reads the current file content if it exists (any whitespace is stripped)
1463
+ 2. Sets or replaces the entire file content with the new version string
1464
+ 3. Writes the new version back to the file (with only a single trailing newline)
1465
+
1466
+ The format type (``nf`` or ``tf``) determines whether the version is written as a
1467
+ plain number (e.g., ``1.2.3``) or with the :ref:`config-tag_format` prefix/suffix
1468
+ (e.g., ``v1.2.3``).
1469
+
1470
+ **Examples of Pattern-Based Replacement**
1471
+
1423
1472
  This is a comprehensive list (but not all variations) of examples where the following versions
1424
1473
  will be matched and replaced by the new version:
1425
1474
 
@@ -50,13 +50,13 @@ This workflow is written to use Python Semantic Release v7.33.5:
50
50
  concurrency: release
51
51
 
52
52
  steps:
53
- - uses: actions/checkout@v3
53
+ - uses: actions/checkout@COMMIT_HASH # v3.0.0
54
54
  with:
55
55
  fetch-depth: 0
56
56
 
57
57
  # This action uses Python Semantic Release v7
58
58
  - name: Python Semantic Release
59
- uses: python-semantic-release/python-semantic-release@v7.33.5
59
+ uses: python-semantic-release/python-semantic-release@323ebf700ac0878aedfa899bcb0492f6d579986c # v7.33.5
60
60
  with:
61
61
  github_token: ${{ secrets.GITHUB_TOKEN }}
62
62
  repository_username: __token__
@@ -84,25 +84,25 @@ GitHub Action:
84
84
  id-token: write
85
85
 
86
86
  steps:
87
- - uses: actions/checkout@v3
87
+ - uses: actions/checkout@COMMIT_HASH # v3.0.0
88
88
  with:
89
89
  fetch-depth: 0
90
90
 
91
91
  # This action uses Python Semantic Release v8
92
92
  - name: Python Semantic Release
93
93
  id: release
94
- uses: python-semantic-release/python-semantic-release@v8.7.0
94
+ uses: python-semantic-release/python-semantic-release@COMMIT_HASH # v8.0.0
95
95
  with:
96
96
  github_token: ${{ secrets.GITHUB_TOKEN }}
97
97
 
98
98
  - name: Publish package distributions to PyPI
99
- uses: pypa/gh-action-pypi-publish@v1
99
+ uses: pypa/gh-action-pypi-publish@COMMIT_HASH # v1.0.0
100
100
  # NOTE: DO NOT wrap the conditional in ${{ }} as it will always evaluate to true.
101
101
  # See https://github.com/actions/runner/issues/1173
102
102
  if: steps.release.outputs.released == 'true'
103
103
 
104
104
  - name: Publish package distributions to GitHub Releases
105
- uses: python-semantic-release/upload-to-gh-release@v8.7.0
105
+ uses: python-semantic-release/upload-to-gh-release@COMMIT_HASH # v8.0.0
106
106
  if: steps.release.outputs.released == 'true'
107
107
  with:
108
108
  github_token: ${{ secrets.GITHUB_TOKEN }}
@@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta"
6
6
 
7
7
  [project]
8
8
  name = "python-semantic-release"
9
- version = "10.5.2"
9
+ version = "10.6.0"
10
10
  description = "Automatic Semantic Versioning for Python projects"
11
11
  requires-python = "~= 3.8"
12
12
  license = { text = "MIT" }
@@ -48,7 +48,7 @@ semantic-release = "semantic_release.__main__:main"
48
48
  psr = "semantic_release.__main__:main"
49
49
 
50
50
  [project.urls]
51
- changelog = "https://github.com/python-semantic-release/python-semantic-release/blob/master/CHANGELOG.md"
51
+ changelog = "https://python-semantic-release.readthedocs.io/en/stable/misc/psr_changelog.html"
52
52
  documentation = "https://python-semantic-release.readthedocs.io"
53
53
  homepage = "https://python-semantic-release.readthedocs.io"
54
54
  issues = "https://github.com/python-semantic-release/python-semantic-release/issues"
@@ -409,6 +409,7 @@ sections = { "tests" = ["tests"] }
409
409
  ignore_names = ["change_to_ex_proj_dir", "init_example_project"]
410
410
 
411
411
  [tool.semantic_release]
412
+ add_partial_tags = true
412
413
  logging_use_named_masks = true
413
414
  commit_parser = "conventional"
414
415
  commit_parser_options = { parse_squash_commits = true, ignore_merge_commits = true }
@@ -424,8 +425,8 @@ build_command = """
424
425
  major_on_zero = true
425
426
  version_variables = [
426
427
  "src/gh_action/requirements.txt:python-semantic-release:nf",
427
- "docs/configuration/automatic-releases/github-actions.rst:python-semantic-release/python-semantic-release:tf",
428
- "docs/configuration/automatic-releases/github-actions.rst:python-semantic-release/publish-action:tf",
428
+ "docs/configuration/automatic-releases/github-actions.rst:python-semantic-release/python-semantic-release@COMMIT_HASH #:tf",
429
+ "docs/configuration/automatic-releases/github-actions.rst:python-semantic-release/publish-action@COMMIT_HASH #:tf",
429
430
  ]
430
431
  version_toml = ["pyproject.toml:project.version"]
431
432
 
@@ -108,6 +108,7 @@ src/semantic_release/version/translator.py
108
108
  src/semantic_release/version/version.py
109
109
  src/semantic_release/version/declarations/__init__.py
110
110
  src/semantic_release/version/declarations/enum.py
111
+ src/semantic_release/version/declarations/file.py
111
112
  src/semantic_release/version/declarations/i_version_replacer.py
112
113
  src/semantic_release/version/declarations/pattern.py
113
114
  src/semantic_release/version/declarations/toml.py
@@ -231,5 +232,6 @@ tests/unit/semantic_release/version/test_algorithm.py
231
232
  tests/unit/semantic_release/version/test_translator.py
232
233
  tests/unit/semantic_release/version/test_version.py
233
234
  tests/unit/semantic_release/version/declarations/__init__.py
235
+ tests/unit/semantic_release/version/declarations/test_file_declaration.py
234
236
  tests/unit/semantic_release/version/declarations/test_pattern_declaration.py
235
237
  tests/unit/semantic_release/version/declarations/test_toml_declaration.py
@@ -1,6 +1,8 @@
1
1
  from __future__ import annotations
2
2
 
3
3
  import json
4
+ import sys
5
+ from typing import Literal
4
6
 
5
7
  import click
6
8
  import tomlkit
@@ -31,7 +33,9 @@ from semantic_release.cli.config import RawConfig
31
33
  "'semantic_release'"
32
34
  ),
33
35
  )
34
- def generate_config(fmt: str = "toml", is_pyproject_toml: bool = False) -> None:
36
+ def generate_config(
37
+ fmt: Literal["toml", "json"], is_pyproject_toml: bool = False
38
+ ) -> None:
35
39
  """
36
40
  Generate default configuration for semantic-release, to help you get started
37
41
  quickly. You can inspect the defaults, write to a file and then edit according to
@@ -42,14 +46,29 @@ def generate_config(fmt: str = "toml", is_pyproject_toml: bool = False) -> None:
42
46
  """
43
47
  # due to possible IntEnum values (which are not supported by tomlkit.dumps, see sdispater/tomlkit#237),
44
48
  # we must ensure the transformation of the model to a dict uses json serializable values
45
- config = RawConfig().model_dump(mode="json", exclude_none=True)
49
+ config_dct = {
50
+ "semantic_release": RawConfig().model_dump(mode="json", exclude_none=True)
51
+ }
46
52
 
47
- config_dct = {"semantic_release": config}
48
- if is_pyproject_toml and fmt == "toml":
49
- config_dct = {"tool": config_dct}
53
+ if is_pyproject_toml:
54
+ output = tomlkit.dumps({"tool": config_dct})
50
55
 
51
- if fmt == "toml":
52
- click.echo(tomlkit.dumps(config_dct))
56
+ elif fmt == "toml":
57
+ output = tomlkit.dumps(config_dct)
53
58
 
54
59
  elif fmt == "json":
55
- click.echo(json.dumps(config_dct, indent=4))
60
+ output = json.dumps(config_dct, indent=4)
61
+
62
+ else:
63
+ raise ValueError(f"Unsupported format: {fmt}")
64
+
65
+ # Write output directly to stdout buffer as UTF-8 bytes
66
+ # This ensures consistent UTF-8 output on all platforms, especially Windows where
67
+ # shell redirection (>, >>) defaults to the system encoding (e.g., UTF-16LE or cp1252)
68
+ # By writing to sys.stdout.buffer, we bypass the encoding layer and guarantee UTF-8.
69
+ try:
70
+ sys.stdout.buffer.write(f"{output.strip()}\n".encode("utf-8")) # noqa: UP012; allow explicit encoding declaration
71
+ sys.stdout.buffer.flush()
72
+ except (AttributeError, TypeError):
73
+ # Fallback for environments without buffer (shouldn't happen in standard Python)
74
+ click.echo(output)
@@ -6,6 +6,7 @@ import click
6
6
  from git import Repo
7
7
 
8
8
  from semantic_release.cli.util import noop_report
9
+ from semantic_release.errors import AssetUploadError
9
10
  from semantic_release.globals import logger
10
11
  from semantic_release.hvcs.remote_hvcs_base import RemoteHvcsBase
11
12
  from semantic_release.version.algorithm import tags_and_versions
@@ -90,9 +91,13 @@ def publish(cli_ctx: CliContextObj, tag: str) -> None:
90
91
  )
91
92
  return
92
93
 
93
- publish_distributions(
94
- tag=tag,
95
- hvcs_client=hvcs_client,
96
- dist_glob_patterns=dist_glob_patterns,
97
- noop=runtime.global_cli_options.noop,
98
- )
94
+ try:
95
+ publish_distributions(
96
+ tag=tag,
97
+ hvcs_client=hvcs_client,
98
+ dist_glob_patterns=dist_glob_patterns,
99
+ noop=runtime.global_cli_options.noop,
100
+ )
101
+ except AssetUploadError as err:
102
+ click.echo(err, err=True)
103
+ ctx.exit(1)
@@ -753,6 +753,7 @@ def version( # noqa: C901
753
753
  project.verify_upstream_unchanged(
754
754
  local_ref="HEAD~1",
755
755
  upstream_ref=config.remote.name,
756
+ remote_url=remote_url,
756
757
  noop=opts.noop,
757
758
  )
758
759
  except UpstreamBranchChangedError as exc:
@@ -57,6 +57,7 @@ from semantic_release.errors import (
57
57
  )
58
58
  from semantic_release.globals import logger
59
59
  from semantic_release.helpers import dynamic_import
60
+ from semantic_release.version.declarations.file import FileVersionDeclaration
60
61
  from semantic_release.version.declarations.i_version_replacer import IVersionReplacer
61
62
  from semantic_release.version.declarations.pattern import PatternVersionDeclaration
62
63
  from semantic_release.version.declarations.toml import TomlVersionDeclaration
@@ -757,12 +758,22 @@ class RuntimeContext:
757
758
  ) from err
758
759
 
759
760
  try:
760
- version_declarations.extend(
761
- PatternVersionDeclaration.from_string_definition(
762
- definition, raw.tag_format
761
+ for definition in iter(raw.version_variables or ()):
762
+ # Check if this is a file replacement definition (pattern is "*")
763
+ parts = definition.split(":", maxsplit=2)
764
+ if len(parts) >= 2 and parts[1] == "*":
765
+ # Use FileVersionDeclaration for entire file replacement
766
+ version_declarations.append(
767
+ FileVersionDeclaration.from_string_definition(definition)
768
+ )
769
+ continue
770
+
771
+ # Use PatternVersionDeclaration for pattern-based replacement
772
+ version_declarations.append(
773
+ PatternVersionDeclaration.from_string_definition(
774
+ definition, raw.tag_format
775
+ )
763
776
  )
764
- for definition in iter(raw.version_variables or ())
765
- )
766
777
  except ValueError as err:
767
778
  raise InvalidConfiguration(
768
779
  str.join(
@@ -75,7 +75,7 @@ def load_raw_config_file(config_file: Path | str) -> dict[Any, Any]:
75
75
  while trying to read the specified configuration file
76
76
  """
77
77
  logger.info("Loading configuration from %s", config_file)
78
- raw_text = (Path() / config_file).resolve().read_text(encoding="utf-8")
78
+ raw_text = (Path() / config_file).resolve().read_text(encoding="utf-8-sig")
79
79
  try:
80
80
  logger.debug("Trying to parse configuration %s in TOML format", config_file)
81
81
  return parse_toml(raw_text)