python-semantic-release 9.15.0__tar.gz → 9.15.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 (200) hide show
  1. {python_semantic_release-9.15.0/src/python_semantic_release.egg-info → python_semantic_release-9.15.2}/PKG-INFO +1 -1
  2. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/docs/automatic-releases/github-actions.rst +5 -5
  3. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/pyproject.toml +1 -1
  4. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2/src/python_semantic_release.egg-info}/PKG-INFO +1 -1
  5. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/python_semantic_release.egg-info/SOURCES.txt +17 -0
  6. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/__init__.py +1 -1
  7. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/__main__.py +8 -0
  8. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/changelog/template.py +2 -2
  9. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/cli/commands/main.py +11 -2
  10. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/cli/commands/version.py +1 -0
  11. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/cli/config.py +8 -4
  12. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/commit_parser/angular.py +6 -2
  13. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/commit_parser/emoji.py +2 -2
  14. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/commit_parser/util.py +11 -1
  15. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/data/templates/angular/md/.components/changes.md.j2 +1 -1
  16. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/enums.py +30 -0
  17. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/gitproject.py +50 -20
  18. python_semantic_release-9.15.2/src/semantic_release/version/algorithm.py +382 -0
  19. python_semantic_release-9.15.2/tests/e2e/cmd_config/test_generate_config.py +161 -0
  20. python_semantic_release-9.15.2/tests/e2e/cmd_version/bump_version/conftest.py +135 -0
  21. python_semantic_release-9.15.2/tests/e2e/cmd_version/bump_version/git_flow/test_repo_1_channel.py +179 -0
  22. python_semantic_release-9.15.2/tests/e2e/cmd_version/bump_version/git_flow/test_repo_2_channels.py +179 -0
  23. python_semantic_release-9.15.2/tests/e2e/cmd_version/bump_version/git_flow/test_repo_3_channels.py +181 -0
  24. python_semantic_release-9.15.2/tests/e2e/cmd_version/bump_version/git_flow/test_repo_4_channels.py +179 -0
  25. python_semantic_release-9.15.2/tests/e2e/cmd_version/bump_version/github_flow/test_repo_1_channel.py +179 -0
  26. python_semantic_release-9.15.2/tests/e2e/cmd_version/bump_version/github_flow/test_repo_2_channels.py +179 -0
  27. python_semantic_release-9.15.2/tests/e2e/cmd_version/bump_version/trunk_based_dev/test_repo_trunk.py +179 -0
  28. python_semantic_release-9.15.2/tests/e2e/cmd_version/bump_version/trunk_based_dev/test_repo_trunk_dual_version_support.py +185 -0
  29. python_semantic_release-9.15.2/tests/e2e/cmd_version/bump_version/trunk_based_dev/test_repo_trunk_dual_version_support_w_prereleases.py +205 -0
  30. python_semantic_release-9.15.2/tests/e2e/cmd_version/bump_version/trunk_based_dev/test_repo_trunk_w_prereleases.py +199 -0
  31. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/fixtures/example_project.py +60 -10
  32. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/fixtures/git_repo.py +108 -21
  33. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/fixtures/repos/git_flow/repo_w_1_release_channel.py +1 -1
  34. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/fixtures/repos/git_flow/repo_w_2_release_channels.py +1 -1
  35. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/fixtures/repos/git_flow/repo_w_3_release_channels.py +1 -1
  36. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/fixtures/repos/git_flow/repo_w_4_release_channels.py +2 -1
  37. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/fixtures/repos/trunk_based_dev/__init__.py +2 -0
  38. python_semantic_release-9.15.2/tests/fixtures/repos/trunk_based_dev/repo_w_dual_version_support.py +460 -0
  39. python_semantic_release-9.15.2/tests/fixtures/repos/trunk_based_dev/repo_w_dual_version_support_w_prereleases.py +545 -0
  40. python_semantic_release-9.15.2/tests/unit/semantic_release/commit_parser/__init__.py +0 -0
  41. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/unit/semantic_release/commit_parser/test_angular.py +12 -2
  42. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/unit/semantic_release/commit_parser/test_emoji.py +12 -2
  43. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/unit/semantic_release/commit_parser/test_scipy.py +12 -2
  44. python_semantic_release-9.15.2/tests/unit/semantic_release/hvcs/__init__.py +0 -0
  45. python_semantic_release-9.15.2/tests/unit/semantic_release/hvcs/test_util.py +0 -0
  46. python_semantic_release-9.15.2/tests/unit/semantic_release/version/__init__.py +0 -0
  47. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/unit/semantic_release/version/test_algorithm.py +167 -186
  48. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/util.py +8 -3
  49. python_semantic_release-9.15.0/src/semantic_release/version/algorithm.py +0 -457
  50. python_semantic_release-9.15.0/tests/e2e/cmd_config/test_generate_config.py +0 -76
  51. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/AUTHORS.rst +0 -0
  52. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/LICENSE +0 -0
  53. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/MANIFEST.in +0 -0
  54. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/README.rst +0 -0
  55. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/docs/Makefile +0 -0
  56. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/docs/algorithm.rst +0 -0
  57. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/docs/automatic-releases/cronjobs.rst +0 -0
  58. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/docs/automatic-releases/index.rst +0 -0
  59. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/docs/automatic-releases/travis.rst +0 -0
  60. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/docs/changelog_templates.rst +0 -0
  61. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/docs/commands.rst +0 -0
  62. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/docs/commit_parsing.rst +0 -0
  63. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/docs/conf.py +0 -0
  64. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/docs/configuration.rst +0 -0
  65. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/docs/contributing.rst +0 -0
  66. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/docs/contributors.rst +0 -0
  67. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/docs/index.rst +0 -0
  68. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/docs/make.bat +0 -0
  69. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/docs/migrating_from_v7.rst +0 -0
  70. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/docs/multibranch_releases.rst +0 -0
  71. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/docs/strict_mode.rst +0 -0
  72. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/docs/troubleshooting.rst +0 -0
  73. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/setup.cfg +0 -0
  74. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/python_semantic_release.egg-info/dependency_links.txt +0 -0
  75. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/python_semantic_release.egg-info/entry_points.txt +0 -0
  76. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/python_semantic_release.egg-info/requires.txt +0 -0
  77. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/python_semantic_release.egg-info/top_level.txt +0 -0
  78. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/changelog/__init__.py +0 -0
  79. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/changelog/context.py +0 -0
  80. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/changelog/release_history.py +0 -0
  81. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/cli/__init__.py +0 -0
  82. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/cli/changelog_writer.py +0 -0
  83. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/cli/cli_context.py +0 -0
  84. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/cli/commands/__init__.py +0 -0
  85. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/cli/commands/changelog.py +0 -0
  86. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/cli/commands/generate_config.py +0 -0
  87. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/cli/commands/publish.py +0 -0
  88. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/cli/const.py +0 -0
  89. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/cli/github_actions_output.py +0 -0
  90. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/cli/masking_filter.py +0 -0
  91. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/cli/util.py +0 -0
  92. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/commit_parser/__init__.py +0 -0
  93. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/commit_parser/_base.py +0 -0
  94. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/commit_parser/scipy.py +0 -0
  95. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/commit_parser/tag.py +0 -0
  96. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/commit_parser/token.py +0 -0
  97. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/const.py +0 -0
  98. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/data/templates/angular/md/.components/changelog_header.md.j2 +0 -0
  99. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/data/templates/angular/md/.components/changelog_init.md.j2 +0 -0
  100. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/data/templates/angular/md/.components/changelog_update.md.j2 +0 -0
  101. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/data/templates/angular/md/.components/first_release.md.j2 +0 -0
  102. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/data/templates/angular/md/.components/macros.md.j2 +0 -0
  103. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/data/templates/angular/md/.components/unreleased_changes.md.j2 +0 -0
  104. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/data/templates/angular/md/.components/versioned_changes.md.j2 +0 -0
  105. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/data/templates/angular/md/.release_notes.md.j2 +0 -0
  106. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/data/templates/angular/md/CHANGELOG.md.j2 +0 -0
  107. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/data/templates/angular/rst/.components/changelog_header.rst.j2 +0 -0
  108. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/data/templates/angular/rst/.components/changelog_init.rst.j2 +0 -0
  109. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/data/templates/angular/rst/.components/changelog_update.rst.j2 +0 -0
  110. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/data/templates/angular/rst/.components/changes.rst.j2 +0 -0
  111. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/data/templates/angular/rst/.components/first_release.rst.j2 +0 -0
  112. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/data/templates/angular/rst/.components/macros.rst.j2 +0 -0
  113. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/data/templates/angular/rst/.components/unreleased_changes.rst.j2 +0 -0
  114. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/data/templates/angular/rst/.components/versioned_changes.rst.j2 +0 -0
  115. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/data/templates/angular/rst/CHANGELOG.rst.j2 +0 -0
  116. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/errors.py +0 -0
  117. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/globals.py +0 -0
  118. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/helpers.py +0 -0
  119. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/hvcs/__init__.py +0 -0
  120. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/hvcs/_base.py +0 -0
  121. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/hvcs/bitbucket.py +0 -0
  122. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/hvcs/gitea.py +0 -0
  123. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/hvcs/github.py +0 -0
  124. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/hvcs/gitlab.py +0 -0
  125. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/hvcs/remote_hvcs_base.py +0 -0
  126. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/hvcs/token_auth.py +0 -0
  127. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/hvcs/util.py +0 -0
  128. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/py.typed +0 -0
  129. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/version/__init__.py +0 -0
  130. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/version/declaration.py +0 -0
  131. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/version/translator.py +0 -0
  132. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/src/semantic_release/version/version.py +0 -0
  133. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/__init__.py +0 -0
  134. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/conftest.py +0 -0
  135. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/const.py +0 -0
  136. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/e2e/__init__.py +0 -0
  137. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/e2e/cmd_changelog/__init__.py +0 -0
  138. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/e2e/cmd_changelog/test_changelog.py +0 -0
  139. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/e2e/cmd_changelog/test_changelog_custom_parser.py +0 -0
  140. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/e2e/cmd_config/__init__.py +0 -0
  141. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/e2e/cmd_publish/__init__.py +0 -0
  142. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/e2e/cmd_publish/test_publish.py +0 -0
  143. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/e2e/cmd_version/__init__.py +0 -0
  144. {python_semantic_release-9.15.0/tests/unit → python_semantic_release-9.15.2/tests/e2e/cmd_version/bump_version}/__init__.py +0 -0
  145. {python_semantic_release-9.15.0/tests/unit/semantic_release → python_semantic_release-9.15.2/tests/e2e/cmd_version/bump_version/git_flow}/__init__.py +0 -0
  146. {python_semantic_release-9.15.0/tests/unit/semantic_release/changelog → python_semantic_release-9.15.2/tests/e2e/cmd_version/bump_version/github_flow}/__init__.py +0 -0
  147. {python_semantic_release-9.15.0/tests/unit/semantic_release/cli → python_semantic_release-9.15.2/tests/e2e/cmd_version/bump_version/trunk_based_dev}/__init__.py +0 -0
  148. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/e2e/cmd_version/test_version.py +0 -0
  149. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/e2e/cmd_version/test_version_build.py +0 -0
  150. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/e2e/cmd_version/test_version_bump.py +0 -0
  151. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/e2e/cmd_version/test_version_changelog.py +0 -0
  152. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/e2e/cmd_version/test_version_github_actions.py +0 -0
  153. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/e2e/cmd_version/test_version_print.py +0 -0
  154. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/e2e/cmd_version/test_version_release_notes.py +0 -0
  155. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/e2e/cmd_version/test_version_stamp.py +0 -0
  156. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/e2e/cmd_version/test_version_strict.py +0 -0
  157. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/e2e/conftest.py +0 -0
  158. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/e2e/test_help.py +0 -0
  159. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/e2e/test_main.py +0 -0
  160. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/fixtures/__init__.py +0 -0
  161. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/fixtures/commit_parsers.py +0 -0
  162. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/fixtures/repos/__init__.py +0 -0
  163. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/fixtures/repos/git_flow/__init__.py +0 -0
  164. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/fixtures/repos/github_flow/__init__.py +0 -0
  165. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/fixtures/repos/github_flow/repo_w_default_release.py +0 -0
  166. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/fixtures/repos/github_flow/repo_w_release_channels.py +0 -0
  167. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/fixtures/repos/repo_initial_commit.py +0 -0
  168. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/fixtures/repos/trunk_based_dev/repo_w_no_tags.py +0 -0
  169. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/fixtures/repos/trunk_based_dev/repo_w_prereleases.py +0 -0
  170. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/fixtures/repos/trunk_based_dev/repo_w_tags.py +0 -0
  171. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/fixtures/scipy.py +0 -0
  172. {python_semantic_release-9.15.0/tests/unit/semantic_release/commit_parser → python_semantic_release-9.15.2/tests/unit}/__init__.py +0 -0
  173. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/unit/conftest.py +0 -0
  174. {python_semantic_release-9.15.0/tests/unit/semantic_release/hvcs → python_semantic_release-9.15.2/tests/unit/semantic_release}/__init__.py +0 -0
  175. {python_semantic_release-9.15.0/tests/unit/semantic_release/version → python_semantic_release-9.15.2/tests/unit/semantic_release/changelog}/__init__.py +0 -0
  176. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/unit/semantic_release/changelog/conftest.py +0 -0
  177. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/unit/semantic_release/changelog/test_changelog_context.py +0 -0
  178. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/unit/semantic_release/changelog/test_default_changelog.py +0 -0
  179. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/unit/semantic_release/changelog/test_release_history.py +0 -0
  180. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/unit/semantic_release/changelog/test_release_notes.py +0 -0
  181. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/unit/semantic_release/changelog/test_template.py +0 -0
  182. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/unit/semantic_release/changelog/test_template_render.py +0 -0
  183. /python_semantic_release-9.15.0/tests/unit/semantic_release/hvcs/test_util.py → /python_semantic_release-9.15.2/tests/unit/semantic_release/cli/__init__.py +0 -0
  184. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/unit/semantic_release/cli/test_config.py +0 -0
  185. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/unit/semantic_release/cli/test_github_actions_output.py +0 -0
  186. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/unit/semantic_release/cli/test_masking_filter.py +0 -0
  187. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/unit/semantic_release/cli/test_util.py +0 -0
  188. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/unit/semantic_release/cli/test_version.py +0 -0
  189. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/unit/semantic_release/commit_parser/test_parsed_commit.py +0 -0
  190. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/unit/semantic_release/commit_parser/test_util.py +0 -0
  191. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/unit/semantic_release/hvcs/test__base.py +0 -0
  192. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/unit/semantic_release/hvcs/test_bitbucket.py +0 -0
  193. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/unit/semantic_release/hvcs/test_gitea.py +0 -0
  194. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/unit/semantic_release/hvcs/test_github.py +0 -0
  195. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/unit/semantic_release/hvcs/test_gitlab.py +0 -0
  196. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/unit/semantic_release/hvcs/test_token_auth.py +0 -0
  197. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/unit/semantic_release/test_helpers.py +0 -0
  198. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/unit/semantic_release/version/test_declaration.py +0 -0
  199. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/unit/semantic_release/version/test_translator.py +0 -0
  200. {python_semantic_release-9.15.0 → python_semantic_release-9.15.2}/tests/unit/semantic_release/version/test_version.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: python-semantic-release
