python-semantic-release 9.21.0__tar.gz → 9.21.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (210) hide show
  1. {python_semantic_release-9.21.0/src/python_semantic_release.egg-info → python_semantic_release-9.21.1}/PKG-INFO +6 -5
  2. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/docs/automatic-releases/github-actions.rst +85 -20
  3. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/pyproject.toml +5 -6
  4. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1/src/python_semantic_release.egg-info}/PKG-INFO +6 -5
  5. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/python_semantic_release.egg-info/requires.txt +3 -3
  6. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/__init__.py +3 -1
  7. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/hvcs/remote_hvcs_base.py +14 -4
  8. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/unit/semantic_release/hvcs/test_bitbucket.py +23 -0
  9. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/unit/semantic_release/hvcs/test_gitea.py +23 -0
  10. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/unit/semantic_release/hvcs/test_github.py +23 -0
  11. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/unit/semantic_release/hvcs/test_gitlab.py +23 -0
  12. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/AUTHORS.rst +0 -0
  13. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/LICENSE +0 -0
  14. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/MANIFEST.in +0 -0
  15. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/README.rst +0 -0
  16. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/docs/Makefile +0 -0
  17. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/docs/algorithm.rst +0 -0
  18. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/docs/automatic-releases/cronjobs.rst +0 -0
  19. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/docs/automatic-releases/index.rst +0 -0
  20. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/docs/automatic-releases/travis.rst +0 -0
  21. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/docs/changelog_templates.rst +0 -0
  22. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/docs/commands.rst +0 -0
  23. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/docs/commit_parsing.rst +0 -0
  24. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/docs/conf.py +0 -0
  25. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/docs/configuration.rst +0 -0
  26. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/docs/contributing.rst +0 -0
  27. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/docs/contributors.rst +0 -0
  28. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/docs/index.rst +0 -0
  29. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/docs/make.bat +0 -0
  30. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/docs/migrating_from_v7.rst +0 -0
  31. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/docs/multibranch_releases.rst +0 -0
  32. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/docs/psr_changelog.rst +0 -0
  33. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/docs/strict_mode.rst +0 -0
  34. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/docs/troubleshooting.rst +0 -0
  35. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/setup.cfg +0 -0
  36. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/python_semantic_release.egg-info/SOURCES.txt +0 -0
  37. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/python_semantic_release.egg-info/dependency_links.txt +0 -0
  38. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/python_semantic_release.egg-info/entry_points.txt +0 -0
  39. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/python_semantic_release.egg-info/top_level.txt +0 -0
  40. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/__main__.py +0 -0
  41. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/changelog/__init__.py +0 -0
  42. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/changelog/context.py +0 -0
  43. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/changelog/release_history.py +0 -0
  44. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/changelog/template.py +0 -0
  45. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/cli/__init__.py +0 -0
  46. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/cli/changelog_writer.py +0 -0
  47. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/cli/cli_context.py +0 -0
  48. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/cli/commands/__init__.py +0 -0
  49. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/cli/commands/changelog.py +0 -0
  50. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/cli/commands/generate_config.py +0 -0
  51. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/cli/commands/main.py +0 -0
  52. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/cli/commands/publish.py +0 -0
  53. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/cli/commands/version.py +0 -0
  54. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/cli/config.py +0 -0
  55. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/cli/const.py +0 -0
  56. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/cli/github_actions_output.py +0 -0
  57. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/cli/masking_filter.py +0 -0
  58. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/cli/util.py +0 -0
  59. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/commit_parser/__init__.py +0 -0
  60. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/commit_parser/_base.py +0 -0
  61. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/commit_parser/angular.py +0 -0
  62. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/commit_parser/conventional.py +0 -0
  63. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/commit_parser/emoji.py +0 -0
  64. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/commit_parser/scipy.py +0 -0
  65. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/commit_parser/tag.py +0 -0
  66. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/commit_parser/token.py +0 -0
  67. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/commit_parser/util.py +0 -0
  68. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/const.py +0 -0
  69. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/data/templates/angular/md/.components/changelog_header.md.j2 +0 -0
  70. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/data/templates/angular/md/.components/changelog_init.md.j2 +0 -0
  71. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/data/templates/angular/md/.components/changelog_update.md.j2 +0 -0
  72. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/data/templates/angular/md/.components/changes.md.j2 +0 -0
  73. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/data/templates/angular/md/.components/first_release.md.j2 +0 -0
  74. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/data/templates/angular/md/.components/macros.md.j2 +0 -0
  75. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/data/templates/angular/md/.components/unreleased_changes.md.j2 +0 -0
  76. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/data/templates/angular/md/.components/versioned_changes.md.j2 +0 -0
  77. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/data/templates/angular/md/.release_notes.md.j2 +0 -0
  78. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/data/templates/angular/md/CHANGELOG.md.j2 +0 -0
  79. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/data/templates/angular/rst/.components/changelog_header.rst.j2 +0 -0
  80. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/data/templates/angular/rst/.components/changelog_init.rst.j2 +0 -0
  81. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/data/templates/angular/rst/.components/changelog_update.rst.j2 +0 -0
  82. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/data/templates/angular/rst/.components/changes.rst.j2 +0 -0
  83. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/data/templates/angular/rst/.components/first_release.rst.j2 +0 -0
  84. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/data/templates/angular/rst/.components/macros.rst.j2 +0 -0
  85. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/data/templates/angular/rst/.components/unreleased_changes.rst.j2 +0 -0
  86. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/data/templates/angular/rst/.components/versioned_changes.rst.j2 +0 -0
  87. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/data/templates/angular/rst/CHANGELOG.rst.j2 +0 -0
  88. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/enums.py +0 -0
  89. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/errors.py +0 -0
  90. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/gitproject.py +0 -0
  91. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/globals.py +0 -0
  92. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/helpers.py +0 -0
  93. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/hvcs/__init__.py +0 -0
  94. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/hvcs/_base.py +0 -0
  95. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/hvcs/bitbucket.py +0 -0
  96. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/hvcs/gitea.py +0 -0
  97. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/hvcs/github.py +0 -0
  98. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/hvcs/gitlab.py +0 -0
  99. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/hvcs/token_auth.py +0 -0
  100. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/hvcs/util.py +0 -0
  101. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/py.typed +0 -0
  102. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/version/__init__.py +0 -0
  103. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/version/algorithm.py +0 -0
  104. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/version/declaration.py +0 -0
  105. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/version/declarations/__init__.py +0 -0
  106. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/version/declarations/enum.py +0 -0
  107. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/version/declarations/i_version_replacer.py +0 -0
  108. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/version/declarations/pattern.py +0 -0
  109. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/version/declarations/toml.py +0 -0
  110. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/version/translator.py +0 -0
  111. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/src/semantic_release/version/version.py +0 -0
  112. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/__init__.py +0 -0
  113. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/conftest.py +0 -0
  114. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/const.py +0 -0
  115. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/e2e/__init__.py +0 -0
  116. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/e2e/cmd_changelog/__init__.py +0 -0
  117. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/e2e/cmd_changelog/test_changelog.py +0 -0
  118. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/e2e/cmd_changelog/test_changelog_custom_parser.py +0 -0
  119. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/e2e/cmd_changelog/test_changelog_parsing.py +0 -0
  120. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/e2e/cmd_changelog/test_changelog_release_notes.py +0 -0
  121. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/e2e/cmd_config/__init__.py +0 -0
  122. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/e2e/cmd_config/test_generate_config.py +0 -0
  123. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/e2e/cmd_publish/__init__.py +0 -0
  124. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/e2e/cmd_publish/test_publish.py +0 -0
  125. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/e2e/cmd_version/__init__.py +0 -0
  126. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/e2e/cmd_version/bump_version/__init__.py +0 -0
  127. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/e2e/cmd_version/bump_version/conftest.py +0 -0
  128. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/e2e/cmd_version/bump_version/git_flow/__init__.py +0 -0
  129. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/e2e/cmd_version/bump_version/git_flow/test_repo_1_channel.py +0 -0
  130. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/e2e/cmd_version/bump_version/git_flow/test_repo_2_channels.py +0 -0
  131. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/e2e/cmd_version/bump_version/git_flow/test_repo_3_channels.py +0 -0
  132. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/e2e/cmd_version/bump_version/git_flow/test_repo_4_channels.py +0 -0
  133. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/e2e/cmd_version/bump_version/github_flow/__init__.py +0 -0
  134. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/e2e/cmd_version/bump_version/github_flow/test_repo_1_channel.py +0 -0
  135. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/e2e/cmd_version/bump_version/github_flow/test_repo_2_channels.py +0 -0
  136. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/e2e/cmd_version/bump_version/trunk_based_dev/__init__.py +0 -0
  137. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/e2e/cmd_version/bump_version/trunk_based_dev/test_repo_trunk.py +0 -0
  138. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/e2e/cmd_version/bump_version/trunk_based_dev/test_repo_trunk_dual_version_support.py +0 -0
  139. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/e2e/cmd_version/bump_version/trunk_based_dev/test_repo_trunk_dual_version_support_w_prereleases.py +0 -0
  140. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/e2e/cmd_version/bump_version/trunk_based_dev/test_repo_trunk_w_prereleases.py +0 -0
  141. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/e2e/cmd_version/test_version.py +0 -0
  142. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/e2e/cmd_version/test_version_build.py +0 -0
  143. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/e2e/cmd_version/test_version_bump.py +0 -0
  144. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/e2e/cmd_version/test_version_changelog.py +0 -0
  145. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/e2e/cmd_version/test_version_changelog_custom_commit_msg.py +0 -0
  146. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/e2e/cmd_version/test_version_github_actions.py +0 -0
  147. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/e2e/cmd_version/test_version_print.py +0 -0
  148. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/e2e/cmd_version/test_version_release_notes.py +0 -0
  149. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/e2e/cmd_version/test_version_stamp.py +0 -0
  150. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/e2e/cmd_version/test_version_strict.py +0 -0
  151. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/e2e/conftest.py +0 -0
  152. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/e2e/test_help.py +0 -0
  153. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/e2e/test_main.py +0 -0
  154. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/fixtures/__init__.py +0 -0
  155. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/fixtures/commit_parsers.py +0 -0
  156. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/fixtures/example_project.py +0 -0
  157. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/fixtures/git_repo.py +0 -0
  158. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/fixtures/repos/__init__.py +0 -0
  159. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/fixtures/repos/git_flow/__init__.py +0 -0
  160. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/fixtures/repos/git_flow/repo_w_1_release_channel.py +0 -0
  161. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/fixtures/repos/git_flow/repo_w_2_release_channels.py +0 -0
  162. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/fixtures/repos/git_flow/repo_w_3_release_channels.py +0 -0
  163. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/fixtures/repos/git_flow/repo_w_4_release_channels.py +0 -0
  164. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/fixtures/repos/github_flow/__init__.py +0 -0
  165. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/fixtures/repos/github_flow/repo_w_default_release.py +0 -0
  166. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/fixtures/repos/github_flow/repo_w_release_channels.py +0 -0
  167. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/fixtures/repos/repo_initial_commit.py +0 -0
  168. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/fixtures/repos/trunk_based_dev/__init__.py +0 -0
  169. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/fixtures/repos/trunk_based_dev/repo_w_dual_version_support.py +0 -0
  170. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/fixtures/repos/trunk_based_dev/repo_w_dual_version_support_w_prereleases.py +0 -0
  171. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/fixtures/repos/trunk_based_dev/repo_w_no_tags.py +0 -0
  172. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/fixtures/repos/trunk_based_dev/repo_w_prereleases.py +0 -0
  173. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/fixtures/repos/trunk_based_dev/repo_w_tags.py +0 -0
  174. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/fixtures/scipy.py +0 -0
  175. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/unit/__init__.py +0 -0
  176. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/unit/conftest.py +0 -0
  177. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/unit/semantic_release/__init__.py +0 -0
  178. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/unit/semantic_release/changelog/__init__.py +0 -0
  179. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/unit/semantic_release/changelog/conftest.py +0 -0
  180. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/unit/semantic_release/changelog/test_changelog_context.py +0 -0
  181. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/unit/semantic_release/changelog/test_default_changelog.py +0 -0
  182. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/unit/semantic_release/changelog/test_release_history.py +0 -0
  183. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/unit/semantic_release/changelog/test_release_notes.py +0 -0
  184. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/unit/semantic_release/changelog/test_template.py +0 -0
  185. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/unit/semantic_release/changelog/test_template_render.py +0 -0
  186. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/unit/semantic_release/cli/__init__.py +0 -0
  187. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/unit/semantic_release/cli/test_config.py +0 -0
  188. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/unit/semantic_release/cli/test_github_actions_output.py +0 -0
  189. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/unit/semantic_release/cli/test_masking_filter.py +0 -0
  190. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/unit/semantic_release/cli/test_util.py +0 -0
  191. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/unit/semantic_release/cli/test_version.py +0 -0
  192. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/unit/semantic_release/commit_parser/__init__.py +0 -0
  193. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/unit/semantic_release/commit_parser/test_conventional.py +0 -0
  194. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/unit/semantic_release/commit_parser/test_emoji.py +0 -0
  195. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/unit/semantic_release/commit_parser/test_parsed_commit.py +0 -0
  196. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/unit/semantic_release/commit_parser/test_scipy.py +0 -0
  197. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/unit/semantic_release/commit_parser/test_util.py +0 -0
  198. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/unit/semantic_release/hvcs/__init__.py +0 -0
  199. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/unit/semantic_release/hvcs/test__base.py +0 -0
  200. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/unit/semantic_release/hvcs/test_token_auth.py +0 -0
  201. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/unit/semantic_release/hvcs/test_util.py +0 -0
  202. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/unit/semantic_release/test_helpers.py +0 -0
  203. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/unit/semantic_release/version/__init__.py +0 -0
  204. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/unit/semantic_release/version/declarations/__init__.py +0 -0
  205. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/unit/semantic_release/version/declarations/test_pattern_declaration.py +0 -0
  206. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/unit/semantic_release/version/declarations/test_toml_declaration.py +0 -0
  207. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/unit/semantic_release/version/test_algorithm.py +0 -0
  208. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/unit/semantic_release/version/test_translator.py +0 -0
  209. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/unit/semantic_release/version/test_version.py +0 -0
  210. {python_semantic_release-9.21.0 → python_semantic_release-9.21.1}/tests/util.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: python-semantic-release
