python-semantic-release 9.21.0__tar.gz → 9.21.2__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.2}/PKG-INFO +11 -8
  2. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/docs/automatic-releases/github-actions.rst +86 -21
  3. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/pyproject.toml +19 -14
  4. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2/src/python_semantic_release.egg-info}/PKG-INFO +11 -8
  5. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/python_semantic_release.egg-info/requires.txt +7 -6
  6. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/__init__.py +3 -1
  7. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/helpers.py +12 -2
  8. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/hvcs/remote_hvcs_base.py +14 -4
  9. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/e2e/cmd_version/bump_version/git_flow/test_repo_1_channel.py +1 -1
  10. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/e2e/cmd_version/bump_version/git_flow/test_repo_2_channels.py +1 -1
  11. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/e2e/cmd_version/bump_version/git_flow/test_repo_3_channels.py +1 -1
  12. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/e2e/cmd_version/bump_version/git_flow/test_repo_4_channels.py +1 -1
  13. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/e2e/cmd_version/bump_version/github_flow/test_repo_1_channel.py +1 -1
  14. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/e2e/cmd_version/bump_version/github_flow/test_repo_2_channels.py +1 -1
  15. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/e2e/cmd_version/bump_version/trunk_based_dev/test_repo_trunk.py +1 -1
  16. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/e2e/cmd_version/bump_version/trunk_based_dev/test_repo_trunk_dual_version_support.py +1 -1
  17. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/e2e/cmd_version/bump_version/trunk_based_dev/test_repo_trunk_dual_version_support_w_prereleases.py +1 -1
  18. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/e2e/cmd_version/bump_version/trunk_based_dev/test_repo_trunk_w_prereleases.py +1 -1
  19. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/e2e/cmd_version/test_version_build.py +1 -1
  20. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/unit/semantic_release/hvcs/test_bitbucket.py +23 -0
  21. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/unit/semantic_release/hvcs/test_gitea.py +23 -0
  22. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/unit/semantic_release/hvcs/test_github.py +23 -0
  23. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/unit/semantic_release/hvcs/test_gitlab.py +23 -0
  24. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/unit/semantic_release/test_helpers.py +29 -0
  25. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/AUTHORS.rst +0 -0
  26. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/LICENSE +0 -0
  27. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/MANIFEST.in +0 -0
  28. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/README.rst +0 -0
  29. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/docs/Makefile +0 -0
  30. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/docs/algorithm.rst +0 -0
  31. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/docs/automatic-releases/cronjobs.rst +0 -0
  32. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/docs/automatic-releases/index.rst +0 -0
  33. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/docs/automatic-releases/travis.rst +0 -0
  34. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/docs/changelog_templates.rst +0 -0
  35. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/docs/commands.rst +0 -0
  36. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/docs/commit_parsing.rst +0 -0
  37. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/docs/conf.py +0 -0
  38. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/docs/configuration.rst +0 -0
  39. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/docs/contributing.rst +0 -0
  40. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/docs/contributors.rst +0 -0
  41. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/docs/index.rst +0 -0
  42. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/docs/make.bat +0 -0
  43. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/docs/migrating_from_v7.rst +0 -0
  44. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/docs/multibranch_releases.rst +0 -0
  45. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/docs/psr_changelog.rst +0 -0
  46. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/docs/strict_mode.rst +0 -0
  47. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/docs/troubleshooting.rst +0 -0
  48. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/setup.cfg +0 -0
  49. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/python_semantic_release.egg-info/SOURCES.txt +0 -0
  50. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/python_semantic_release.egg-info/dependency_links.txt +0 -0
  51. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/python_semantic_release.egg-info/entry_points.txt +0 -0
  52. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/python_semantic_release.egg-info/top_level.txt +0 -0
  53. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/__main__.py +0 -0
  54. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/changelog/__init__.py +0 -0
  55. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/changelog/context.py +0 -0
  56. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/changelog/release_history.py +0 -0
  57. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/changelog/template.py +0 -0
  58. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/cli/__init__.py +0 -0
  59. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/cli/changelog_writer.py +0 -0
  60. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/cli/cli_context.py +0 -0
  61. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/cli/commands/__init__.py +0 -0
  62. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/cli/commands/changelog.py +0 -0
  63. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/cli/commands/generate_config.py +0 -0
  64. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/cli/commands/main.py +0 -0
  65. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/cli/commands/publish.py +0 -0
  66. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/cli/commands/version.py +0 -0
  67. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/cli/config.py +0 -0
  68. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/cli/const.py +0 -0
  69. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/cli/github_actions_output.py +0 -0
  70. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/cli/masking_filter.py +0 -0
  71. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/cli/util.py +0 -0
  72. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/commit_parser/__init__.py +0 -0
  73. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/commit_parser/_base.py +0 -0
  74. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/commit_parser/angular.py +0 -0
  75. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/commit_parser/conventional.py +0 -0
  76. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/commit_parser/emoji.py +0 -0
  77. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/commit_parser/scipy.py +0 -0
  78. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/commit_parser/tag.py +0 -0
  79. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/commit_parser/token.py +0 -0
  80. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/commit_parser/util.py +0 -0
  81. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/const.py +0 -0
  82. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/data/templates/angular/md/.components/changelog_header.md.j2 +0 -0
  83. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/data/templates/angular/md/.components/changelog_init.md.j2 +0 -0
  84. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/data/templates/angular/md/.components/changelog_update.md.j2 +0 -0
  85. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/data/templates/angular/md/.components/changes.md.j2 +0 -0
  86. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/data/templates/angular/md/.components/first_release.md.j2 +0 -0
  87. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/data/templates/angular/md/.components/macros.md.j2 +0 -0
  88. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/data/templates/angular/md/.components/unreleased_changes.md.j2 +0 -0
  89. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/data/templates/angular/md/.components/versioned_changes.md.j2 +0 -0
  90. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/data/templates/angular/md/.release_notes.md.j2 +0 -0
  91. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/data/templates/angular/md/CHANGELOG.md.j2 +0 -0
  92. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/data/templates/angular/rst/.components/changelog_header.rst.j2 +0 -0
  93. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/data/templates/angular/rst/.components/changelog_init.rst.j2 +0 -0
  94. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/data/templates/angular/rst/.components/changelog_update.rst.j2 +0 -0
  95. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/data/templates/angular/rst/.components/changes.rst.j2 +0 -0
  96. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/data/templates/angular/rst/.components/first_release.rst.j2 +0 -0
  97. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/data/templates/angular/rst/.components/macros.rst.j2 +0 -0
  98. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/data/templates/angular/rst/.components/unreleased_changes.rst.j2 +0 -0
  99. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/data/templates/angular/rst/.components/versioned_changes.rst.j2 +0 -0
  100. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/data/templates/angular/rst/CHANGELOG.rst.j2 +0 -0
  101. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/enums.py +0 -0
  102. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/errors.py +0 -0
  103. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/gitproject.py +0 -0
  104. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/globals.py +0 -0
  105. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/hvcs/__init__.py +0 -0
  106. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/hvcs/_base.py +0 -0
  107. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/hvcs/bitbucket.py +0 -0
  108. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/hvcs/gitea.py +0 -0
  109. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/hvcs/github.py +0 -0
  110. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/hvcs/gitlab.py +0 -0
  111. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/hvcs/token_auth.py +0 -0
  112. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/hvcs/util.py +0 -0
  113. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/py.typed +0 -0
  114. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/version/__init__.py +0 -0
  115. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/version/algorithm.py +0 -0
  116. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/version/declaration.py +0 -0
  117. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/version/declarations/__init__.py +0 -0
  118. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/version/declarations/enum.py +0 -0
  119. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/version/declarations/i_version_replacer.py +0 -0
  120. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/version/declarations/pattern.py +0 -0
  121. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/version/declarations/toml.py +0 -0
  122. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/version/translator.py +0 -0
  123. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/src/semantic_release/version/version.py +0 -0
  124. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/__init__.py +0 -0
  125. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/conftest.py +0 -0
  126. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/const.py +0 -0
  127. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/e2e/__init__.py +0 -0
  128. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/e2e/cmd_changelog/__init__.py +0 -0
  129. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/e2e/cmd_changelog/test_changelog.py +0 -0
  130. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/e2e/cmd_changelog/test_changelog_custom_parser.py +0 -0
  131. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/e2e/cmd_changelog/test_changelog_parsing.py +0 -0
  132. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/e2e/cmd_changelog/test_changelog_release_notes.py +0 -0
  133. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/e2e/cmd_config/__init__.py +0 -0
  134. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/e2e/cmd_config/test_generate_config.py +0 -0
  135. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/e2e/cmd_publish/__init__.py +0 -0
  136. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/e2e/cmd_publish/test_publish.py +0 -0
  137. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/e2e/cmd_version/__init__.py +0 -0
  138. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/e2e/cmd_version/bump_version/__init__.py +0 -0
  139. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/e2e/cmd_version/bump_version/conftest.py +0 -0
  140. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/e2e/cmd_version/bump_version/git_flow/__init__.py +0 -0
  141. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/e2e/cmd_version/bump_version/github_flow/__init__.py +0 -0
  142. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/e2e/cmd_version/bump_version/trunk_based_dev/__init__.py +0 -0
  143. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/e2e/cmd_version/test_version.py +0 -0
  144. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/e2e/cmd_version/test_version_bump.py +0 -0
  145. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/e2e/cmd_version/test_version_changelog.py +0 -0
  146. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/e2e/cmd_version/test_version_changelog_custom_commit_msg.py +0 -0
  147. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/e2e/cmd_version/test_version_github_actions.py +0 -0
  148. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/e2e/cmd_version/test_version_print.py +0 -0
  149. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/e2e/cmd_version/test_version_release_notes.py +0 -0
  150. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/e2e/cmd_version/test_version_stamp.py +0 -0
  151. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/e2e/cmd_version/test_version_strict.py +0 -0
  152. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/e2e/conftest.py +0 -0
  153. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/e2e/test_help.py +0 -0
  154. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/e2e/test_main.py +0 -0
  155. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/fixtures/__init__.py +0 -0
  156. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/fixtures/commit_parsers.py +0 -0
  157. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/fixtures/example_project.py +0 -0
  158. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/fixtures/git_repo.py +0 -0
  159. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/fixtures/repos/__init__.py +0 -0
  160. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/fixtures/repos/git_flow/__init__.py +0 -0
  161. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/fixtures/repos/git_flow/repo_w_1_release_channel.py +0 -0
  162. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/fixtures/repos/git_flow/repo_w_2_release_channels.py +0 -0
  163. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/fixtures/repos/git_flow/repo_w_3_release_channels.py +0 -0
  164. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/fixtures/repos/git_flow/repo_w_4_release_channels.py +0 -0
  165. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/fixtures/repos/github_flow/__init__.py +0 -0
  166. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/fixtures/repos/github_flow/repo_w_default_release.py +0 -0
  167. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/fixtures/repos/github_flow/repo_w_release_channels.py +0 -0
  168. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/fixtures/repos/repo_initial_commit.py +0 -0
  169. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/fixtures/repos/trunk_based_dev/__init__.py +0 -0
  170. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/fixtures/repos/trunk_based_dev/repo_w_dual_version_support.py +0 -0
  171. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/fixtures/repos/trunk_based_dev/repo_w_dual_version_support_w_prereleases.py +0 -0
  172. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/fixtures/repos/trunk_based_dev/repo_w_no_tags.py +0 -0
  173. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/fixtures/repos/trunk_based_dev/repo_w_prereleases.py +0 -0
  174. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/fixtures/repos/trunk_based_dev/repo_w_tags.py +0 -0
  175. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/fixtures/scipy.py +0 -0
  176. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/unit/__init__.py +0 -0
  177. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/unit/conftest.py +0 -0
  178. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/unit/semantic_release/__init__.py +0 -0
  179. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/unit/semantic_release/changelog/__init__.py +0 -0
  180. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/unit/semantic_release/changelog/conftest.py +0 -0
  181. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/unit/semantic_release/changelog/test_changelog_context.py +0 -0
  182. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/unit/semantic_release/changelog/test_default_changelog.py +0 -0
  183. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/unit/semantic_release/changelog/test_release_history.py +0 -0
  184. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/unit/semantic_release/changelog/test_release_notes.py +0 -0
  185. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/unit/semantic_release/changelog/test_template.py +0 -0
  186. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/unit/semantic_release/changelog/test_template_render.py +0 -0
  187. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/unit/semantic_release/cli/__init__.py +0 -0
  188. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/unit/semantic_release/cli/test_config.py +0 -0
  189. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/unit/semantic_release/cli/test_github_actions_output.py +0 -0
  190. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/unit/semantic_release/cli/test_masking_filter.py +0 -0
  191. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/unit/semantic_release/cli/test_util.py +0 -0
  192. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/unit/semantic_release/cli/test_version.py +0 -0
  193. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/unit/semantic_release/commit_parser/__init__.py +0 -0
  194. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/unit/semantic_release/commit_parser/test_conventional.py +0 -0
  195. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/unit/semantic_release/commit_parser/test_emoji.py +0 -0
  196. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/unit/semantic_release/commit_parser/test_parsed_commit.py +0 -0
  197. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/unit/semantic_release/commit_parser/test_scipy.py +0 -0
  198. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/unit/semantic_release/commit_parser/test_util.py +0 -0
  199. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/unit/semantic_release/hvcs/__init__.py +0 -0
  200. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/unit/semantic_release/hvcs/test__base.py +0 -0
  201. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/unit/semantic_release/hvcs/test_token_auth.py +0 -0
  202. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/unit/semantic_release/hvcs/test_util.py +0 -0
  203. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/unit/semantic_release/version/__init__.py +0 -0
  204. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/unit/semantic_release/version/declarations/__init__.py +0 -0
  205. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/unit/semantic_release/version/declarations/test_pattern_declaration.py +0 -0
  206. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/unit/semantic_release/version/declarations/test_toml_declaration.py +0 -0
  207. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/unit/semantic_release/version/test_algorithm.py +0 -0
  208. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/unit/semantic_release/version/test_translator.py +0 -0
  209. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/tests/unit/semantic_release/version/test_version.py +0 -0
  210. {python_semantic_release-9.21.0 → python_semantic_release-9.21.2}/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.2