3
- Version: 9.15.0
3
+ Version: 9.15.2
4
4
  Summary: Automatic Semantic Versioning for Python projects
5
5
  Author-email: Rolf Erik Lekang <me@rolflekang.com>
6
6
  License: MIT
@@ -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.15.0
340
+ - uses: python-semantic-release/python-semantic-release@v9.15.2
341
341
  with:
342
342
  root_options: "-vv --noop"
343
343
 
@@ -684,7 +684,7 @@ to the GitHub Release Assets as well.
684
684
  - name: Action | Semantic Version Release
685
685
  id: release
686
686
  # Adjust tag with desired version if applicable.
687
- uses: python-semantic-release/python-semantic-release@v9.15.0
687
+ uses: python-semantic-release/python-semantic-release@v9.15.2
688
688
  with:
689
689
  github_token: ${{ secrets.GITHUB_TOKEN }}
690
690
  git_committer_name: "github-actions"
@@ -744,7 +744,7 @@ The equivalent GitHub Action configuration would be:
744
744
 
745
745
  - name: Action | Semantic Version Release
746
746
  # Adjust tag with desired version if applicable.
747
- uses: python-semantic-release/python-semantic-release@v9.15.0
747
+ uses: python-semantic-release/python-semantic-release@v9.15.2
748
748
  with:
749
749
  github_token: ${{ secrets.GITHUB_TOKEN }}
750
750
  force: patch
@@ -772,13 +772,13 @@ Publish Action.
772
772
  .. code:: yaml
773
773
 
774
774
  - name: Release Project 1
775
- uses: python-semantic-release/python-semantic-release@v9.15.0
775
+ uses: python-semantic-release/python-semantic-release@v9.15.2
776
776
  with:
777
777
  directory: ./project1
778
778
  github_token: ${{ secrets.GITHUB_TOKEN }}
779
779
 
780
780
  - name: Release Project 2
781
- uses: python-semantic-release/python-semantic-release@v9.15.0
781
+ uses: python-semantic-release/python-semantic-release@v9.15.2
782
782
  with:
783
783
  directory: ./project2
784
784
  github_token: ${{ secrets.GITHUB_TOKEN }}
@@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta"
6
6
 
7
7
  [project]
8
8
  name = "python-semantic-release"
9
- version = "9.15.0"
9
+ version = "9.15.2"
10
10
  description = "Automatic Semantic Versioning for Python projects"
11
11
  requires-python = ">=3.8"
12
12
  license = { text = "MIT" }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: python-semantic-release
3
- Version: 9.15.0
3
+ Version: 9.15.2
4
4
  Summary: Automatic Semantic Versioning for Python projects
