python-semantic-release 10.5.3__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.3 → python_semantic_release-10.6.0}/PKG-INFO +2 -2
  2. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/docs/api/commands.rst +26 -6
  3. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/docs/configuration/automatic-releases/github-actions.rst +9 -9
  4. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/docs/configuration/configuration-guides/uv_integration.rst +13 -13
  5. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/docs/configuration/configuration.rst +52 -3
  6. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/docs/upgrading/08-upgrade.rst +6 -6
  7. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/pyproject.toml +4 -4
  8. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/python_semantic_release.egg-info/SOURCES.txt +2 -0
  9. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/cli/commands/generate_config.py +27 -8
  10. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/cli/commands/publish.py +11 -6
  11. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/cli/config.py +16 -5
  12. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/cli/util.py +1 -1
  13. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/commit_parser/emoji.py +6 -1
  14. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/helpers.py +12 -2
  15. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/hvcs/github.py +12 -1
  16. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/version/declaration.py +3 -1
  17. python_semantic_release-10.6.0/src/semantic_release/version/declarations/file.py +145 -0
  18. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/version/declarations/i_version_replacer.py +6 -0
  19. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/const.py +2 -2
  20. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_config/test_generate_config.py +78 -0
  21. python_semantic_release-10.6.0/tests/e2e/cmd_publish/test_publish.py +170 -0
  22. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/test_version_stamp.py +130 -0
  23. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/semantic_release/commit_parser/test_emoji.py +13 -5
  24. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/semantic_release/hvcs/test_github.py +222 -1
  25. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/semantic_release/test_helpers.py +25 -0
  26. python_semantic_release-10.6.0/tests/unit/semantic_release/version/declarations/test_file_declaration.py +279 -0
  27. python_semantic_release-10.5.3/tests/e2e/cmd_publish/test_publish.py +0 -89
  28. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/LICENSE +0 -0
  29. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/MANIFEST.in +0 -0
  30. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/README.rst +0 -0
  31. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/docs/Makefile +0 -0
  32. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/docs/concepts/changelog_templates.rst +0 -0
  33. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/docs/concepts/commit_parsing.rst +0 -0
  34. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/docs/concepts/getting_started.rst +0 -0
  35. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/docs/concepts/index.rst +0 -0
  36. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/docs/concepts/installation.rst +0 -0
  37. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/docs/concepts/multibranch_releases.rst +0 -0
  38. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/docs/concepts/strict_mode.rst +0 -0
  39. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/docs/conf.py +0 -0
  40. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/docs/configuration/automatic-releases/cronjobs.rst +0 -0
  41. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/docs/configuration/automatic-releases/index.rst +0 -0
  42. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/docs/configuration/automatic-releases/travis.rst +0 -0
  43. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/docs/configuration/configuration-guides/index.rst +0 -0
  44. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/docs/configuration/configuration-guides/monorepos-ex-easy-before-release.png +0 -0
  45. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/docs/configuration/configuration-guides/monorepos-ex-easy-post-release.png +0 -0
  46. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/docs/configuration/configuration-guides/monorepos.rst +0 -0
  47. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/docs/configuration/index.rst +0 -0
  48. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/docs/contributing/contributing_guide.rst +0 -0
  49. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/docs/contributing/index.rst +0 -0
  50. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/docs/index.rst +0 -0
  51. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/docs/make.bat +0 -0
  52. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/docs/misc/psr_changelog.rst +0 -0
  53. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/docs/misc/troubleshooting.rst +0 -0
  54. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/docs/upgrading/09-upgrade.rst +0 -0
  55. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/docs/upgrading/10-upgrade.rst +0 -0
  56. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/docs/upgrading/index.rst +0 -0
  57. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/setup.cfg +0 -0
  58. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/__init__.py +0 -0
  59. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/__main__.py +0 -0
  60. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/changelog/__init__.py +0 -0
  61. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/changelog/context.py +0 -0
  62. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/changelog/release_history.py +0 -0
  63. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/changelog/template.py +0 -0
  64. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/cli/__init__.py +0 -0
  65. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/cli/changelog_writer.py +0 -0
  66. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/cli/cli_context.py +0 -0
  67. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/cli/commands/__init__.py +0 -0
  68. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/cli/commands/changelog.py +0 -0
  69. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/cli/commands/main.py +0 -0
  70. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/cli/commands/version.py +0 -0
  71. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/cli/const.py +0 -0
  72. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/cli/github_actions_output.py +0 -0
  73. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/cli/masking_filter.py +0 -0
  74. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/commit_parser/__init__.py +0 -0
  75. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/commit_parser/_base.py +0 -0
  76. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/commit_parser/angular.py +0 -0
  77. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/commit_parser/conventional/__init__.py +0 -0
  78. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/commit_parser/conventional/options.py +0 -0
  79. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/commit_parser/conventional/options_monorepo.py +0 -0
  80. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/commit_parser/conventional/parser.py +0 -0
  81. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/commit_parser/conventional/parser_monorepo.py +0 -0
  82. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/commit_parser/scipy.py +0 -0
  83. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/commit_parser/tag.py +0 -0
  84. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/commit_parser/token.py +0 -0
  85. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/commit_parser/util.py +0 -0
  86. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/const.py +0 -0
  87. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/data/templates/conventional/md/.components/changelog_header.md.j2 +0 -0
  88. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/data/templates/conventional/md/.components/changelog_init.md.j2 +0 -0
  89. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/data/templates/conventional/md/.components/changelog_update.md.j2 +0 -0
  90. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/data/templates/conventional/md/.components/changes.md.j2 +0 -0
  91. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/data/templates/conventional/md/.components/first_release.md.j2 +0 -0
  92. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/data/templates/conventional/md/.components/macros.md.j2 +0 -0
  93. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/data/templates/conventional/md/.components/unreleased_changes.md.j2 +0 -0
  94. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/data/templates/conventional/md/.components/versioned_changes.md.j2 +0 -0
  95. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/data/templates/conventional/md/.release_notes.md.j2 +0 -0
  96. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/data/templates/conventional/md/CHANGELOG.md.j2 +0 -0
  97. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/data/templates/conventional/rst/.components/changelog_header.rst.j2 +0 -0
  98. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/data/templates/conventional/rst/.components/changelog_init.rst.j2 +0 -0
  99. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/data/templates/conventional/rst/.components/changelog_update.rst.j2 +0 -0
  100. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/data/templates/conventional/rst/.components/changes.rst.j2 +0 -0
  101. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/data/templates/conventional/rst/.components/first_release.rst.j2 +0 -0
  102. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/data/templates/conventional/rst/.components/macros.rst.j2 +0 -0
  103. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/data/templates/conventional/rst/.components/unreleased_changes.rst.j2 +0 -0
  104. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/data/templates/conventional/rst/.components/versioned_changes.rst.j2 +0 -0
  105. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/data/templates/conventional/rst/CHANGELOG.rst.j2 +0 -0
  106. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/enums.py +0 -0
  107. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/errors.py +0 -0
  108. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/gitproject.py +0 -0
  109. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/globals.py +0 -0
  110. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/hvcs/__init__.py +0 -0
  111. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/hvcs/_base.py +0 -0
  112. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/hvcs/bitbucket.py +0 -0
  113. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/hvcs/gitea.py +0 -0
  114. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/hvcs/gitlab.py +0 -0
  115. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/hvcs/remote_hvcs_base.py +0 -0
  116. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/hvcs/token_auth.py +0 -0
  117. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/hvcs/util.py +0 -0
  118. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/py.typed +0 -0
  119. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/version/__init__.py +0 -0
  120. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/version/algorithm.py +0 -0
  121. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/version/declarations/__init__.py +0 -0
  122. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/version/declarations/enum.py +0 -0
  123. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/version/declarations/pattern.py +0 -0
  124. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/version/declarations/toml.py +0 -0
  125. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/version/translator.py +0 -0
  126. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/src/semantic_release/version/version.py +0 -0
  127. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/__init__.py +0 -0
  128. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/conftest.py +0 -0
  129. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/__init__.py +0 -0
  130. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_changelog/__init__.py +0 -0
  131. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_changelog/test_changelog.py +0 -0
  132. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_changelog/test_changelog_custom_parser.py +0 -0
  133. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_changelog/test_changelog_parsing.py +0 -0
  134. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_changelog/test_changelog_release_notes.py +0 -0
  135. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_config/__init__.py +0 -0
  136. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_publish/__init__.py +0 -0
  137. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/__init__.py +0 -0
  138. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/__init__.py +0 -0
  139. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/conftest.py +0 -0
  140. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/git_flow/__init__.py +0 -0
  141. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/git_flow/test_repo_1_channel.py +0 -0
  142. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/git_flow/test_repo_2_channels.py +0 -0
  143. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/git_flow/test_repo_3_channels.py +0 -0
  144. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/git_flow/test_repo_4_channels.py +0 -0
  145. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/github_flow/__init__.py +0 -0
  146. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/github_flow/test_repo_1_channel.py +0 -0
  147. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/github_flow/test_repo_1_channel_branch_update_merge.py +0 -0
  148. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/github_flow/test_repo_2_channels.py +0 -0
  149. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/github_flow_monorepo/__init__.py +0 -0
  150. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/github_flow_monorepo/test_monorepo_1_channel.py +0 -0
  151. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/github_flow_monorepo/test_monorepo_2_channels.py +0 -0
  152. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/trunk_based_dev/__init__.py +0 -0
  153. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/trunk_based_dev/test_repo_trunk.py +0 -0
  154. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/trunk_based_dev/test_repo_trunk_dual_version_support.py +0 -0
  155. {python_semantic_release-10.5.3 → 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
  156. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/trunk_based_dev/test_repo_trunk_w_prereleases.py +0 -0
  157. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/trunk_based_dev_monorepo/__init__.py +0 -0
  158. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/bump_version/trunk_based_dev_monorepo/test_monorepo_trunk.py +0 -0
  159. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/test_version.py +0 -0
  160. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/test_version_build.py +0 -0
  161. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/test_version_bump.py +0 -0
  162. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/test_version_changelog.py +0 -0
  163. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/test_version_changelog_custom_commit_msg.py +0 -0
  164. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/test_version_github_actions.py +0 -0
  165. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/test_version_partial_tag.py +0 -0
  166. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/test_version_print.py +0 -0
  167. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/test_version_release_notes.py +0 -0
  168. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/test_version_shallow.py +0 -0
  169. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/test_version_strict.py +0 -0
  170. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/cmd_version/test_version_upstream_check.py +0 -0
  171. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/conftest.py +0 -0
  172. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/test_help.py +0 -0
  173. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/e2e/test_main.py +0 -0
  174. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/fixtures/__init__.py +0 -0
  175. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/fixtures/commit_parsers.py +0 -0
  176. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/fixtures/example_project.py +0 -0
  177. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/fixtures/git_repo.py +0 -0
  178. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/fixtures/monorepos/__init__.py +0 -0
  179. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/fixtures/monorepos/example_monorepo.py +0 -0
  180. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/fixtures/monorepos/git_monorepo.py +0 -0
  181. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/fixtures/monorepos/github_flow/__init__.py +0 -0
  182. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/fixtures/monorepos/github_flow/monorepo_w_default_release.py +0 -0
  183. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/fixtures/monorepos/github_flow/monorepo_w_release_channels.py +0 -0
  184. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/fixtures/monorepos/trunk_based_dev/__init__.py +0 -0
  185. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/fixtures/monorepos/trunk_based_dev/monorepo_w_tags.py +0 -0
  186. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/fixtures/repos/__init__.py +0 -0
  187. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/fixtures/repos/git_flow/__init__.py +0 -0
  188. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/fixtures/repos/git_flow/repo_w_1_release_channel.py +0 -0
  189. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/fixtures/repos/git_flow/repo_w_2_release_channels.py +0 -0
  190. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/fixtures/repos/git_flow/repo_w_3_release_channels.py +0 -0
  191. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/fixtures/repos/git_flow/repo_w_4_release_channels.py +0 -0
  192. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/fixtures/repos/github_flow/__init__.py +0 -0
  193. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/fixtures/repos/github_flow/repo_w_default_release.py +0 -0
  194. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/fixtures/repos/github_flow/repo_w_default_release_w_branch_update_merge.py +0 -0
  195. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/fixtures/repos/github_flow/repo_w_release_channels.py +0 -0
  196. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/fixtures/repos/repo_initial_commit.py +0 -0
  197. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/fixtures/repos/trunk_based_dev/__init__.py +0 -0
  198. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/fixtures/repos/trunk_based_dev/repo_w_dual_version_support.py +0 -0
  199. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/fixtures/repos/trunk_based_dev/repo_w_dual_version_support_w_prereleases.py +0 -0
  200. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/fixtures/repos/trunk_based_dev/repo_w_no_tags.py +0 -0
  201. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/fixtures/repos/trunk_based_dev/repo_w_prereleases.py +0 -0
  202. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/fixtures/repos/trunk_based_dev/repo_w_tags.py +0 -0
  203. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/fixtures/scipy.py +0 -0
  204. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/__init__.py +0 -0
  205. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/conftest.py +0 -0
  206. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/semantic_release/__init__.py +0 -0
  207. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/semantic_release/changelog/__init__.py +0 -0
  208. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/semantic_release/changelog/conftest.py +0 -0
  209. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/semantic_release/changelog/test_changelog_context.py +0 -0
  210. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/semantic_release/changelog/test_default_changelog.py +0 -0
  211. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/semantic_release/changelog/test_release_history.py +0 -0
  212. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/semantic_release/changelog/test_release_notes.py +0 -0
  213. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/semantic_release/changelog/test_template.py +0 -0
  214. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/semantic_release/changelog/test_template_render.py +0 -0
  215. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/semantic_release/cli/__init__.py +0 -0
  216. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/semantic_release/cli/test_config.py +0 -0
  217. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/semantic_release/cli/test_github_actions_output.py +0 -0
  218. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/semantic_release/cli/test_masking_filter.py +0 -0
  219. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/semantic_release/cli/test_util.py +0 -0
  220. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/semantic_release/cli/test_version.py +0 -0
  221. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/semantic_release/commit_parser/__init__.py +0 -0
  222. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/semantic_release/commit_parser/test_conventional.py +0 -0
  223. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/semantic_release/commit_parser/test_parsed_commit.py +0 -0
  224. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/semantic_release/commit_parser/test_scipy.py +0 -0
  225. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/semantic_release/commit_parser/test_util.py +0 -0
  226. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/semantic_release/hvcs/__init__.py +0 -0
  227. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/semantic_release/hvcs/test__base.py +0 -0
  228. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/semantic_release/hvcs/test_bitbucket.py +0 -0
  229. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/semantic_release/hvcs/test_gitea.py +0 -0
  230. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/semantic_release/hvcs/test_gitlab.py +0 -0
  231. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/semantic_release/hvcs/test_token_auth.py +0 -0
  232. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/semantic_release/hvcs/test_util.py +0 -0
  233. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/semantic_release/test_gitproject.py +0 -0
  234. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/semantic_release/version/__init__.py +0 -0
  235. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/semantic_release/version/declarations/__init__.py +0 -0
  236. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/semantic_release/version/declarations/test_pattern_declaration.py +0 -0
  237. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/semantic_release/version/declarations/test_toml_declaration.py +0 -0
  238. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/semantic_release/version/test_algorithm.py +0 -0
  239. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/semantic_release/version/test_translator.py +0 -0
  240. {python_semantic_release-10.5.3 → python_semantic_release-10.6.0}/tests/unit/semantic_release/version/test_version.py +0 -0
  241. {python_semantic_release-10.5.3 → 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.3
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.3
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.3
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.
@@ -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.3"
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"
@@ -425,8 +425,8 @@ build_command = """
425
425
  major_on_zero = true
426
426
  version_variables = [
427
427
  "src/gh_action/requirements.txt:python-semantic-release:nf",
428
- "docs/configuration/automatic-releases/github-actions.rst:python-semantic-release/python-semantic-release:tf",
429
- "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",
430
430
  ]
431
431
  version_toml = ["pyproject.toml:project.version"]
432
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)
@@ -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)
@@ -65,7 +65,12 @@ class EmojiParserOptions(ParserOptions):
65
65
  )
66
66
  """Commit-type prefixes that should result in a patch release bump."""
67
67
 
68
- other_allowed_tags: Tuple[str, ...] = (":memo:", ":checkmark:")
68
+ other_allowed_tags: Tuple[str, ...] = (
69
+ ":checkmark:",
70
+ ":construction_worker:",
71
+ ":memo:",
72
+ ":recycle:",
73
+ )
69
74
  """Commit-type prefixes that are allowed but do not result in a version bump."""
70
75
 
71
76
  allowed_tags: Tuple[str, ...] = (
@@ -9,7 +9,7 @@ from functools import lru_cache, reduce, wraps
9
9
  from pathlib import Path, PurePosixPath
10
10
  from re import IGNORECASE, compile as regexp
11
11
  from typing import TYPE_CHECKING, Any, Callable, NamedTuple, Sequence, TypeVar
12
- from urllib.parse import urlsplit
12
+ from urllib.parse import urlsplit, urlunsplit
13
13
 
14
14
  from semantic_release.globals import logger
15
15
 
@@ -215,6 +215,16 @@ class ParsedGitUrl(NamedTuple):
215
215
  repo_name: str
216
216
 
217
217
 
218
+ def _hide_credentials_in_url(url: str) -> str:
219
+ url_parts = urlsplit(url)
220
+
221
+ if not url_parts.scheme or "@" not in url_parts.netloc:
222
+ return url
223
+
224
+ _, _, host = url_parts.netloc.rpartition("@")
225
+ return urlunsplit(url_parts._replace(netloc=f"<credentials>@{host}"))
226
+
227
+
218
228
  @lru_cache(maxsize=512)
219
229
  def parse_git_url(url: str) -> ParsedGitUrl:
220
230
  """
@@ -242,7 +252,7 @@ def parse_git_url(url: str) -> ParsedGitUrl:
242
252
 
243
253
  Raises ValueError if the url can't be parsed.
244
254
  """
245
- logger.debug("Parsing git url %r", url)
255
+ logger.debug("Parsing git url %r", _hide_credentials_in_url(url))
246
256
 
247
257
  # Normalizers are a list of tuples of (pattern, replacement)
248
258
  normalizers = [
@@ -463,14 +463,25 @@ class Github(RemoteHvcsBase):
463
463
 
464
464
  # Upload assets
465
465
  n_succeeded = 0
466
+ errors = []
466
467
  for file_path in (
467
468
  f for f in glob.glob(dist_glob, recursive=True) if os.path.isfile(f)
468
469
  ):
469
470
  try:
470
471
  self.upload_release_asset(release_id, file_path)
471
472
  n_succeeded += 1
472
- except HTTPError: # noqa: PERF203
473
+ except HTTPError as err: # noqa: PERF203
473
474
  logger.exception("error uploading asset %s", file_path)
475
+ status_code = (
476
+ err.response.status_code if err.response is not None else "unknown"
477
+ )
478
+ error_msg = f"Failed to upload asset '{file_path}' to release"
479
+ if status_code != "unknown":
480
+ error_msg += f" (HTTP {status_code})"
481
+ errors.append(error_msg)
482
+
483
+ if errors:
484
+ raise AssetUploadError("\n".join(errors))
474
485
 
475
486
  return n_succeeded
476
487