python-semantic-release 10.5.2__tar.gz → 10.5.3__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 (238) hide show
  1. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/PKG-INFO +1 -1
  2. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/docs/configuration/automatic-releases/github-actions.rst +7 -7
  3. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/pyproject.toml +2 -1
  4. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/cli/commands/version.py +1 -0
  5. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/commit_parser/conventional/options_monorepo.py +26 -17
  6. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/gitproject.py +46 -2
  7. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/fixtures/git_repo.py +16 -36
  8. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/fixtures/monorepos/example_monorepo.py +42 -2
  9. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/fixtures/monorepos/github_flow/monorepo_w_default_release.py +21 -8
  10. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/fixtures/monorepos/github_flow/monorepo_w_release_channels.py +15 -10
  11. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/fixtures/monorepos/trunk_based_dev/monorepo_w_tags.py +23 -7
  12. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/semantic_release/test_gitproject.py +20 -0
  13. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/LICENSE +0 -0
  14. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/MANIFEST.in +0 -0
  15. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/README.rst +0 -0
  16. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/docs/Makefile +0 -0
  17. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/docs/api/commands.rst +0 -0
  18. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/docs/concepts/changelog_templates.rst +0 -0
  19. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/docs/concepts/commit_parsing.rst +0 -0
  20. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/docs/concepts/getting_started.rst +0 -0
  21. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/docs/concepts/index.rst +0 -0
  22. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/docs/concepts/installation.rst +0 -0
  23. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/docs/concepts/multibranch_releases.rst +0 -0
  24. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/docs/concepts/strict_mode.rst +0 -0
  25. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/docs/conf.py +0 -0
  26. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/docs/configuration/automatic-releases/cronjobs.rst +0 -0
  27. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/docs/configuration/automatic-releases/index.rst +0 -0
  28. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/docs/configuration/automatic-releases/travis.rst +0 -0
  29. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/docs/configuration/configuration-guides/index.rst +0 -0
  30. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/docs/configuration/configuration-guides/monorepos-ex-easy-before-release.png +0 -0
  31. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/docs/configuration/configuration-guides/monorepos-ex-easy-post-release.png +0 -0
  32. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/docs/configuration/configuration-guides/monorepos.rst +0 -0
  33. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/docs/configuration/configuration-guides/uv_integration.rst +0 -0
  34. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/docs/configuration/configuration.rst +0 -0
  35. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/docs/configuration/index.rst +0 -0
  36. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/docs/contributing/contributing_guide.rst +0 -0
  37. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/docs/contributing/index.rst +0 -0
  38. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/docs/index.rst +0 -0
  39. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/docs/make.bat +0 -0
  40. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/docs/misc/psr_changelog.rst +0 -0
  41. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/docs/misc/troubleshooting.rst +0 -0
  42. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/docs/upgrading/08-upgrade.rst +0 -0
  43. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/docs/upgrading/09-upgrade.rst +0 -0
  44. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/docs/upgrading/10-upgrade.rst +0 -0
  45. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/docs/upgrading/index.rst +0 -0
  46. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/setup.cfg +0 -0
  47. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/python_semantic_release.egg-info/SOURCES.txt +0 -0
  48. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/__init__.py +0 -0
  49. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/__main__.py +0 -0
  50. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/changelog/__init__.py +0 -0
  51. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/changelog/context.py +0 -0
  52. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/changelog/release_history.py +0 -0
  53. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/changelog/template.py +0 -0
  54. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/cli/__init__.py +0 -0
  55. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/cli/changelog_writer.py +0 -0
  56. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/cli/cli_context.py +0 -0
  57. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/cli/commands/__init__.py +0 -0
  58. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/cli/commands/changelog.py +0 -0
  59. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/cli/commands/generate_config.py +0 -0
  60. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/cli/commands/main.py +0 -0
  61. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/cli/commands/publish.py +0 -0
  62. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/cli/config.py +0 -0
  63. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/cli/const.py +0 -0
  64. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/cli/github_actions_output.py +0 -0
  65. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/cli/masking_filter.py +0 -0
  66. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/cli/util.py +0 -0
  67. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/commit_parser/__init__.py +0 -0
  68. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/commit_parser/_base.py +0 -0
  69. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/commit_parser/angular.py +0 -0
  70. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/commit_parser/conventional/__init__.py +0 -0
  71. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/commit_parser/conventional/options.py +0 -0
  72. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/commit_parser/conventional/parser.py +0 -0
  73. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/commit_parser/conventional/parser_monorepo.py +0 -0
  74. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/commit_parser/emoji.py +0 -0
  75. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/commit_parser/scipy.py +0 -0
  76. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/commit_parser/tag.py +0 -0
  77. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/commit_parser/token.py +0 -0
  78. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/commit_parser/util.py +0 -0
  79. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/const.py +0 -0
  80. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/data/templates/conventional/md/.components/changelog_header.md.j2 +0 -0
  81. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/data/templates/conventional/md/.components/changelog_init.md.j2 +0 -0
  82. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/data/templates/conventional/md/.components/changelog_update.md.j2 +0 -0
  83. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/data/templates/conventional/md/.components/changes.md.j2 +0 -0
  84. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/data/templates/conventional/md/.components/first_release.md.j2 +0 -0
  85. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/data/templates/conventional/md/.components/macros.md.j2 +0 -0
  86. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/data/templates/conventional/md/.components/unreleased_changes.md.j2 +0 -0
  87. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/data/templates/conventional/md/.components/versioned_changes.md.j2 +0 -0
  88. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/data/templates/conventional/md/.release_notes.md.j2 +0 -0
  89. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/data/templates/conventional/md/CHANGELOG.md.j2 +0 -0
  90. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/data/templates/conventional/rst/.components/changelog_header.rst.j2 +0 -0
  91. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/data/templates/conventional/rst/.components/changelog_init.rst.j2 +0 -0
  92. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/data/templates/conventional/rst/.components/changelog_update.rst.j2 +0 -0
  93. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/data/templates/conventional/rst/.components/changes.rst.j2 +0 -0
  94. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/data/templates/conventional/rst/.components/first_release.rst.j2 +0 -0
  95. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/data/templates/conventional/rst/.components/macros.rst.j2 +0 -0
  96. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/data/templates/conventional/rst/.components/unreleased_changes.rst.j2 +0 -0
  97. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/data/templates/conventional/rst/.components/versioned_changes.rst.j2 +0 -0
  98. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/data/templates/conventional/rst/CHANGELOG.rst.j2 +0 -0
  99. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/enums.py +0 -0
  100. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/errors.py +0 -0
  101. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/globals.py +0 -0
  102. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/helpers.py +0 -0
  103. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/hvcs/__init__.py +0 -0
  104. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/hvcs/_base.py +0 -0
  105. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/hvcs/bitbucket.py +0 -0
  106. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/hvcs/gitea.py +0 -0
  107. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/hvcs/github.py +0 -0
  108. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/hvcs/gitlab.py +0 -0
  109. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/hvcs/remote_hvcs_base.py +0 -0
  110. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/hvcs/token_auth.py +0 -0
  111. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/hvcs/util.py +0 -0
  112. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/py.typed +0 -0
  113. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/version/__init__.py +0 -0
  114. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/version/algorithm.py +0 -0
  115. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/version/declaration.py +0 -0
  116. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/version/declarations/__init__.py +0 -0
  117. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/version/declarations/enum.py +0 -0
  118. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/version/declarations/i_version_replacer.py +0 -0
  119. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/version/declarations/pattern.py +0 -0
  120. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/version/declarations/toml.py +0 -0
  121. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/version/translator.py +0 -0
  122. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/src/semantic_release/version/version.py +0 -0
  123. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/__init__.py +0 -0
  124. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/conftest.py +0 -0
  125. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/const.py +0 -0
  126. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/__init__.py +0 -0
  127. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_changelog/__init__.py +0 -0
  128. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_changelog/test_changelog.py +0 -0
  129. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_changelog/test_changelog_custom_parser.py +0 -0
  130. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_changelog/test_changelog_parsing.py +0 -0
  131. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_changelog/test_changelog_release_notes.py +0 -0
  132. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_config/__init__.py +0 -0
  133. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_config/test_generate_config.py +0 -0
  134. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_publish/__init__.py +0 -0
  135. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_publish/test_publish.py +0 -0
  136. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/__init__.py +0 -0
  137. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/__init__.py +0 -0
  138. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/conftest.py +0 -0
  139. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/git_flow/__init__.py +0 -0
  140. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/git_flow/test_repo_1_channel.py +0 -0
  141. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/git_flow/test_repo_2_channels.py +0 -0
  142. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/git_flow/test_repo_3_channels.py +0 -0
  143. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/git_flow/test_repo_4_channels.py +0 -0
  144. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/github_flow/__init__.py +0 -0
  145. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/github_flow/test_repo_1_channel.py +0 -0
  146. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/github_flow/test_repo_1_channel_branch_update_merge.py +0 -0
  147. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/github_flow/test_repo_2_channels.py +0 -0
  148. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/github_flow_monorepo/__init__.py +0 -0
  149. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/github_flow_monorepo/test_monorepo_1_channel.py +0 -0
  150. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/github_flow_monorepo/test_monorepo_2_channels.py +0 -0
  151. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/trunk_based_dev/__init__.py +0 -0
  152. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/trunk_based_dev/test_repo_trunk.py +0 -0
  153. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/trunk_based_dev/test_repo_trunk_dual_version_support.py +0 -0
  154. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/trunk_based_dev/test_repo_trunk_dual_version_support_w_prereleases.py +0 -0
  155. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/trunk_based_dev/test_repo_trunk_w_prereleases.py +0 -0
  156. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/trunk_based_dev_monorepo/__init__.py +0 -0
  157. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/trunk_based_dev_monorepo/test_monorepo_trunk.py +0 -0
  158. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/test_version.py +0 -0
  159. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/test_version_build.py +0 -0
  160. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/test_version_bump.py +0 -0
  161. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/test_version_changelog.py +0 -0
  162. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/test_version_changelog_custom_commit_msg.py +0 -0
  163. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/test_version_github_actions.py +0 -0
  164. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/test_version_partial_tag.py +0 -0
  165. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/test_version_print.py +0 -0
  166. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/test_version_release_notes.py +0 -0
  167. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/test_version_shallow.py +0 -0
  168. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/test_version_stamp.py +0 -0
  169. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/test_version_strict.py +0 -0
  170. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/test_version_upstream_check.py +0 -0
  171. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/conftest.py +0 -0
  172. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/test_help.py +0 -0
  173. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/e2e/test_main.py +0 -0
  174. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/fixtures/__init__.py +0 -0
  175. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/fixtures/commit_parsers.py +0 -0
  176. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/fixtures/example_project.py +0 -0
  177. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/fixtures/monorepos/__init__.py +0 -0
  178. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/fixtures/monorepos/git_monorepo.py +0 -0
  179. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/fixtures/monorepos/github_flow/__init__.py +0 -0
  180. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/fixtures/monorepos/trunk_based_dev/__init__.py +0 -0
  181. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/fixtures/repos/__init__.py +0 -0
  182. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/fixtures/repos/git_flow/__init__.py +0 -0
  183. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/fixtures/repos/git_flow/repo_w_1_release_channel.py +0 -0
  184. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/fixtures/repos/git_flow/repo_w_2_release_channels.py +0 -0
  185. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/fixtures/repos/git_flow/repo_w_3_release_channels.py +0 -0
  186. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/fixtures/repos/git_flow/repo_w_4_release_channels.py +0 -0
  187. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/fixtures/repos/github_flow/__init__.py +0 -0
  188. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/fixtures/repos/github_flow/repo_w_default_release.py +0 -0
  189. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/fixtures/repos/github_flow/repo_w_default_release_w_branch_update_merge.py +0 -0
  190. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/fixtures/repos/github_flow/repo_w_release_channels.py +0 -0
  191. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/fixtures/repos/repo_initial_commit.py +0 -0
  192. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/fixtures/repos/trunk_based_dev/__init__.py +0 -0
  193. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/fixtures/repos/trunk_based_dev/repo_w_dual_version_support.py +0 -0
  194. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/fixtures/repos/trunk_based_dev/repo_w_dual_version_support_w_prereleases.py +0 -0
  195. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/fixtures/repos/trunk_based_dev/repo_w_no_tags.py +0 -0
  196. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/fixtures/repos/trunk_based_dev/repo_w_prereleases.py +0 -0
  197. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/fixtures/repos/trunk_based_dev/repo_w_tags.py +0 -0
  198. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/fixtures/scipy.py +0 -0
  199. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/__init__.py +0 -0
  200. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/conftest.py +0 -0
  201. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/semantic_release/__init__.py +0 -0
  202. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/semantic_release/changelog/__init__.py +0 -0
  203. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/semantic_release/changelog/conftest.py +0 -0
  204. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/semantic_release/changelog/test_changelog_context.py +0 -0
  205. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/semantic_release/changelog/test_default_changelog.py +0 -0
  206. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/semantic_release/changelog/test_release_history.py +0 -0
  207. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/semantic_release/changelog/test_release_notes.py +0 -0
  208. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/semantic_release/changelog/test_template.py +0 -0
  209. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/semantic_release/changelog/test_template_render.py +0 -0
  210. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/semantic_release/cli/__init__.py +0 -0
  211. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/semantic_release/cli/test_config.py +0 -0
  212. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/semantic_release/cli/test_github_actions_output.py +0 -0
  213. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/semantic_release/cli/test_masking_filter.py +0 -0
  214. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/semantic_release/cli/test_util.py +0 -0
  215. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/semantic_release/cli/test_version.py +0 -0
  216. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/semantic_release/commit_parser/__init__.py +0 -0
  217. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/semantic_release/commit_parser/test_conventional.py +0 -0
  218. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/semantic_release/commit_parser/test_emoji.py +0 -0
  219. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/semantic_release/commit_parser/test_parsed_commit.py +0 -0
  220. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/semantic_release/commit_parser/test_scipy.py +0 -0
  221. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/semantic_release/commit_parser/test_util.py +0 -0
  222. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/semantic_release/hvcs/__init__.py +0 -0
  223. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/semantic_release/hvcs/test__base.py +0 -0
  224. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/semantic_release/hvcs/test_bitbucket.py +0 -0
  225. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/semantic_release/hvcs/test_gitea.py +0 -0
  226. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/semantic_release/hvcs/test_github.py +0 -0
  227. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/semantic_release/hvcs/test_gitlab.py +0 -0
  228. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/semantic_release/hvcs/test_token_auth.py +0 -0
  229. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/semantic_release/hvcs/test_util.py +0 -0
  230. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/semantic_release/test_helpers.py +0 -0
  231. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/semantic_release/version/__init__.py +0 -0
  232. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/semantic_release/version/declarations/__init__.py +0 -0
  233. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/semantic_release/version/declarations/test_pattern_declaration.py +0 -0
  234. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/semantic_release/version/declarations/test_toml_declaration.py +0 -0
  235. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/semantic_release/version/test_algorithm.py +0 -0
  236. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/semantic_release/version/test_translator.py +0 -0
  237. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/unit/semantic_release/version/test_version.py +0 -0
  238. {python_semantic_release-10.5.2 → python_semantic_release-10.5.3}/tests/util.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: python-semantic-release