5
5
  Author-email: Rolf Erik Lekang <me@rolflekang.com>
6
6
  License: MIT
@@ -121,6 +121,21 @@ tests/e2e/cmd_version/test_version_print.py
121
121
  tests/e2e/cmd_version/test_version_release_notes.py
122
122
  tests/e2e/cmd_version/test_version_stamp.py
123
123
  tests/e2e/cmd_version/test_version_strict.py
124
+ tests/e2e/cmd_version/bump_version/__init__.py
125
+ tests/e2e/cmd_version/bump_version/conftest.py
126
+ tests/e2e/cmd_version/bump_version/git_flow/__init__.py
127
+ tests/e2e/cmd_version/bump_version/git_flow/test_repo_1_channel.py
128
+ tests/e2e/cmd_version/bump_version/git_flow/test_repo_2_channels.py
129
+ tests/e2e/cmd_version/bump_version/git_flow/test_repo_3_channels.py
130
+ tests/e2e/cmd_version/bump_version/git_flow/test_repo_4_channels.py
131
+ tests/e2e/cmd_version/bump_version/github_flow/__init__.py
132
+ tests/e2e/cmd_version/bump_version/github_flow/test_repo_1_channel.py
133
+ tests/e2e/cmd_version/bump_version/github_flow/test_repo_2_channels.py
134
+ tests/e2e/cmd_version/bump_version/trunk_based_dev/__init__.py
135
+ tests/e2e/cmd_version/bump_version/trunk_based_dev/test_repo_trunk.py
136
+ tests/e2e/cmd_version/bump_version/trunk_based_dev/test_repo_trunk_dual_version_support.py
137
+ tests/e2e/cmd_version/bump_version/trunk_based_dev/test_repo_trunk_dual_version_support_w_prereleases.py
138
+ tests/e2e/cmd_version/bump_version/trunk_based_dev/test_repo_trunk_w_prereleases.py
124
139
  tests/fixtures/__init__.py