3
- Version: 9.21.0
3
+ Version: 9.21.1
4
4
  Summary: Automatic Semantic Versioning for Python projects
5
5
  Author-email: Rolf Erik Lekang <me@rolflekang.com>
6
6
  License: MIT
@@ -26,12 +26,12 @@ Requires-Dist: click-option-group~=0.5
26
26
  Requires-Dist: gitpython~=3.0
27
27
  Requires-Dist: requests~=2.25
28
28
  Requires-Dist: jinja2~=3.1
29
- Requires-Dist: python-gitlab~=4.0
29
+ Requires-Dist: python-gitlab<6.0.0,>=4.0.0
30
30
  Requires-Dist: tomlkit~=0.11
31
31
  Requires-Dist: dotty-dict~=1.3
32
32
  Requires-Dist: importlib-resources~=6.0
33
33
  Requires-Dist: pydantic~=2.0
34
- Requires-Dist: rich~=13.0
34
+ Requires-Dist: rich~=14.0
35
35
  Requires-Dist: shellingham~=1.5
36
36
  Requires-Dist: Deprecated~=1.2
37
37
  Provides-Extra: build
@@ -49,7 +49,7 @@ Requires-Dist: freezegun~=1.5; extra == "test"
49
49
  Requires-Dist: pyyaml~=6.0; extra == "test"