3
- Version: 10.5.2
3
+ Version: 10.5.3
4
4
  Summary: Automatic Semantic Versioning for Python projects
5
5
  Author-email: Rolf Erik Lekang <me@rolflekang.com>, codejedi365 <codejedi365@gmail.com>
6
6
  License: MIT
@@ -893,14 +893,14 @@ to the GitHub Release Assets as well.
893
893
  - name: Action | Semantic Version Release
894
894
  id: release
895
895
  # Adjust tag with desired version if applicable.
896
- uses: python-semantic-release/python-semantic-release@v10.5.2
896
+ uses: python-semantic-release/python-semantic-release@v10.5.3
897
897
  with:
898
898
  github_token: ${{ secrets.GITHUB_TOKEN }}
899
899
  git_committer_name: "github-actions"
900
900
  git_committer_email: "actions@users.noreply.github.com"
901
901
 
902
902
  - name: Publish | Upload to GitHub Release Assets
903
- uses: python-semantic-release/publish-action@v10.5.2
903
+ uses: python-semantic-release/publish-action@v10.5.3
904
904
  if: steps.release.outputs.released == 'true'
905
905
  with:
906
906
  github_token: ${{ secrets.GITHUB_TOKEN }}
@@ -1005,7 +1005,7 @@ The equivalent GitHub Action configuration would be:
1005
1005
 
1006
1006
  - name: Action | Semantic Version Release
1007
1007
  # Adjust tag with desired version if applicable.
1008
- uses: python-semantic-release/python-semantic-release@v10.5.2
1008
+ uses: python-semantic-release/python-semantic-release@v10.5.3
1009
1009
  with:
1010
1010
  github_token: ${{ secrets.GITHUB_TOKEN }}
1011
1011
  force: patch
@@ -1064,14 +1064,14 @@ Publish Action.
1064
1064
 
1065
1065
  - name: Release submodule 1
1066
1066
  id: release-submod-1
1067
- uses: python-semantic-release/python-semantic-release@v10.5.2
1067
+ uses: python-semantic-release/python-semantic-release@v10.5.3
1068
1068
  with:
1069
1069
  directory: ${{ env.SUBMODULE_1_DIR }}
1070
1070
  github_token: ${{ secrets.GITHUB_TOKEN }}
1071
1071
 
1072
1072
  - name: Release submodule 2
1073
1073
  id: release-submod-2
1074
- uses: python-semantic-release/python-semantic-release@v10.5.2
1074
+ uses: python-semantic-release/python-semantic-release@v10.5.3
1075
1075
  with:
1076
1076
  directory: ${{ env.SUBMODULE_2_DIR }}
1077
1077
  github_token: ${{ secrets.GITHUB_TOKEN }}
@@ -1083,7 +1083,7 @@ Publish Action.
1083
1083
  # ------------------------------------------------------------------- #
1084
1084
 
1085
1085
  - name: Publish | Upload package 1 to GitHub Release Assets
1086
- uses: python-semantic-release/publish-action@v10.5.2
1086
+ uses: python-semantic-release/publish-action@v10.5.3
1087
1087
  if: steps.release-submod-1.outputs.released == 'true'
1088
1088
  with:
1089
1089
  directory: ${{ env.SUBMODULE_1_DIR }}
@@ -1091,7 +1091,7 @@ Publish Action.
1091
1091
  tag: ${{ steps.release-submod-1.outputs.tag }}
1092
1092
 
1093
1093
  - name: Publish | Upload package 2 to GitHub Release Assets
1094
- uses: python-semantic-release/publish-action@v10.5.2
1094
+ uses: python-semantic-release/publish-action@v10.5.3
1095
1095
  if: steps.release-submod-2.outputs.released == 'true'
1096
1096
  with:
1097
1097
  directory: ${{ env.SUBMODULE_2_DIR }}
@@ -6,7 +6,7 @@ build-backend = "setuptools.build_meta"
6
6
 
7
7
  [project]
8
8
  name = "python-semantic-release"
9
- version = "10.5.2"
9
+ version = "10.5.3"
10
10
  description = "Automatic Semantic Versioning for Python projects"
11
11
  requires-python = "~= 3.8"
12
12
  license = { text = "MIT" }
@@ -409,6 +409,7 @@ sections = { "tests" = ["tests"] }
409
409
  ignore_names = ["change_to_ex_proj_dir", "init_example_project"]
410
410
 
411
411
  [tool.semantic_release]
412
+ add_partial_tags = true
412
413
  logging_use_named_masks = true
413
414
  commit_parser = "conventional"
414
415
  commit_parser_options = { parse_squash_commits = true, ignore_merge_commits = true }
@@ -753,6 +753,7 @@ def version( # noqa: C901
753
753
  project.verify_upstream_unchanged(
754
754
  local_ref="HEAD~1",
755
755
  upstream_ref=config.remote.name,
756
+ remote_url=remote_url,
756
757
  noop=opts.noop,
757
758
  )
758
759
  except UpstreamBranchChangedError as exc:
@@ -43,37 +43,46 @@ class ConventionalCommitMonorepoParserOptions(ConventionalCommitParserOptions):
43
43
  to match them literally.
44
44
  """
45
45
 
46
- @classmethod
47
46
  @field_validator("path_filters", mode="before")
48
- def convert_strs_to_paths(cls, value: Any) -> tuple[Path, ...]:
49
- values = value if isinstance(value, Iterable) else [value]
50
- results: list[Path] = []
47
+ @classmethod
48
+ def convert_strs_to_paths(cls, value: Any) -> tuple[str, ...]:
49
+ if isinstance(value, str):
50
+ return (value,)
51
51
 
52
- for val in values:
53
- if isinstance(val, (str, Path)):
54
- results.append(Path(val))
55
- continue
52
+ if isinstance(value, Path):
53
+ return (str(value),)
56
54
 
57
- raise TypeError(f"Invalid type: {type(val)}, expected str or Path.")
55
+ if isinstance(value, Iterable):
56
+ results: list[str] = []
57
+ for val in value:
58
+ if isinstance(val, (str, Path)):
59
+ results.append(str(Path(val)))
60
+ continue
58
61
 
59
- return tuple(results)
62
+ msg = f"Invalid type: {type(val)}, expected str or Path."
63
+ raise TypeError(msg)
64
+
65
+ return tuple(results)
66
+
67
+ msg = f"Invalid type: {type(value)}, expected str, Path, or Iterable."
68
+ raise TypeError(msg)
60
69
 
61
- @classmethod
62
70
  @field_validator("path_filters", mode="after")
63
- def resolve_path(cls, dir_paths: tuple[Path, ...]) -> tuple[Path, ...]:
71
+ @classmethod
72
+ def resolve_path(cls, dir_path_strs: tuple[str, ...]) -> tuple[str, ...]:
64
73
  return tuple(
65
74
  (
66
- Path(f"!{Path(str_path[1:]).expanduser().absolute().resolve()}")
75
+ f"!{Path(str_path[1:]).expanduser().absolute().resolve()}"
67
76
  # maintains the negation prefix if it exists
68
- if (str_path := str(path)).startswith("!")
77
+ if str_path.startswith("!")
69
78
  # otherwise, resolve the path normally
70
- else path.expanduser().absolute().resolve()
79
+ else str(Path(str_path).expanduser().absolute().resolve())
71
80
  )
72
- for path in dir_paths
81
+ for str_path in dir_path_strs
73
82
  )
74
83
 
75
- @classmethod
76
84
  @field_validator("scope_prefix", mode="after")
85
+ @classmethod
77
86
  def validate_scope_prefix(cls, scope_prefix: str) -> str:
78
87
  if not scope_prefix:
79
88
  return ""
@@ -336,13 +336,18 @@ class GitProject:
336
336
  raise GitPushError(f"Failed to push tag ({tag}) to remote") from err
337
337
 
338
338
  def verify_upstream_unchanged( # noqa: C901
339
- self, local_ref: str = "HEAD", upstream_ref: str = "origin", noop: bool = False
339
+ self,
340
+ local_ref: str = "HEAD",
341
+ upstream_ref: str = "origin",
342
+ remote_url: str | None = None,
343
+ noop: bool = False,
340
344
  ) -> None:
341
345
  """
342
346
  Verify that the upstream branch has not changed since the given local reference.
343
347
 
344
348
  :param local_ref: The local reference to compare against upstream (default: HEAD)
345
349
  :param upstream_ref: The name of the upstream remote or specific remote branch (default: origin)
350
+ :param remote_url: Optional authenticated remote URL to use for fetching (default: None, uses configured remote)
346
351
  :param noop: Whether to skip the actual verification (for dry-run mode)
347
352
 
348
353
  :raises UpstreamBranchChangedError: If the upstream branch has changed
@@ -409,7 +414,46 @@ class GitProject:
409
414
  # Fetch the latest changes from the remote
410
415
  self.logger.info("Fetching latest changes from remote '%s'", remote_name)
411
416
  try:
412
- remote_ref_obj.fetch()
417
+ # Check if we should use authenticated URL for fetch
418
+ # Only use remote_url if:
419
+ # 1. It's provided and different from the configured remote URL
420
+ # 2. It contains authentication credentials (@ symbol)
421
+ # 3. The configured remote is NOT a local path, file:// URL, or test URL (example.com)
422
+ # This ensures we don't break tests or local development
423
+ configured_url = remote_ref_obj.url
424
+ is_local_or_test_remote = (
425
+ configured_url.startswith(("file://", "/", "C:/", "H:/"))
426
+ or "example.com" in configured_url
427
+ or not configured_url.startswith(
428
+ (
429
+ "https://",
430
+ "http://",
431
+ "git://",
432
+ "git@",
433
+ "ssh://",
434
+ "git+ssh://",
435
+ )
436
+ )
437
+ )
438
+
439
+ use_authenticated_fetch = (
440
+ remote_url
441
+ and "@" in remote_url
442
+ and remote_url != configured_url
443
+ and not is_local_or_test_remote
444
+ )
445
+
446
+ if use_authenticated_fetch:
447
+ # Use authenticated remote URL for fetch
448
+ # Fetch the remote branch and update the local tracking ref
449
+ repo.git.fetch(
450
+ remote_url,
451
+ f"refs/heads/{remote_branch_name}:refs/remotes/{upstream_full_ref_name}",
452
+ )
453
+ else:
454
+ # Use the default remote configuration for local paths,
455
+ # file:// URLs, test URLs, or when no authentication is needed
456
+ remote_ref_obj.fetch()
413
457
  except GitCommandError as err:
414
458
  self.logger.exception(str(err))
415
459
  err_msg = f"Failed to fetch from remote '{remote_name}'"
@@ -142,6 +142,7 @@ if TYPE_CHECKING:
142
142
  sha: str
143
143
  datetime: NotRequired[DatetimeISOStr]
144
144
  include_in_changelog: bool
145
+ file_to_change: NotRequired[Path | str]
145
146
 
146
147
  class BaseRepoVersionDef(TypedDict):
147
148
  """A Common Repo definition for a get_commits_repo_*() fixture with all commit convention types"""
@@ -290,6 +291,7 @@ if TYPE_CHECKING:
290
291
  scipy: str
291
292
  datetime: NotRequired[DatetimeISOStr]
292
293
  include_in_changelog: NotRequired[bool]
294
+ file_to_change: NotRequired[Path | str]
293
295
 
294
296
  class DetailsBase(TypedDict):
295
297
  pre_actions: NotRequired[Sequence[RepoActions]]
@@ -1127,7 +1129,9 @@ def simulate_change_commits_n_rtn_changelog_entry(
1127
1129
  changelog_entries: list[CommitDef] = []
1128
1130
  for commit_msg in commit_msgs:
1129
1131
  if not git_repo.is_dirty(index=True, working_tree=False):
1130
- add_text_to_file(git_repo, file_in_repo)
1132
+ add_text_to_file(
1133
+ git_repo, str(commit_msg.get("file_to_change", file_in_repo))
1134
+ )
1131
1135
 
1132
1136
  changelog_entries.append(commit_n_rtn_changelog_entry(git_repo, commit_msg))
1133
1137
 
@@ -1336,39 +1340,6 @@ def configure_base_repo( # noqa: C901
1336
1340
 
1337
1341
  @pytest.fixture(scope="session")
1338
1342
  def separate_squashed_commit_def() -> SeparateSquashedCommitDefFn:
1339
- # default_conventional_parser: ConventionalCommitParser,
1340
- # default_emoji_parser: EmojiCommitParser,
1341
- # default_scipy_parser: ScipyCommitParser,
1342
- # message_parsers: dict[
1343
- # CommitConvention,
1344
- # ConventionalCommitParser | EmojiCommitParser | ScipyCommitParser,
1345
- # ] = {
1346
- # "conventional": ConventionalCommitParser(
1347
- # options=ConventionalCommitParserOptions(
1348
- # **{
1349
- # **default_conventional_parser.options.__dict__,
1350
- # "parse_squash_commits": True,
1351
- # }
1352
- # )
1353
- # ),
1354
- # "emoji": EmojiCommitParser(
1355
- # options=EmojiParserOptions(
1356
- # **{
1357
- # **default_emoji_parser.options.__dict__,
1358
- # "parse_squash_commits": True,
1359
- # }
1360
- # )
1361
- # ),
1362
- # "scipy": ScipyCommitParser(
1363
- # options=ScipyParserOptions(
1364
- # **{
1365
- # **default_scipy_parser.options.__dict__,
1366
- # "parse_squash_commits": True,
1367
- # }
1368
- # )
1369
- # ),
1370
- # }
1371
-
1372
1343
  def _separate_squashed_commit_def(
1373
1344
  squashed_commit_def: CommitDef,
1374
1345
  parser: SquashedCommitSupportedParser,
@@ -1435,7 +1406,7 @@ def convert_commit_spec_to_commit_def(
1435
1406
  )
1436
1407
 
1437
1408
  # Extract the correct commit message for the commit type
1438
- return {
1409
+ commit_def: CommitDef = {
1439
1410
  **parse_msg_fn(commit_spec[commit_type], parser=parser),
1440
1411
  "cid": commit_spec["cid"],
1441
1412
  "datetime": (
@@ -1443,9 +1414,18 @@ def convert_commit_spec_to_commit_def(
1443
1414
  if "datetime" in commit_spec
1444
1415
  else stable_now_date.isoformat(timespec="seconds")
1445
1416
  ),
1446
- "include_in_changelog": (commit_spec.get("include_in_changelog", True)),
1417
+ "include_in_changelog": commit_spec.get("include_in_changelog", True),
1447
1418
  }
1448
1419
 
1420
+ if "file_to_change" in commit_spec:
1421
+ commit_def.update(
1422
+ {
1423
+ "file_to_change": commit_spec["file_to_change"],
1424
+ }
1425
+ )
1426
+
1427
+ return commit_def
1428
+
1449
1429
  return _convert
1450
1430
 
1451
1431
 
@@ -68,8 +68,12 @@ def build_spec_hash_4_example_monorepo(
68
68
  @pytest.fixture(scope="session")
69
69
  def cached_example_monorepo(
70
70
  build_repo_or_copy_cache: BuildRepoOrCopyCacheFn,
71
- monorepo_pkg1_dir: Path,
72
- monorepo_pkg2_dir: Path,
71
+ monorepo_pkg1_name: str,
72
+ monorepo_pkg2_name: str,
73
+ monorepo_pkg1_dir: str,
74
+ monorepo_pkg2_dir: str,
75
+ monorepo_pkg1_docs_dir: str,
76
+ monorepo_pkg2_docs_dir: str,
73
77
  monorepo_pkg1_version_py_file: Path,
74
78
  monorepo_pkg2_version_py_file: Path,
75
79
  monorepo_pkg1_pyproject_toml_file: Path,
@@ -104,6 +108,13 @@ def cached_example_monorepo(
104
108
  print("{pkg_name} Hello World")
105
109
  '''
106
110
  ).lstrip()
111
+ doc_index_contents = dedent(
112
+ """
113
+ ==================
114
+ {pkg_name} Documentation
115
+ ==================
116
+ """
117
+ ).lstrip()
107
118
 
108
119
  with temporary_working_directory(cached_project_path):
109
120
  update_version_py_file(
@@ -127,6 +138,14 @@ def cached_example_monorepo(
127
138
  (".gitignore", gitignore_contents),
128
139
  (monorepo_pkg1_pyproject_toml_file, EXAMPLE_PYPROJECT_TOML_CONTENT),
129
140
  (monorepo_pkg2_pyproject_toml_file, EXAMPLE_PYPROJECT_TOML_CONTENT),
141
+ (
142
+ Path(monorepo_pkg1_docs_dir, "index.rst"),
143
+ doc_index_contents.format(pkg_name=monorepo_pkg1_name),
144
+ ),
145
+ (
146
+ Path(monorepo_pkg2_docs_dir, "index.rst"),
147
+ doc_index_contents.format(pkg_name=monorepo_pkg2_name),
148
+ ),
130
149
  ]
131
150
 
132
151
  for file, contents in file_2_contents:
@@ -216,6 +235,27 @@ def monorepo_pkg2_name() -> str:
216
235
  return "pkg2"
217
236
 
218
237
 
238
+ @pytest.fixture(scope="session")
239
+ def monorepo_pkg_docs_dir_pattern() -> str:
240
+ return str(Path("docs", "source", "{package_name}"))
241
+
242
+
243
+ @pytest.fixture(scope="session")
244
+ def monorepo_pkg1_docs_dir(
245
+ monorepo_pkg1_name: str,
246
+ monorepo_pkg_docs_dir_pattern: str,
247
+ ) -> str:
248
+ return monorepo_pkg_docs_dir_pattern.format(package_name=monorepo_pkg1_name)
249
+
250
+
251
+ @pytest.fixture(scope="session")
252
+ def monorepo_pkg2_docs_dir(
253
+ monorepo_pkg2_name: str,
254
+ monorepo_pkg_docs_dir_pattern: str,
255
+ ) -> str:
256
+ return monorepo_pkg_docs_dir_pattern.format(package_name=monorepo_pkg2_name)
257
+
258
+
219
259
  @pytest.fixture(scope="session")
220
260
  def monorepo_pkg_dir_pattern() -> str:
221
261
  return str(Path("packages", "{package_name}"))
@@ -96,8 +96,10 @@ def get_repo_definition_4_github_flow_monorepo_w_default_release_channel(
96
96
  monorepo_pkg2_changelog_rst_file: Path,
97
97
  monorepo_pkg1_name: str,
98
98
  monorepo_pkg2_name: str,
99
- monorepo_pkg1_dir: Path,
100
- monorepo_pkg2_dir: Path,
99
+ monorepo_pkg1_dir: str,
100
+ monorepo_pkg2_dir: str,
101
+ monorepo_pkg1_docs_dir: str,
102
+ monorepo_pkg2_docs_dir: str,
101
103
  monorepo_pkg1_version_py_file: Path,
102
104
  monorepo_pkg2_version_py_file: Path,
103
105
  monorepo_pkg1_pyproject_toml_file: Path,
@@ -117,7 +119,8 @@ def get_repo_definition_4_github_flow_monorepo_w_default_release_channel(
117
119
  * chore(release): pkg1@1.1.0 [skip ci] (tag: pkg1-v1.1.0, branch: main, HEAD -> main)
118
120
  * feat(pkg1): file modified outside of pkg 1, identified by scope (#5)
119
121
  |
120
- | * feat(pkg1): file modified outside of pkg 1, identified by scope (branch: pkg1/feat/pr-4)
122
+ | * docs: pkg1 docs modified outside of pkg 1, identified by path filter (branch: pkg1/feat/pr-4)
123
+ | * feat(pkg1): file modified outside of pkg 1, identified by scope
121
124
  |/
122
125
  * chore(release): pkg2@1.1.1 [skip ci] (tag: pkg2-v1.1.1)
123
126
  * fix(pkg2-cli): file modified outside of pkg 2, identified by scope (#4)
@@ -207,21 +210,23 @@ def get_repo_definition_4_github_flow_monorepo_w_default_release_channel(
207
210
  if commit_type != "conventional":
208
211
  raise ValueError(f"Unsupported commit type: {commit_type}")
209
212
 
213
+ pkg1_path_filters = (".", f"../../{monorepo_pkg1_docs_dir}")
210
214
  pkg1_commit_parser = ConventionalCommitMonorepoParser(
211
215
  options=ConventionalCommitMonorepoParserOptions(
212
216
  parse_squash_commits=True,
213
217
  ignore_merge_commits=ignore_merge_commits,
214
218
  scope_prefix=f"{monorepo_pkg1_name}-?",
215
- path_filters=(".",),
219
+ path_filters=pkg1_path_filters,
216
220
  )
217
221
  )
218
222
 
223
+ pkg2_path_filters = (".", f"../../{monorepo_pkg2_docs_dir}")
219
224
  pkg2_commit_parser = ConventionalCommitMonorepoParser(
220
225
  options=ConventionalCommitMonorepoParserOptions(
221
226
  parse_squash_commits=pkg1_commit_parser.options.parse_squash_commits,
222
227
  ignore_merge_commits=pkg1_commit_parser.options.ignore_merge_commits,
223
228
  scope_prefix=f"{monorepo_pkg2_name}-?",
224
- path_filters=(".",),
229
+ path_filters=pkg2_path_filters,
225
230
  )
226
231
  )
227
232
 
@@ -277,7 +282,7 @@ def get_repo_definition_4_github_flow_monorepo_w_default_release_channel(
277
282
  )
278
283
  ),
279
284
  "tool.semantic_release.commit_parser_options.scope_prefix": pkg1_commit_parser.options.scope_prefix,
280
- "tool.semantic_release.commit_parser_options.path_filters": pkg1_commit_parser.options.path_filters,
285
+ "tool.semantic_release.commit_parser_options.path_filters": pkg1_path_filters,
281
286
  **(extra_configs or {}),
282
287
  },
283
288
  },
@@ -301,7 +306,7 @@ def get_repo_definition_4_github_flow_monorepo_w_default_release_channel(
301
306
  )
302
307
  ),
303
308
  "tool.semantic_release.commit_parser_options.scope_prefix": pkg2_commit_parser.options.scope_prefix,
304
- "tool.semantic_release.commit_parser_options.path_filters": pkg2_commit_parser.options.path_filters,
309
+ "tool.semantic_release.commit_parser_options.path_filters": pkg2_path_filters,
305
310
  **(extra_configs or {}),
306
311
  },
307
312
  },
@@ -774,7 +779,15 @@ def get_repo_definition_4_github_flow_monorepo_w_default_release_channel(
774
779
  "emoji": ":sparkles: (pkg1) file modified outside of pkg 1, identified by scope",
775
780
  "scipy": "ENH:pkg1: file modified outside of pkg 1, identified by scope",
776
781
  "datetime": next(commit_timestamp_gen),
777
- }
782
+ },
783
+ {
784
+ "cid": "pkg1-docs-2-squashed",
785
+ "conventional": "docs: pkg1 docs modified outside of pkg 1, identified by path filter",
786
+ "emoji": ":book: pkg1 docs modified outside of pkg 1, identified by path filter",
787
+ "scipy": "DOC: pkg1 docs modified outside of pkg 1, identified by path filter",
788
+ "datetime": next(commit_timestamp_gen),
789
+ "file_to_change": f"{monorepo_pkg1_docs_dir}/index.rst",
790
+ },
778
791
  ]
779
792
 
780
793
  repo_construction_steps.extend(
@@ -97,8 +97,10 @@ def get_repo_definition_4_github_flow_monorepo_w_feature_release_channel(
97
97
  monorepo_pkg2_changelog_rst_file: Path,
98
98
  monorepo_pkg1_name: str,
99
99
  monorepo_pkg2_name: str,
100
- monorepo_pkg1_dir: Path,
101
- monorepo_pkg2_dir: Path,
100
+ monorepo_pkg1_dir: str,
101
+ monorepo_pkg2_dir: str,
102
+ monorepo_pkg1_docs_dir: str,
103
+ monorepo_pkg2_docs_dir: str,
102
104
  monorepo_pkg1_version_py_file: Path,
103
105
  monorepo_pkg2_version_py_file: Path,
104
106
  stable_now_date: GetStableDateNowFn,
@@ -119,7 +121,7 @@ def get_repo_definition_4_github_flow_monorepo_w_feature_release_channel(
119
121
  | * chore(release): pkg2@1.1.0-alpha.2 [skip ci] (tag: pkg2-v1.1.0-alpha.2, branch: pkg2/feat/pr-2)
120
122
  | * fix(pkg2-cli): file modified outside of pkg 2, identified by scope
121
123
  | * chore(release): pkg2@1.1.0-alpha.1 [skip ci] (tag: pkg2-v1.1.0-alpha.1)
122
- | * docs: add cli documentation
124
+ | * docs: pkg2 docs modified outside of pkg 2, identified by path filter
123
125
  | * test: add cli tests
124
126
  | * feat: no pkg scope but file in pkg 2 directory
125
127
  |/
@@ -203,21 +205,23 @@ def get_repo_definition_4_github_flow_monorepo_w_feature_release_channel(
203
205
  if commit_type != "conventional":
204
206
  raise ValueError(f"Unsupported commit type: {commit_type}")
205
207
 
208
+ pkg1_path_filters = (".", f"../../{monorepo_pkg1_docs_dir}")
206
209
  pkg1_commit_parser = ConventionalCommitMonorepoParser(
207
210
  options=ConventionalCommitMonorepoParserOptions(
208
211
  parse_squash_commits=True,
209
212
  ignore_merge_commits=ignore_merge_commits,
210
213
  scope_prefix=f"{monorepo_pkg1_name}-?",
211
- path_filters=(".",),
214
+ path_filters=pkg1_path_filters,
212
215
  )
213
216
  )
214
217
 
218
+ pkg2_path_filters = (".", f"../../{monorepo_pkg2_docs_dir}")
215
219
  pkg2_commit_parser = ConventionalCommitMonorepoParser(
216
220
  options=ConventionalCommitMonorepoParserOptions(
217
221
  parse_squash_commits=pkg1_commit_parser.options.parse_squash_commits,
218
222
  ignore_merge_commits=pkg1_commit_parser.options.ignore_merge_commits,
219
223
  scope_prefix=f"{monorepo_pkg2_name}-?",
220
- path_filters=(".",),
224
+ path_filters=pkg2_path_filters,
221
225
  )
222
226
  )
223
227
 
@@ -277,7 +281,7 @@ def get_repo_definition_4_github_flow_monorepo_w_feature_release_channel(
277
281
  "prerelease_token": "alpha",
278
282
  },
279
283
  "tool.semantic_release.commit_parser_options.scope_prefix": pkg1_commit_parser.options.scope_prefix,
280
- "tool.semantic_release.commit_parser_options.path_filters": pkg1_commit_parser.options.path_filters,
284
+ "tool.semantic_release.commit_parser_options.path_filters": pkg1_path_filters,
281
285
  **(extra_configs or {}),
282
286
  },
283
287
  },
@@ -307,7 +311,7 @@ def get_repo_definition_4_github_flow_monorepo_w_feature_release_channel(
307
311
  "prerelease_token": "alpha",
308
312
  },
309
313
  "tool.semantic_release.commit_parser_options.scope_prefix": pkg2_commit_parser.options.scope_prefix,
310
- "tool.semantic_release.commit_parser_options.path_filters": pkg2_commit_parser.options.path_filters,
314
+ "tool.semantic_release.commit_parser_options.path_filters": pkg2_path_filters,
311
315
  **(extra_configs or {}),
312
316
  },
313
317
  },
@@ -646,11 +650,12 @@ def get_repo_definition_4_github_flow_monorepo_w_feature_release_channel(
646
650
  cid_pkg2_feb1_c3_docs
647
651
  := "pkg2_feat_branch_1_c3_docs"
648
652
  ),
649
- "conventional": "docs: add cli documentation",
650
- "emoji": ":memo: add cli documentation",
651
- "scipy": "DOC: add cli documentation",
653
+ "conventional": "docs: pkg2 docs modified outside of pkg 2, identified by path filter",
654
+ "emoji": ":book: pkg2 docs modified outside of pkg 2, identified by path filter",
655
+ "scipy": "DOC: pkg2 docs modified outside of pkg 2, identified by path filter",
652
656
  "datetime": next(commit_timestamp_gen),
653
657
  "include_in_changelog": True,
658
+ "file_to_change": f"../../{monorepo_pkg2_docs_dir}/index.rst",
654
659
  },
655
660
  ],
656
661
  commit_type,
@@ -88,8 +88,10 @@ def get_repo_definition_4_trunk_only_monorepo_w_tags(
88
88
  monorepo_pkg2_changelog_rst_file: Path,
89
89
  monorepo_pkg1_name: str,
90
90
  monorepo_pkg2_name: str,
91
- monorepo_pkg1_dir: Path,
92
- monorepo_pkg2_dir: Path,
91
+ monorepo_pkg1_dir: str,
92
+ monorepo_pkg2_dir: str,
93
+ monorepo_pkg1_docs_dir: str,
94
+ monorepo_pkg2_docs_dir: str,
93
95
  monorepo_pkg1_version_py_file: Path,
94
96
  monorepo_pkg2_version_py_file: Path,
95
97
  stable_now_date: GetStableDateNowFn,
@@ -104,6 +106,7 @@ def get_repo_definition_4_trunk_only_monorepo_w_tags(
104
106
 
105
107
  ```
106
108
  * chore(release): pkg1@0.1.0 [skip ci] (tag: pkg1-v0.1.0, branch: main)
109
+ * docs: pkg1 docs modified outside of pkg 1, identified by path filter
107
110
  * feat(pkg1): file modified outside of pkg 1, identified by scope
108
111
  * chore(release): pkg2@0.1.1 [skip ci] (tag: pkg2-v0.1.1)
109
112
  * fix(pkg2-cli): file modified outside of pkg 2, identified by scope
@@ -182,21 +185,23 @@ def get_repo_definition_4_trunk_only_monorepo_w_tags(
182
185
  if commit_type != "conventional":
183
186
  raise ValueError(f"Unsupported commit type: {commit_type}")
184
187
 
188
+ pkg1_path_filters = (".", f"../../{monorepo_pkg1_docs_dir}")
185
189
  pkg1_commit_parser = ConventionalCommitMonorepoParser(
186
190
  options=ConventionalCommitMonorepoParserOptions(
187
191
  parse_squash_commits=True,
188
192
  ignore_merge_commits=ignore_merge_commits,
189
193
  scope_prefix=f"{monorepo_pkg1_name}-?",
190
- path_filters=(".",),
194
+ path_filters=pkg1_path_filters,
191
195
  )
192
196
  )
193
197
 
198
+ pkg2_path_filters = (".", f"../../{monorepo_pkg2_docs_dir}")
194
199
  pkg2_commit_parser = ConventionalCommitMonorepoParser(
195
200
  options=ConventionalCommitMonorepoParserOptions(
196
201
  parse_squash_commits=pkg1_commit_parser.options.parse_squash_commits,
197
202
  ignore_merge_commits=pkg1_commit_parser.options.ignore_merge_commits,
198
203
  scope_prefix=f"{monorepo_pkg2_name}-?",
199
- path_filters=(".",),
204
+ path_filters=pkg2_path_filters,
200
205
  )
201
206
  )
202
207
 
@@ -247,7 +252,7 @@ def get_repo_definition_4_trunk_only_monorepo_w_tags(
247
252
  )
248
253
  ),
249
254
  "tool.semantic_release.commit_parser_options.scope_prefix": pkg1_commit_parser.options.scope_prefix,
250
- "tool.semantic_release.commit_parser_options.path_filters": pkg1_commit_parser.options.path_filters,
255
+ "tool.semantic_release.commit_parser_options.path_filters": pkg1_path_filters,
251
256
  **(extra_configs or {}),
252
257
  },
253
258
  },
@@ -271,7 +276,7 @@ def get_repo_definition_4_trunk_only_monorepo_w_tags(
271
276
  )
272
277
  ),
273
278
  "tool.semantic_release.commit_parser_options.scope_prefix": pkg2_commit_parser.options.scope_prefix,
274
- "tool.semantic_release.commit_parser_options.path_filters": pkg2_commit_parser.options.path_filters,
279
+ "tool.semantic_release.commit_parser_options.path_filters": pkg2_path_filters,
275
280
  **(extra_configs or {}),
276
281
  },
277
282
  },
@@ -524,6 +529,14 @@ def get_repo_definition_4_trunk_only_monorepo_w_tags(
524
529
  "scipy": "ENH:pkg1: file modified outside of pkg 1, identified by scope",
525
530
  "datetime": next(commit_timestamp_gen),
526
531
  },
532
+ {
533
+ "cid": (cid_c11_pkg1_docs := "c11_pkg1_docs"),
534
+ "conventional": "docs: pkg1 docs modified outside of pkg 1, identified by path filter",
535
+ "emoji": ":book: pkg1 docs modified outside of pkg 1, identified by path filter",
536
+ "scipy": "DOC: pkg1 docs modified outside of pkg 1, identified by path filter",
537
+ "datetime": next(commit_timestamp_gen),
538
+ "file_to_change": f"{monorepo_pkg1_docs_dir}/index.rst",
539
+ },
527
540
  ],
528
541
  commit_type,
529
542
  parser=cast(
@@ -550,7 +563,10 @@ def get_repo_definition_4_trunk_only_monorepo_w_tags(
550
563
  "details": {
551
564
  "new_version": pkg1_new_version,
552
565
  "dest_files": pkg1_changelog_file_definitions,
553
- "commit_ids": [cid_c10_pkg1_feat],
566
+ "commit_ids": [
567
+ cid_c10_pkg1_feat,
568
+ cid_c11_pkg1_docs,
569
+ ],
554
570
  },
555
571
  },
556
572
  change_to_pkg1_dir,