125
140
  tests/fixtures/commit_parsers.py
126
141
  tests/fixtures/example_project.py
@@ -137,6 +152,8 @@ tests/fixtures/repos/github_flow/__init__.py
137
152
  tests/fixtures/repos/github_flow/repo_w_default_release.py
138
153
  tests/fixtures/repos/github_flow/repo_w_release_channels.py
139
154
  tests/fixtures/repos/trunk_based_dev/__init__.py
155
+ tests/fixtures/repos/trunk_based_dev/repo_w_dual_version_support.py
156
+ tests/fixtures/repos/trunk_based_dev/repo_w_dual_version_support_w_prereleases.py
140
157
  tests/fixtures/repos/trunk_based_dev/repo_w_no_tags.py
141
158
  tests/fixtures/repos/trunk_based_dev/repo_w_prereleases.py
142
159
  tests/fixtures/repos/trunk_based_dev/repo_w_tags.py
@@ -24,7 +24,7 @@ from semantic_release.version import (
24
24
  tags_and_versions,
25
25
  )
26
26
 
27
- __version__ = "9.15.0"
27
+ __version__ = "9.15.2"
28
28
 
29
29
  __all__ = [
30
30
  "CommitParser",
@@ -34,7 +34,15 @@ def main() -> None:
34
34
  ),
35
35
  file=sys.stderr,
36
36
  )
37
+
37
38
  print(f"::ERROR:: {err}", file=sys.stderr)
39
+
40
+ if not globals.debug:
41
+ print(
42
+ "Run semantic-release in very verbose mode (-vv) to see the full traceback.",
43
+ file=sys.stderr,
44
+ )
45
+
38
46
  sys.exit(1)
39
47
 
40
48
 