4
4
  Summary: Automatic Semantic Versioning for Python projects
5
5
  Author-email: Rolf Erik Lekang <me@rolflekang.com>
6
6
  License: MIT
@@ -17,25 +17,27 @@ Classifier: Programming Language :: Python :: 3.10
17
17
  Classifier: Programming Language :: Python :: 3.11
18
18
  Classifier: Programming Language :: Python :: 3.12
19
19
  Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Programming Language :: Python :: 3.14
20
21
  Requires-Python: >=3.8
21
22
  Description-Content-Type: text/x-rst
22
23
  License-File: LICENSE
23
24
  License-File: AUTHORS.rst
24
- Requires-Dist: click~=8.0
25
+ Requires-Dist: click~=8.1.0
25
26
  Requires-Dist: click-option-group~=0.5
26
27
  Requires-Dist: gitpython~=3.0
27
28
  Requires-Dist: requests~=2.25
28
29
  Requires-Dist: jinja2~=3.1
29
- Requires-Dist: python-gitlab~=4.0
30
- Requires-Dist: tomlkit~=0.11
30
+ Requires-Dist: python-gitlab<6.0.0,>=4.0.0
31
+ Requires-Dist: tomlkit~=0.13.0
31
32
  Requires-Dist: dotty-dict~=1.3
32
33
  Requires-Dist: importlib-resources~=6.0
33
34
  Requires-Dist: pydantic~=2.0
34
- Requires-Dist: rich~=13.0
35
+ Requires-Dist: rich~=14.0
35
36
  Requires-Dist: shellingham~=1.5
36
37
  Requires-Dist: Deprecated~=1.2
37
38
  Provides-Extra: build
38
39
  Requires-Dist: build~=1.2; extra == "build"
40
+ Requires-Dist: tomlkit~=0.13.0; extra == "build"
39
41
  Provides-Extra: docs
40
42
  Requires-Dist: Sphinx~=6.0; extra == "docs"
41
43
  Requires-Dist: sphinxcontrib-apidoc==0.5.0; extra == "docs"
@@ -44,12 +46,12 @@ Requires-Dist: furo~=2024.1; extra == "docs"
44
46
  Provides-Extra: test
45
47
  Requires-Dist: coverage[toml]~=7.0; extra == "test"
46
48
  Requires-Dist: filelock~=3.15; extra == "test"
47
- Requires-Dist: flatdict~=4.0; extra == "test"
49
+ Requires-Dist: flatdict2~=4.0; extra == "test"
48
50
  Requires-Dist: freezegun~=1.5; extra == "test"
49
51
  Requires-Dist: pyyaml~=6.0; extra == "test"
50
52
  Requires-Dist: pytest~=8.3; extra == "test"
51
53
  Requires-Dist: pytest-clarity~=1.0; extra == "test"
52
- Requires-Dist: pytest-cov~=5.0; extra == "test"
54
+ Requires-Dist: pytest-cov<7.0.0,>=5.0.0; extra == "test"
53
55
  Requires-Dist: pytest-env~=1.0; extra == "test"
54
56
  Requires-Dist: pytest-lazy-fixtures~=1.1.1; extra == "test"
55
57
  Requires-Dist: pytest-mock~=3.0; extra == "test"
@@ -67,6 +69,7 @@ Requires-Dist: mypy==1.15.0; extra == "mypy"
67
69
  Requires-Dist: types-Deprecated~=1.2; extra == "mypy"
68
70
  Requires-Dist: types-requests~=2.32.0; extra == "mypy"
69
71
  Requires-Dist: types-pyyaml~=6.0; extra == "mypy"
72
+ Dynamic: license-file
70
73
 
71
74
  Python Semantic Release
72
75
  ***********************
@@ -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.1
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.1
580
580
  with:
581
581
  root_options: "-vv --noop"
582
582
 
@@ -698,7 +698,7 @@ to the GitHub Release Assets as well.
698
698
  run: |
699
699
  set +o pipefail
700
700
 
701
- UPSTREAM_BRANCH_NAME="$(git status -sb | head -n 1 | cut -d' ' -f2 | grep -E '\.{3}' | cut -d'.' -f4)"
701
+ UPSTREAM_BRANCH_NAME="$(git status -sb | head -n 1 | awk -F '\\.\\.\\.' '{print $2}' | cut -d ' ' -f1)"
702
702
  printf '%s\n' "Upstream branch name: $UPSTREAM_BRANCH_NAME"
703
703
 
704
704
  set -o pipefail
@@ -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.1
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.1
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.1
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.1
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.1
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.1
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.1
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,10 @@
1
- # Ref: https://packaging.python.org/en/latest/specifications/declaring-project-metadata/
2
- # and https://setuptools.pypa.io/en/latest/userguide/pyproject_config.html
3
1
  [build-system]
4
- requires = ["setuptools ~= 75.3.0", "wheel ~= 0.42"]
2
+ requires = ["setuptools >= 75.3.0, < 81.0.0", "wheel ~= 0.42"]
5
3
  build-backend = "setuptools.build_meta"
6
4
 
7
5
  [project]
8
6
  name = "python-semantic-release"
9
- version = "9.21.0"
7
+ version = "9.21.2"
10
8
  description = "Automatic Semantic Versioning for Python projects"
11
9
  requires-python = ">=3.8"
12
10
  license = { text = "MIT" }
@@ -19,21 +17,22 @@ classifiers = [
19
17
  "Programming Language :: Python :: 3.11",
20
18
  "Programming Language :: Python :: 3.12",
21
19
  "Programming Language :: Python :: 3.13",
20
+ "Programming Language :: Python :: 3.14",
22
21
  ]
23
22
  readme = "README.rst"
24
23
  authors = [{ name = "Rolf Erik Lekang", email = "me@rolflekang.com" }]
25
24
  dependencies = [
26
- "click ~= 8.0",
25
+ "click ~= 8.1.0",
27
26
  "click-option-group ~= 0.5",
28
27
  "gitpython ~= 3.0",
29
28
  "requests ~= 2.25",
30
29
  "jinja2 ~= 3.1",
31
- "python-gitlab ~= 4.0",
32
- "tomlkit ~= 0.11",
30
+ "python-gitlab >= 4.0.0, < 6.0.0",
31
+ "tomlkit ~= 0.13.0",
33
32
  "dotty-dict ~= 1.3",
34
33
  "importlib-resources ~= 6.0",
35
34
  "pydantic ~= 2.0",
36
- "rich ~= 13.0",
35
+ "rich ~= 14.0",
37
36
  "shellingham ~= 1.5",
38
37
  "Deprecated ~= 1.2", # Backport of deprecated decorator for python 3.8
39
38
  ]
@@ -52,7 +51,8 @@ repository = "http://github.com/python-semantic-release/python-semantic-release.
52
51
 
53
52
  [project.optional-dependencies]
54
53
  build = [
55
- "build ~= 1.2"
54
+ "build ~= 1.2",
55
+ "tomlkit ~= 0.13.0",
56
56
  ]
57
57
  docs = [
58
58
  "Sphinx ~= 6.0",
@@ -63,12 +63,12 @@ docs = [
63
63
  test = [
64
64
  "coverage[toml] ~= 7.0",
65
65
  "filelock ~= 3.15",
66
- "flatdict ~= 4.0",
66
+ "flatdict2 ~= 4.0",
67
67
  "freezegun ~= 1.5",
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",
@@ -91,6 +91,7 @@ mypy = [
91
91
  ]
92
92
 
93
93
 
94
+
94
95
  [tool.setuptools]
95
96
  include-package-data = true
96
97
 
@@ -197,7 +198,7 @@ module = "tests.*"
197
198
  disallow_untyped_defs = false
198
199
 
199
200
  [[tool.mypy.overrides]]
200
- module = "flatdict"
201
+ module = "flatdict2"
201
202
  ignore_missing_imports = true
202
203
 
203
204
  [[tool.mypy.overrides]]
@@ -412,7 +413,6 @@ build_command = """
412
413
  python -m build .
413
414
  """
414
415
  major_on_zero = true
415
- version_variables = ["src/semantic_release/__init__.py:__version__"]
416
416
  version_toml = ["pyproject.toml:project.version"]
417
417
 
418
418
  [tool.semantic_release.changelog]
@@ -434,7 +434,12 @@ mode = "update"
434
434
  template_dir = "config/release-templates"
435
435
 
436
436
  [tool.semantic_release.branches.main]
437
- match = "(main|master)"
437
+ match = "^(main|master)$"
438
+ prerelease = false
439
+ prerelease_token = "rc"
440
+
441
+ [tool.semantic_release.branches.maintenance]
442
+ match = "^releases/v9"
438
443
  prerelease = false
439
444
  prerelease_token = "rc"
440
445
 
@@ -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.2
4
4
  Summary: Automatic Semantic Versioning for Python projects
5
5
  Author-email: Rolf Erik Lekang <me@rolflekang.com>
6
6
  License: MIT
@@ -17,25 +17,27 @@ Classifier: Programming Language :: Python :: 3.10
17
17
  Classifier: Programming Language :: Python :: 3.11
18
18
  Classifier: Programming Language :: Python :: 3.12
19
19
  Classifier: Programming Language :: Python :: 3.13
20
+ Classifier: Programming Language :: Python :: 3.14
20
21
  Requires-Python: >=3.8
21
22
  Description-Content-Type: text/x-rst
22
23
  License-File: LICENSE
23
24
  License-File: AUTHORS.rst
24
- Requires-Dist: click~=8.0
25
+ Requires-Dist: click~=8.1.0
25
26
  Requires-Dist: click-option-group~=0.5
26
27
  Requires-Dist: gitpython~=3.0
27
28
  Requires-Dist: requests~=2.25
28
29
  Requires-Dist: jinja2~=3.1
29
- Requires-Dist: python-gitlab~=4.0
30
- Requires-Dist: tomlkit~=0.11
30
+ Requires-Dist: python-gitlab<6.0.0,>=4.0.0
31
+ Requires-Dist: tomlkit~=0.13.0
31
32
  Requires-Dist: dotty-dict~=1.3
32
33
  Requires-Dist: importlib-resources~=6.0
33
34
  Requires-Dist: pydantic~=2.0
34
- Requires-Dist: rich~=13.0
35
+ Requires-Dist: rich~=14.0
35
36
  Requires-Dist: shellingham~=1.5
36
37
  Requires-Dist: Deprecated~=1.2
37
38
  Provides-Extra: build
38
39
  Requires-Dist: build~=1.2; extra == "build"
40
+ Requires-Dist: tomlkit~=0.13.0; extra == "build"
39
41
  Provides-Extra: docs
40
42
  Requires-Dist: Sphinx~=6.0; extra == "docs"
41
43
  Requires-Dist: sphinxcontrib-apidoc==0.5.0; extra == "docs"
@@ -44,12 +46,12 @@ Requires-Dist: furo~=2024.1; extra == "docs"
44
46
  Provides-Extra: test
45
47
  Requires-Dist: coverage[toml]~=7.0; extra == "test"
46
48
  Requires-Dist: filelock~=3.15; extra == "test"
47
- Requires-Dist: flatdict~=4.0; extra == "test"
49
+ Requires-Dist: flatdict2~=4.0; extra == "test"
48
50
  Requires-Dist: freezegun~=1.5; extra == "test"
49
51
  Requires-Dist: pyyaml~=6.0; extra == "test"
50
52
  Requires-Dist: pytest~=8.3; extra == "test"
51
53
  Requires-Dist: pytest-clarity~=1.0; extra == "test"
52
- Requires-Dist: pytest-cov~=5.0; extra == "test"
54
+ Requires-Dist: pytest-cov<7.0.0,>=5.0.0; extra == "test"
53
55
  Requires-Dist: pytest-env~=1.0; extra == "test"
54
56
  Requires-Dist: pytest-lazy-fixtures~=1.1.1; extra == "test"
55
57
  Requires-Dist: pytest-mock~=3.0; extra == "test"
@@ -67,6 +69,7 @@ Requires-Dist: mypy==1.15.0; extra == "mypy"
67
69
  Requires-Dist: types-Deprecated~=1.2; extra == "mypy"
68
70
  Requires-Dist: types-requests~=2.32.0; extra == "mypy"
69
71
  Requires-Dist: types-pyyaml~=6.0; extra == "mypy"
72
+ Dynamic: license-file
70
73
 
71
74
  Python Semantic Release
72
75
  ***********************
@@ -1,19 +1,20 @@
1
- click~=8.0
1
+ click~=8.1.0
2
2
  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
7
- tomlkit~=0.11
6
+ python-gitlab<6.0.0,>=4.0.0
7
+ tomlkit~=0.13.0
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
 
15
15
  [build]
16
16
  build~=1.2
17
+ tomlkit~=0.13.0
17
18
 
18
19
  [dev]
19
20
  pre-commit~=3.5
@@ -35,12 +36,12 @@ types-pyyaml~=6.0
35
36
  [test]
36
37
  coverage[toml]~=7.0
37
38
  filelock~=3.15
38
- flatdict~=4.0
39
+ flatdict2~=4.0
39
40
  freezegun~=1.5
40
41
  pyyaml~=6.0
41
42
  pytest~=8.3
42
43
  pytest-clarity~=1.0
43
- pytest-cov~=5.0
44
+ pytest-cov<7.0.0,>=5.0.0
44
45
  pytest-env~=1.0
45
46
  pytest-lazy-fixtures~=1.1.1
46
47
  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",
@@ -10,7 +10,7 @@ from functools import lru_cache, reduce, wraps
10
10
  from pathlib import Path, PurePosixPath
11
11
  from re import IGNORECASE, compile as regexp
12
12
  from typing import TYPE_CHECKING, Any, Callable, NamedTuple, Sequence, TypeVar
13
- from urllib.parse import urlsplit
13
+ from urllib.parse import urlsplit, urlunsplit
14
14
 
15
15
  if TYPE_CHECKING: # pragma: no cover
16
16
  from re import Pattern
@@ -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
- log.debug("Parsing git url %r", url)
255
+ log.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 = [
@@ -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,
@@ -4,7 +4,7 @@ from typing import TYPE_CHECKING
4
4
 
5
5
  import pytest
6
6
  import tomlkit
7
- from flatdict import FlatDict
7
+ from flatdict2 import FlatDict
8
8
  from freezegun import freeze_time
9
9
 
10
10
  from semantic_release.cli.commands.main import main
@@ -4,7 +4,7 @@ from typing import TYPE_CHECKING
4
4
 
5
5
  import pytest
6
6
  import tomlkit
7
- from flatdict import FlatDict
7
+ from flatdict2 import FlatDict
8
8
  from freezegun import freeze_time
9
9
 
10
10
  from semantic_release.cli.commands.main import main
@@ -4,7 +4,7 @@ from typing import TYPE_CHECKING
4
4
 
5
5
  import pytest
6
6
  import tomlkit
7
- from flatdict import FlatDict
7
+ from flatdict2 import FlatDict
8
8
  from freezegun import freeze_time
9
9
 
10
10
  from semantic_release.cli.commands.main import main
@@ -4,7 +4,7 @@ from typing import TYPE_CHECKING
4
4
 
5
5
  import pytest
6
6
  import tomlkit
7
- from flatdict import FlatDict
7
+ from flatdict2 import FlatDict
8
8
  from freezegun import freeze_time
9
9
 
10
10
  from semantic_release.cli.commands.main import main
@@ -4,7 +4,7 @@ from typing import TYPE_CHECKING
4
4
 
5
5
  import pytest
6
6
  import tomlkit
7
- from flatdict import FlatDict
7
+ from flatdict2 import FlatDict
8
8
  from freezegun import freeze_time
9
9
 
10
10
  from semantic_release.cli.commands.main import main
@@ -4,7 +4,7 @@ from typing import TYPE_CHECKING
4
4
 
5
5
  import pytest
6
6
  import tomlkit
7
- from flatdict import FlatDict
7
+ from flatdict2 import FlatDict
8
8
  from freezegun import freeze_time
9
9
 
10
10
  from semantic_release.cli.commands.main import main
@@ -4,7 +4,7 @@ from typing import TYPE_CHECKING
4
4
 
5
5
  import pytest
6
6
  import tomlkit
7
- from flatdict import FlatDict
7
+ from flatdict2 import FlatDict
8
8
  from freezegun import freeze_time
9
9
 
10
10
  from semantic_release.cli.commands.main import main
@@ -4,7 +4,7 @@ from typing import TYPE_CHECKING
4
4
 
5
5
  import pytest
6
6
  import tomlkit
7
- from flatdict import FlatDict
7
+ from flatdict2 import FlatDict
8
8
  from freezegun import freeze_time
9
9
 
10
10
  from semantic_release.cli.commands.main import main
@@ -4,7 +4,7 @@ from typing import TYPE_CHECKING
4
4
 
5
5
  import pytest
6
6
  import tomlkit
7
- from flatdict import FlatDict
7
+ from flatdict2 import FlatDict
8
8
  from freezegun import freeze_time
9
9
 
10
10
  from semantic_release.cli.commands.main import main
@@ -4,7 +4,7 @@ from typing import TYPE_CHECKING
4
4
 
5
5
  import pytest
6
6
  import tomlkit
7
- from flatdict import FlatDict
7
+ from flatdict2 import FlatDict
8
8
  from freezegun import freeze_time
9
9
 
10
10
  from semantic_release.cli.commands.main import main
@@ -10,7 +10,7 @@ from unittest import mock
10
10
  import pytest
11
11
  import shellingham
12
12
  import tomlkit
13
- from flatdict import FlatDict
13
+ from flatdict2 import FlatDict
14
14
  from pytest_lazy_fixtures.lazy_fixture import lf as lazy_fixture
15
15
 
16
16
  from semantic_release.cli.commands.main import main
@@ -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(