50
50
  Requires-Dist: pytest~=8.3; extra == "test"
51
51
  Requires-Dist: pytest-clarity~=1.0; extra == "test"
52
- Requires-Dist: pytest-cov~=5.0; extra == "test"
52
+ Requires-Dist: pytest-cov<7.0.0,>=5.0.0; extra == "test"
53
53
  Requires-Dist: pytest-env~=1.0; extra == "test"
54
54
  Requires-Dist: pytest-lazy-fixtures~=1.1.1; extra == "test"
55
55
  Requires-Dist: pytest-mock~=3.0; extra == "test"
@@ -67,6 +67,7 @@ Requires-Dist: mypy==1.15.0; extra == "mypy"
67
67
  Requires-Dist: types-Deprecated~=1.2; extra == "mypy"
68
68
  Requires-Dist: types-requests~=2.32.0; extra == "mypy"
69
69
  Requires-Dist: types-pyyaml~=6.0; extra == "mypy"
70
+ Dynamic: license-file
70
71
 
71
72
  Python Semantic Release
72
73
  ***********************
@@ -337,7 +337,7 @@ before the :ref:`version <cmd-version>` subcommand.
337
337
 
338
338
  .. code:: yaml
339
339
 
340
- - uses: python-semantic-release/python-semantic-release@v9.20.0
340
+ - uses: python-semantic-release/python-semantic-release@v9.21.0
341
341
  with:
342
342
  root_options: "-vv --noop"
343
343
 
@@ -576,7 +576,7 @@ before the :ref:`publish <cmd-publish>` subcommand.
576
576
 
577
577
  .. code:: yaml
578
578
 
579
- - uses: python-semantic-release/publish-action@v9.20.0
579
+ - uses: python-semantic-release/publish-action@v9.21.0
580
580
  with:
581
581
  root_options: "-vv --noop"
582
582
 
@@ -728,23 +728,23 @@ to the GitHub Release Assets as well.
728
728
  - name: Action | Semantic Version Release
729
729
  id: release
730
730
  # Adjust tag with desired version if applicable.
731
- uses: python-semantic-release/python-semantic-release@v9.20.0
731
+ uses: python-semantic-release/python-semantic-release@v9.21.0
732
732
  with:
733
733
  github_token: ${{ secrets.GITHUB_TOKEN }}
734
734
  git_committer_name: "github-actions"
735
735
  git_committer_email: "actions@users.noreply.github.com"
736
736
 
737
- - name: Publish | Upload package to PyPI
738
- uses: pypa/gh-action-pypi-publish@v1
739
- if: steps.release.outputs.released == 'true'
740
-
741
737
  - name: Publish | Upload to GitHub Release Assets
742
- uses: python-semantic-release/publish-action@v9.20.0
738
+ uses: python-semantic-release/publish-action@v9.21.0
743
739
  if: steps.release.outputs.released == 'true'
744
740
  with:
745
741
  github_token: ${{ secrets.GITHUB_TOKEN }}
746
742
  tag: ${{ steps.release.outputs.tag }}
747
743
 
744
+ - name: Publish | Upload package to PyPI
745
+ uses: pypa/gh-action-pypi-publish@SHA1_HASH # vX.X.X
746
+ if: steps.release.outputs.released == 'true'
747
+
748
748
  .. important::
749
749
  The `concurrency`_ directive is used on the job to prevent race conditions of more than
750
750
  one release job in the case if there are multiple pushes to ``main`` in a short period
@@ -794,7 +794,7 @@ The equivalent GitHub Action configuration would be:
794
794
 
795
795
  - name: Action | Semantic Version Release
796
796
  # Adjust tag with desired version if applicable.
797
- uses: python-semantic-release/python-semantic-release@v9.20.0
797
+ uses: python-semantic-release/python-semantic-release@v9.21.0
798
798
  with:
799
799
  github_token: ${{ secrets.GITHUB_TOKEN }}
800
800
  force: patch
@@ -816,19 +816,84 @@ For multiple packages, you would need to run the action multiple times, to relea
816
816
  each project. The following example demonstrates how to release two projects in
817
817
  a monorepo.
818
818
 
819
+ Remember that for each release of each submodule you will then need to handle publishing
820
+ each package separately as well. This is dependent on the result of your build commands.
821
+ In the example below, we assume a simple ``build`` module command to build a ``sdist``
822
+ and wheel artifacts into the submodule's ``dist`` directory.
823
+
819
824
  The ``directory`` input directive is also available for the Python Semantic Release
820
825
  Publish Action.
821
826
 
822
827
  .. code:: yaml
823
828
 
824
- - name: Release Project 1
825
- uses: python-semantic-release/python-semantic-release@v9.20.0
826
- with:
827
- directory: ./project1
828
- github_token: ${{ secrets.GITHUB_TOKEN }}
829
-
830
- - name: Release Project 2
831
- uses: python-semantic-release/python-semantic-release@v9.20.0
832
- with:
833
- directory: ./project2
834
- github_token: ${{ secrets.GITHUB_TOKEN }}
829
+ jobs:
830
+
831
+ release:
832
+
833
+ env:
834
+ SUBMODULE_1_DIR: project1
835
+ SUBMODULE_2_DIR: project2
836
+
837
+ steps:
838
+
839
+ # ------------------------------------------------------------------- #
840
+ # Note the use of different IDs to distinguish which submodule was #
841
+ # identified to be released. The subsequent actions then reference #
842
+ # their specific release ID to determine if a release occurred. #
843
+ # ------------------------------------------------------------------- #
844
+
845
+ - name: Release submodule 1
846
+ id: release-submod-1
847
+ uses: python-semantic-release/python-semantic-release@v9.21.0
848
+ with:
849
+ directory: ${{ env.SUBMODULE_1_DIR }}
850
+ github_token: ${{ secrets.GITHUB_TOKEN }}
851
+
852
+ - name: Release submodule 2
853
+ id: release-submod-2
854
+ uses: python-semantic-release/python-semantic-release@v9.21.0
855
+ with:
856
+ directory: ${{ env.SUBMODULE_2_DIR }}
857
+ github_token: ${{ secrets.GITHUB_TOKEN }}
858
+
859
+ # ------------------------------------------------------------------- #
860
+ # For each submodule, you will have to publish the package separately #
861
+ # and only attempt to publish if the release for that submodule was #
862
+ # deemed a release (and the release was successful). #
863
+ # ------------------------------------------------------------------- #
864
+
865
+ - name: Publish | Upload package 1 to GitHub Release Assets
866
+ uses: python-semantic-release/publish-action@v9.21.0
867
+ if: steps.release-submod-1.outputs.released == 'true'
868
+ with:
869
+ directory: ${{ env.SUBMODULE_1_DIR }}
870
+ github_token: ${{ secrets.GITHUB_TOKEN }}
871
+ tag: ${{ steps.release-submod-1.outputs.tag }}
872
+
873
+ - name: Publish | Upload package 2 to GitHub Release Assets
874
+ uses: python-semantic-release/publish-action@v9.21.0
875
+ if: steps.release-submod-2.outputs.released == 'true'
876
+ with:
877
+ directory: ${{ env.SUBMODULE_2_DIR }}
878
+ github_token: ${{ secrets.GITHUB_TOKEN }}
879
+ tag: ${{ steps.release-submod-2.outputs.tag }}
880
+
881
+ # ------------------------------------------------------------------- #
882
+ # Python Semantic Release is not responsible for publishing your #
883
+ # python artifacts to PyPI. Use the official PyPA publish action #
884
+ # instead. The following steps are an example but is not guaranteed #
885
+ # to work as the action is not maintained by the #
886
+ # python-semantic-release team. #
887
+ # ------------------------------------------------------------------- #
888
+
889
+ - name: Publish | Upload package 1 to PyPI
890
+ uses: pypa/gh-action-pypi-publish@SHA1_HASH # vX.X.X
891
+ if: steps.release-submod-1.outputs.released == 'true'
892
+ with:
893
+ packages-dir: ${{ format('{}/dist', env.SUBMODULE_1_DIR) }}
894
+
895
+ - name: Publish | Upload package 2 to PyPI
896
+ uses: pypa/gh-action-pypi-publish@SHA1_HASH # vX.X.X
897
+ if: steps.release-submod-2.outputs.released == 'true'
898
+ with:
899
+ packages-dir: ${{ format('{}/dist', env.SUBMODULE_2_DIR) }}
@@ -1,12 +1,12 @@
1
1
  # Ref: https://packaging.python.org/en/latest/specifications/declaring-project-metadata/
2
2
  # and https://setuptools.pypa.io/en/latest/userguide/pyproject_config.html
3
3
  [build-system]
4
- requires = ["setuptools ~= 75.3.0", "wheel ~= 0.42"]
4
+ requires = ["setuptools >= 75.3.0, < 81.0.0", "wheel ~= 0.42"]
5
5
  build-backend = "setuptools.build_meta"
6
6
 
7
7
  [project]
8
8
  name = "python-semantic-release"
9
- version = "9.21.0"
9
+ version = "9.21.1"
10
10
  description = "Automatic Semantic Versioning for Python projects"
11
11
  requires-python = ">=3.8"
12
12
  license = { text = "MIT" }
@@ -28,12 +28,12 @@ dependencies = [
28
28
  "gitpython ~= 3.0",
29
29
  "requests ~= 2.25",
30
30
  "jinja2 ~= 3.1",
31
- "python-gitlab ~= 4.0",
31
+ "python-gitlab >= 4.0.0, < 6.0.0",
32
32
  "tomlkit ~= 0.11",
33
33
  "dotty-dict ~= 1.3",
34
34
  "importlib-resources ~= 6.0",
35
35
  "pydantic ~= 2.0",
36
- "rich ~= 13.0",
36
+ "rich ~= 14.0",
37
37
  "shellingham ~= 1.5",
38
38
  "Deprecated ~= 1.2", # Backport of deprecated decorator for python 3.8
39
39
  ]
@@ -68,7 +68,7 @@ test = [
68
68
  "pyyaml ~= 6.0",
69
69
  "pytest ~= 8.3",
70
70
  "pytest-clarity ~= 1.0",
71
- "pytest-cov ~= 5.0",
71
+ "pytest-cov >= 5.0.0, < 7.0.0",
72
72
  "pytest-env ~= 1.0",
73
73
  "pytest-lazy-fixtures ~= 1.1.1",
74
74
  "pytest-mock ~= 3.0",
@@ -412,7 +412,6 @@ build_command = """
412
412
  python -m build .
413
413
  """
414
414
  major_on_zero = true
415
- version_variables = ["src/semantic_release/__init__.py:__version__"]
416
415
  version_toml = ["pyproject.toml:project.version"]
417
416
 
418
417
  [tool.semantic_release.changelog]
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: python-semantic-release
3
- Version: 9.21.0
3
+ Version: 9.21.1
4
4
  Summary: Automatic Semantic Versioning for Python projects
5
5
  Author-email: Rolf Erik Lekang <me@rolflekang.com>
6
6
  License: MIT
@@ -26,12 +26,12 @@ Requires-Dist: click-option-group~=0.5
26
26
  Requires-Dist: gitpython~=3.0
27
27
  Requires-Dist: requests~=2.25
28
28
  Requires-Dist: jinja2~=3.1
29
- Requires-Dist: python-gitlab~=4.0
29
+ Requires-Dist: python-gitlab<6.0.0,>=4.0.0
30
30
  Requires-Dist: tomlkit~=0.11
31
31
  Requires-Dist: dotty-dict~=1.3
32
32
  Requires-Dist: importlib-resources~=6.0
33
33
  Requires-Dist: pydantic~=2.0
34
- Requires-Dist: rich~=13.0
34
+ Requires-Dist: rich~=14.0
35
35
  Requires-Dist: shellingham~=1.5
36
36
  Requires-Dist: Deprecated~=1.2
37
37
  Provides-Extra: build
@@ -49,7 +49,7 @@ Requires-Dist: freezegun~=1.5; extra == "test"
49
49
  Requires-Dist: pyyaml~=6.0; extra == "test"
50
50
  Requires-Dist: pytest~=8.3; extra == "test"
51
51
  Requires-Dist: pytest-clarity~=1.0; extra == "test"
52
- Requires-Dist: pytest-cov~=5.0; extra == "test"
52
+ Requires-Dist: pytest-cov<7.0.0,>=5.0.0; extra == "test"
53
53
  Requires-Dist: pytest-env~=1.0; extra == "test"
54
54
  Requires-Dist: pytest-lazy-fixtures~=1.1.1; extra == "test"
55
55
  Requires-Dist: pytest-mock~=3.0; extra == "test"
@@ -67,6 +67,7 @@ Requires-Dist: mypy==1.15.0; extra == "mypy"
67
67
  Requires-Dist: types-Deprecated~=1.2; extra == "mypy"
68
68
  Requires-Dist: types-requests~=2.32.0; extra == "mypy"
69
69
  Requires-Dist: types-pyyaml~=6.0; extra == "mypy"
70
+ Dynamic: license-file
70
71
 
71
72
  Python Semantic Release
72
73
  ***********************
@@ -3,12 +3,12 @@ click-option-group~=0.5
3
3
  gitpython~=3.0
4
4
  requests~=2.25
5
5
  jinja2~=3.1
6
- python-gitlab~=4.0
6
+ python-gitlab<6.0.0,>=4.0.0
7
7
  tomlkit~=0.11
8
8
  dotty-dict~=1.3
9
9
  importlib-resources~=6.0
10
10
  pydantic~=2.0
11
- rich~=13.0
11
+ rich~=14.0
12
12
  shellingham~=1.5
13
13
  Deprecated~=1.2
14
14
 
@@ -40,7 +40,7 @@ freezegun~=1.5
40
40
  pyyaml~=6.0
41
41
  pytest~=8.3
42
42
  pytest-clarity~=1.0
43
- pytest-cov~=5.0
43
+ pytest-cov<7.0.0,>=5.0.0
44
44
  pytest-env~=1.0
45
45
  pytest-lazy-fixtures~=1.1.1
46
46
  pytest-mock~=3.0
@@ -2,6 +2,8 @@
2
2
 
3
3
  from __future__ import annotations
4
4
 
5
+ import importlib.metadata
6
+
5
7
  from semantic_release.commit_parser import (
6
8
  CommitParser,
7
9
  ParsedCommit,
@@ -24,7 +26,7 @@ from semantic_release.version import (
24
26
  tags_and_versions,
25
27
  )
26
28
 
27
- __version__ = "9.21.0"
29
+ __version__ = importlib.metadata.version(f"python_{__package__}".replace("_", "-"))
28
30
 
29
31
  __all__ = [
30
32
  "CommitParser",
@@ -95,10 +95,15 @@ class RemoteHvcsBase(HvcsBase, metaclass=ABCMeta):
95
95
  query: str | None = None,
96
96
  fragment: str | None = None,
97
97
  ) -> str:
98
- # Ensure any path prefix is transfered but not doubled up on the derived url
98
+ # Ensure any path prefix is transferred but not doubled up on the derived url
99
+ normalized_path = (
100
+ f"{self.hvcs_domain.path}/{path}"
101
+ if self.hvcs_domain.path and not path.startswith(self.hvcs_domain.path)
102
+ else path
103
+ )
99
104
  return self._derive_url(
100
105
  self.hvcs_domain,
101
- path=f"{self.hvcs_domain.path or ''}/{path.lstrip(self.hvcs_domain.path)}",
106
+ path=normalized_path,
102
107
  auth=auth,
103
108
  query=query,
104
109
  fragment=fragment,
@@ -123,10 +128,15 @@ class RemoteHvcsBase(HvcsBase, metaclass=ABCMeta):
123
128
  query: str | None = None,
124
129
  fragment: str | None = None,
125
130
  ) -> str:
126
- # Ensure any api path prefix is transfered but not doubled up on the derived api url
131
+ # Ensure any api path prefix is transferred but not doubled up on the derived api url
132
+ normalized_endpoint = (
133
+ f"{self.api_url.path}/{endpoint}"
134
+ if self.api_url.path and not endpoint.startswith(self.api_url.path)
135
+ else endpoint
136
+ )
127
137
  return self._derive_url(
128
138
  self.api_url,
129
- path=f"{self.api_url.path or ''}/{endpoint.lstrip(self.api_url.path)}",
139
+ path=normalized_endpoint,
130
140
  auth=auth,
131
141
  query=query,
132
142
  fragment=fragment,
@@ -301,6 +301,29 @@ def test_commit_hash_url(default_bitbucket_client: Bitbucket):
301
301
  assert expected_url == default_bitbucket_client.commit_hash_url(sha)
302
302
 
303
303
 
304
+ def test_commit_hash_url_w_custom_server():
305
+ """
306
+ Test the commit hash URL generation for a self-hosted Bitbucket server with prefix.
307
+
308
+ ref: https://github.com/python-semantic-release/python-semantic-release/issues/1204
309
+ """
310
+ sha = "244f7e11bcb1e1ce097db61594056bc2a32189a0"
311
+ expected_url = "{server}/{owner}/{repo}/commits/{sha}".format(
312
+ server=f"https://{EXAMPLE_HVCS_DOMAIN}/projects/demo-foo",
313
+ owner="foo",
314
+ repo=EXAMPLE_REPO_NAME,
315
+ sha=sha,
316
+ )
317
+
318
+ with mock.patch.dict(os.environ, {}, clear=True):
319
+ actual_url = Bitbucket(
320
+ remote_url=f"https://{EXAMPLE_HVCS_DOMAIN}/projects/demo-foo/foo/{EXAMPLE_REPO_NAME}.git",
321
+ hvcs_domain=f"https://{EXAMPLE_HVCS_DOMAIN}/projects/demo-foo",
322
+ ).commit_hash_url(sha)
323
+
324
+ assert expected_url == actual_url
325
+
326
+
304
327
  @pytest.mark.parametrize("pr_number", (666, "666", "#666"))
305
328
  def test_pull_request_url(default_bitbucket_client: Bitbucket, pr_number: int | str):
306
329
  expected_url = "{server}/{owner}/{repo}/pull-requests/{pr_number}".format(
@@ -203,6 +203,29 @@ def test_commit_hash_url(default_gitea_client: Gitea):
203
203
  assert expected_url == default_gitea_client.commit_hash_url(sha)
204
204
 
205
205
 
206
+ def test_commit_hash_url_w_custom_server():
207
+ """
208
+ Test the commit hash URL generation for a self-hosted Bitbucket server with prefix.
209
+
210
+ ref: https://github.com/python-semantic-release/python-semantic-release/issues/1204
211
+ """
212
+ sha = "244f7e11bcb1e1ce097db61594056bc2a32189a0"
213
+ expected_url = "{server}/{owner}/{repo}/commit/{sha}".format(
214
+ server=f"https://{EXAMPLE_HVCS_DOMAIN}/projects/demo-foo",
215
+ owner="foo",
216
+ repo=EXAMPLE_REPO_NAME,
217
+ sha=sha,
218
+ )
219
+
220
+ with mock.patch.dict(os.environ, {}, clear=True):
221
+ actual_url = Gitea(
222
+ remote_url=f"https://{EXAMPLE_HVCS_DOMAIN}/projects/demo-foo/foo/{EXAMPLE_REPO_NAME}.git",
223
+ hvcs_domain=f"https://{EXAMPLE_HVCS_DOMAIN}/projects/demo-foo",
224
+ ).commit_hash_url(sha)
225
+
226
+ assert expected_url == actual_url
227
+
228
+
206
229
  @pytest.mark.parametrize("issue_number", (666, "666", "#666"))
207
230
  def test_issue_url(default_gitea_client: Gitea, issue_number: int | str):
208
231
  expected_url = "{server}/{owner}/{repo}/issues/{issue_number}".format(
@@ -375,6 +375,29 @@ def test_commit_hash_url(default_gh_client: Github):
375
375
  assert expected_url == default_gh_client.commit_hash_url(sha)
376
376
 
377
377
 
378
+ def test_commit_hash_url_w_custom_server():
379
+ """
380
+ Test the commit hash URL generation for a self-hosted Bitbucket server with prefix.
381
+
382
+ ref: https://github.com/python-semantic-release/python-semantic-release/issues/1204
383
+ """
384
+ sha = "244f7e11bcb1e1ce097db61594056bc2a32189a0"
385
+ expected_url = "{server}/{owner}/{repo}/commit/{sha}".format(
386
+ server=f"https://{EXAMPLE_HVCS_DOMAIN}/projects/demo-foo",
387
+ owner="foo",
388
+ repo=EXAMPLE_REPO_NAME,
389
+ sha=sha,
390
+ )
391
+
392
+ with mock.patch.dict(os.environ, {}, clear=True):
393
+ actual_url = Github(
394
+ remote_url=f"https://{EXAMPLE_HVCS_DOMAIN}/projects/demo-foo/foo/{EXAMPLE_REPO_NAME}.git",
395
+ hvcs_domain=f"https://{EXAMPLE_HVCS_DOMAIN}/projects/demo-foo",
396
+ ).commit_hash_url(sha)
397
+
398
+ assert expected_url == actual_url
399
+
400
+
378
401
  @pytest.mark.parametrize("issue_number", (666, "666", "#666"))
379
402
  def test_issue_url(default_gh_client: Github, issue_number: str | int):
380
403
  expected_url = "{server}/{owner}/{repo}/issues/{issue_num}".format(
@@ -260,6 +260,29 @@ def test_commit_hash_url(default_gl_client: Gitlab):
260
260
  assert expected_url == default_gl_client.commit_hash_url(REF)
261
261
 
262
262
 
263
+ def test_commit_hash_url_w_custom_server():
264
+ """
265
+ Test the commit hash URL generation for a self-hosted Bitbucket server with prefix.
266
+
267
+ ref: https://github.com/python-semantic-release/python-semantic-release/issues/1204
268
+ """
269
+ sha = "244f7e11bcb1e1ce097db61594056bc2a32189a0"
270
+ expected_url = "{server}/{owner}/{repo}/-/commit/{sha}".format(
271
+ server=f"https://{EXAMPLE_HVCS_DOMAIN}/projects/demo-foo",
272
+ owner="foo",
273
+ repo=EXAMPLE_REPO_NAME,
274
+ sha=sha,
275
+ )
276
+
277
+ with mock.patch.dict(os.environ, {}, clear=True):
278
+ actual_url = Gitlab(
279
+ remote_url=f"https://{EXAMPLE_HVCS_DOMAIN}/projects/demo-foo/foo/{EXAMPLE_REPO_NAME}.git",
280
+ hvcs_domain=f"https://{EXAMPLE_HVCS_DOMAIN}/projects/demo-foo",
281
+ ).commit_hash_url(sha)
282
+
283
+ assert expected_url == actual_url
284
+
285
+
263
286
  @pytest.mark.parametrize("issue_number", (666, "666", "#666"))
264
287
  def test_issue_url(default_gl_client: Gitlab, issue_number: int | str):
265
288
  expected_url = "{server}/{owner}/{repo}/-/issues/{issue_num}".format(