@@ -124,9 +124,9 @@ def recursive_render(
124
124
  # is used for inserting into a current changelog. When using stream rendering
125
125
  # of the same file, it always came back empty
126
126
  log.debug("rendering %s to %s", src_file_path, output_file_path)
127
- rendered_file = environment.get_template(src_file_path).render()
127
+ rendered_file = environment.get_template(src_file_path).render().rstrip()
128
128
  with open(output_file_path, "w", encoding="utf-8") as output_file:
129
- output_file.write(rendered_file)
129
+ output_file.write(f"{rendered_file}\n")
130
130
 
131
131
  rendered_paths.append(output_file_path)
132
132
  else:
@@ -15,6 +15,7 @@ from semantic_release.cli.cli_context import CliContextObj
15
15
  from semantic_release.cli.config import GlobalCommandLineOptions
16
16
  from semantic_release.cli.const import DEFAULT_CONFIG_FILE
17
17
  from semantic_release.cli.util import rprint
18
+ from semantic_release.enums import SemanticReleaseLogLevels
18
19
 
19
20
  # if TYPE_CHECKING:
20
21
  # pass
@@ -108,7 +109,15 @@ def main(
108
109
  """
109
110
  console = Console(stderr=True)
110
111
 
111
- log_level = [logging.WARNING, logging.INFO, logging.DEBUG][verbosity]
112
+ log_levels = [
113
+ SemanticReleaseLogLevels.WARNING,
114
+ SemanticReleaseLogLevels.INFO,
115
+ SemanticReleaseLogLevels.DEBUG,
116
+ SemanticReleaseLogLevels.SILLY,
117
+ ]
118
+
119
+ log_level = log_levels[verbosity]
120
+
112
121
  logging.basicConfig(
113
122
  level=log_level,
114
123
  format=FORMAT,
@@ -123,7 +132,7 @@ def main(
123
132
  logger = logging.getLogger(__name__)
124
133
  logger.debug("logging level set to: %s", logging.getLevelName(log_level))
125
134
 
126
- if log_level == logging.DEBUG:
135
+ if log_level <= logging.DEBUG:
127
136
  globals.debug = True
128
137
 
129
138
  if noop:
@@ -653,6 +653,7 @@ def version( # noqa: C901
653
653
  project.git_tag(
654
654
  tag_name=new_version.as_tag(),
655
655
  message=new_version.as_tag(),
656
+ isotimestamp=commit_date.isoformat(),
656
657
  noop=opts.noop,
657
658
  )
658
659
 
@@ -360,9 +360,12 @@ class RawConfig(BaseModel):
360
360
  try:
361
361
  # Check for repository & walk up parent directories
362
362
  with Repo(str(dir_path), search_parent_directories=True) as git_repo:
363
- found_path = Path(
364
- git_repo.working_tree_dir or git_repo.working_dir
365
- ).absolute()
363
+ found_path = (
364
+ Path(git_repo.working_tree_dir or git_repo.working_dir)
365
+ .expanduser()
366
+ .absolute()
367
+ )
368
+
366
369
  except InvalidGitRepositoryError as err:
367
370
  raise InvalidGitRepositoryError("No valid git repository found!") from err
368
371
 
@@ -370,7 +373,8 @@ class RawConfig(BaseModel):
370
373
  logging.warning(
371
374
  "Found .git/ in higher parent directory rather than provided in configuration."
372
375
  )
373
- return found_path
376
+
377
+ return found_path.resolve()
374
378
 
375
379
  @field_validator("commit_parser", mode="after")
376
380
  @classmethod
@@ -21,7 +21,11 @@ from semantic_release.commit_parser.token import (
21
21
  ParseError,
22
22
  ParseResult,
23
23
  )
24
- from semantic_release.commit_parser.util import breaking_re, parse_paragraphs
24
+ from semantic_release.commit_parser.util import (
25
+ breaking_re,
26
+ parse_paragraphs,
27
+ sort_numerically,
28
+ )
25
29
  from semantic_release.enums import LevelBump
26
30
  from semantic_release.errors import InvalidParserOptions
27
31
 
@@ -195,7 +199,7 @@ class AngularCommitParser(CommitParser[ParseResult, AngularParserOptions]):
195
199
  predicate.split(","),
196
200
  )
197
201
  )
198
- accumulator["linked_issues"] = sorted(
202
+ accumulator["linked_issues"] = sort_numerically(
199
203
  set(accumulator["linked_issues"]).union(new_issue_refs)
200
204
  )
201
205
  # TODO: breaking change v10, removes resolution footers from descriptions
@@ -18,7 +18,7 @@ from semantic_release.commit_parser.token import (
18
18
  ParsedMessageResult,
19
19
  ParseResult,
20
20
  )
21
- from semantic_release.commit_parser.util import parse_paragraphs
21
+ from semantic_release.commit_parser.util import parse_paragraphs, sort_numerically
22
22
  from semantic_release.enums import LevelBump
23
23
  from semantic_release.errors import InvalidParserOptions
24
24
 
@@ -186,7 +186,7 @@ class EmojiCommitParser(CommitParser[ParseResult, EmojiParserOptions]):
186
186
  predicate.split(","),
187
187
  )
188
188
  )
189
- accumulator["linked_issues"] = sorted(
189
+ accumulator["linked_issues"] = sort_numerically(
190
190
  set(accumulator["linked_issues"]).union(new_issue_refs)
191
191
  )
192
192
  # TODO: breaking change v10, removes resolution footers from descriptions
@@ -6,28 +6,34 @@ from typing import TYPE_CHECKING
6
6
 
7
7
  if TYPE_CHECKING: # pragma: no cover
8
8
  from re import Pattern
9
- from typing import TypedDict
9
+ from typing import Sequence, TypedDict
10
10
 
11
11
  class RegexReplaceDef(TypedDict):
12
12
  pattern: Pattern
13
13
  repl: str
14
14
 
15
15
 
16
+ number_pattern = regexp(r"(\d+)")
17
+
16
18
  breaking_re = regexp(r"BREAKING[ -]CHANGE:\s?(.*)")
19
+
17
20
  un_word_wrap: RegexReplaceDef = {
18
21
  # Match a line ending where the next line is not indented, or a bullet
19
22
  "pattern": regexp(r"((?<!-)\n(?![\s*-]))"),
20
23
  "repl": r" ", # Replace with a space
21
24
  }
25
+
22
26
  un_word_wrap_hyphen: RegexReplaceDef = {
23
27
  "pattern": regexp(r"((?<=\w)-\n(?=\w))"),
24
28
  "repl": r"-", # Replace with single hyphen
25
29
  }
30
+
26
31
  trim_line_endings: RegexReplaceDef = {
27
32
  # Match line endings with optional whitespace
28
33
  "pattern": regexp(r"[\r\t\f\v ]*\r?\n"),
29
34
  "repl": "\n", # remove the optional whitespace & remove windows newlines
30
35
  }
36
+
31
37
  spread_out_git_footers: RegexReplaceDef = {
32
38
  # Match a git footer line, and add an extra newline after it
33
39
  # only be flexible enough for a double space indent (otherwise its probably on purpose)
@@ -65,3 +71,7 @@ def parse_paragraphs(text: str) -> list[str]:
65
71
  ],
66
72
  )
67
73
  )
74
+
75
+
76
+ def sort_numerically(iterable: Sequence[str] | set[str]) -> list[str]:
77
+ return sorted(iterable, key=lambda x: int((number_pattern.search(x) or [-1])[0]))
@@ -69,7 +69,7 @@ EXAMPLE:
69
69
  #}{% if breaking_commits | length > 0
70
70
  %}{# PREPROCESS COMMITS
71
71
  #}{% set brk_ns = namespace(commits=breaking_commits)
72
- %}{{ apply_alphabetical_ordering_by_descriptions(brk_ns) | default("", true)
72
+ %}{{ apply_alphabetical_ordering_by_brk_descriptions(brk_ns) | default("", true)
73
73
  }}{#
74
74
  #}{% set brking_descriptions = []
75
75
  %}{#
@@ -1,5 +1,6 @@
1
1
  from __future__ import annotations
2
2
 
3
+ import logging
3
4
  from enum import IntEnum, unique
4
5
 
5
6
 
@@ -37,3 +38,32 @@ class LevelBump(IntEnum):
37
38
  >>> LevelBump.from_string("minor") == LevelBump.MINOR
38
39
  """
39
40
  return cls[val.upper().replace("-", "_")]
41
+
42
+
43
+ class SemanticReleaseLogLevels(IntEnum):
44
+ """IntEnum representing the log levels used by semantic-release."""
45
+
46
+ FATAL = logging.FATAL
47
+ CRITICAL = logging.CRITICAL
48
+ ERROR = logging.ERROR
49
+ WARNING = logging.WARNING
50
+ INFO = logging.INFO
51
+ DEBUG = logging.DEBUG
52
+ SILLY = 5
53
+
54
+ def __str__(self) -> str:
55
+ """
56
+ Return the level name rather than 'SemanticReleaseLogLevels.<level>'
57
+ E.g.
58
+ >>> str(SemanticReleaseLogLevels.DEBUG)
59
+ 'DEBUG'
60
+ >>> str(SemanticReleaseLogLevels.CRITICAL)
61
+ 'CRITICAL'
62
+ """
63
+ return self.name.upper()
64
+
65
+
66
+ logging.addLevelName(
67
+ SemanticReleaseLogLevels.SILLY,
68
+ str(SemanticReleaseLogLevels.SILLY),
69
+ )
@@ -3,6 +3,7 @@
3
3
  from __future__ import annotations
4
4
 
5
5
  from contextlib import nullcontext
6
+ from datetime import datetime
6
7
  from logging import getLogger
7
8
  from pathlib import Path
8
9
  from typing import TYPE_CHECKING
@@ -48,7 +49,9 @@ class GitProject:
48
49
  return self._logger
49
50
 
50
51
  def _get_custom_environment(
51
- self, repo: Repo
52
+ self,
53
+ repo: Repo,
54
+ custom_vars: dict[str, str] | None = None,
52
55
  ) -> nullcontext[None] | _GeneratorContextManager[None]:
53
56
  """
54
57
  git.custom_environment is a context manager but
@@ -56,15 +59,26 @@ class GitProject:
56
59
  we need to throw it away and re-create it in
57
60
  order to use it again
58
61
  """
62
+ author_vars = (
63
+ {
64
+ "GIT_AUTHOR_NAME": self._commit_author.name,
65
+ "GIT_AUTHOR_EMAIL": self._commit_author.email,
66
+ "GIT_COMMITTER_NAME": self._commit_author.name,
67
+ "GIT_COMMITTER_EMAIL": self._commit_author.email,
68
+ }
69
+ if self._commit_author
70
+ else {}
71
+ )
72
+
73
+ custom_env_vars = {
74
+ **author_vars,
75
+ **(custom_vars or {}),
76
+ }
77
+
59
78
  return (
60
79
  nullcontext()
61
- if not self._commit_author
62
- else repo.git.custom_environment(
63
- GIT_AUTHOR_NAME=self._commit_author.name,
64
- GIT_AUTHOR_EMAIL=self._commit_author.email,
65
- GIT_COMMITTER_NAME=self._commit_author.name,
66
- GIT_COMMITTER_EMAIL=self._commit_author.email,
67
- )
80
+ if not custom_env_vars
81
+ else repo.git.custom_environment(**custom_env_vars)
68
82
  )
69
83
 
70
84
  def is_dirty(self) -> bool:
@@ -182,19 +196,32 @@ class GitProject:
182
196
  self.logger.exception(str(err))
183
197
  raise GitCommitError("Failed to commit changes") from err
184
198
 
185
- def git_tag(self, tag_name: str, message: str, noop: bool = False) -> None:
199
+ def git_tag(
200
+ self, tag_name: str, message: str, isotimestamp: str, noop: bool = False
201
+ ) -> None:
202
+ try:
203
+ datetime.fromisoformat(isotimestamp)
204
+ except ValueError as err:
205
+ raise ValueError("Invalid timestamp format") from err
206
+
186
207
  if noop:
187
- command = (
188
- f"""\
189
- GIT_AUTHOR_NAME={self._commit_author.name} \\
190
- GIT_AUTHOR_EMAIL={self._commit_author.email} \\
191
- GIT_COMMITTER_NAME={self._commit_author.name} \\
192
- GIT_COMMITTER_EMAIL={self._commit_author.email} \\
193
- """
194
- if self._commit_author
195
- else ""
208
+ command = str.join(
209
+ " ",
210
+ [
211
+ f"GIT_COMMITTER_DATE={isotimestamp}",
212
+ *(
213
+ [
214
+ f"GIT_AUTHOR_NAME={self._commit_author.name}",
215
+ f"GIT_AUTHOR_EMAIL={self._commit_author.email}",
216
+ f"GIT_COMMITTER_NAME={self._commit_author.name}",
217
+ f"GIT_COMMITTER_EMAIL={self._commit_author.email}",
218
+ ]
219
+ if self._commit_author
220
+ else [""]
221
+ ),
222
+ f"git tag -a {tag_name} -m '{message}'",
223
+ ],
196
224
  )
197
- command += f"git tag -a {tag_name} -m '{message}'"
198
225
 
199
226
  noop_report(
200
227
  indented(
@@ -206,7 +233,10 @@ class GitProject:
206
233
  )
207
234
  return
208
235
 
209
- with Repo(str(self.project_root)) as repo, self._get_custom_environment(repo):
236
+ with Repo(str(self.project_root)) as repo, self._get_custom_environment(
237
+ repo,
238
+ {"GIT_COMMITTER_DATE": isotimestamp},
239
+ ):
210
240
  try:
211
241
  repo.git.tag("-a", tag_name, m=message)
212
242
  except GitCommandError as err: