python-semantic-release 10.3.1__tar.gz → 10.3.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.
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/PKG-INFO +2 -2
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/docs/configuration/automatic-releases/github-actions.rst +7 -7
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/docs/configuration/configuration-guides/uv_integration.rst +1 -1
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/pyproject.toml +2 -2
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/cli/commands/version.py +3 -6
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/cli/github_actions_output.py +8 -2
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/version/algorithm.py +5 -18
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/conftest.py +28 -5
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/cmd_changelog/test_changelog.py +21 -10
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/cmd_changelog/test_changelog_custom_parser.py +8 -2
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/cmd_changelog/test_changelog_release_notes.py +18 -29
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/cmd_version/bump_version/conftest.py +25 -11
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/cmd_version/bump_version/git_flow/test_repo_1_channel.py +26 -22
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/cmd_version/bump_version/git_flow/test_repo_2_channels.py +26 -22
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/cmd_version/bump_version/git_flow/test_repo_3_channels.py +26 -22
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/cmd_version/bump_version/git_flow/test_repo_4_channels.py +26 -22
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/cmd_version/bump_version/github_flow/test_repo_1_channel.py +26 -22
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/cmd_version/bump_version/github_flow/test_repo_1_channel_branch_update_merge.py +26 -22
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/cmd_version/bump_version/github_flow/test_repo_2_channels.py +26 -22
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/cmd_version/bump_version/trunk_based_dev/test_repo_trunk.py +26 -22
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/cmd_version/bump_version/trunk_based_dev/test_repo_trunk_dual_version_support.py +26 -22
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/cmd_version/bump_version/trunk_based_dev/test_repo_trunk_dual_version_support_w_prereleases.py +27 -22
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/cmd_version/bump_version/trunk_based_dev/test_repo_trunk_w_prereleases.py +26 -22
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/cmd_version/test_version_bump.py +42 -26
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/cmd_version/test_version_changelog.py +37 -32
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/cmd_version/test_version_changelog_custom_commit_msg.py +11 -15
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/cmd_version/test_version_github_actions.py +4 -11
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/cmd_version/test_version_print.py +33 -23
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/cmd_version/test_version_stamp.py +2 -1
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/conftest.py +18 -9
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/test_main.py +6 -3
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/fixtures/example_project.py +317 -61
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/fixtures/git_repo.py +426 -230
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/fixtures/repos/git_flow/repo_w_1_release_channel.py +342 -207
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/fixtures/repos/git_flow/repo_w_2_release_channels.py +305 -160
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/fixtures/repos/git_flow/repo_w_3_release_channels.py +327 -189
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/fixtures/repos/git_flow/repo_w_4_release_channels.py +328 -197
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/fixtures/repos/github_flow/repo_w_default_release.py +74 -10
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/fixtures/repos/github_flow/repo_w_default_release_w_branch_update_merge.py +184 -93
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/fixtures/repos/github_flow/repo_w_release_channels.py +123 -71
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/fixtures/repos/repo_initial_commit.py +30 -2
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/fixtures/repos/trunk_based_dev/repo_w_dual_version_support.py +55 -11
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/fixtures/repos/trunk_based_dev/repo_w_dual_version_support_w_prereleases.py +71 -15
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/fixtures/repos/trunk_based_dev/repo_w_no_tags.py +36 -3
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/fixtures/repos/trunk_based_dev/repo_w_prereleases.py +55 -11
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/fixtures/repos/trunk_based_dev/repo_w_tags.py +46 -7
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/unit/semantic_release/cli/test_util.py +17 -10
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/util.py +10 -2
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/LICENSE +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/MANIFEST.in +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/README.rst +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/docs/Makefile +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/docs/api/commands.rst +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/docs/concepts/changelog_templates.rst +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/docs/concepts/commit_parsing.rst +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/docs/concepts/getting_started.rst +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/docs/concepts/index.rst +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/docs/concepts/installation.rst +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/docs/concepts/multibranch_releases.rst +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/docs/concepts/strict_mode.rst +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/docs/conf.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/docs/configuration/automatic-releases/cronjobs.rst +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/docs/configuration/automatic-releases/index.rst +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/docs/configuration/automatic-releases/travis.rst +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/docs/configuration/configuration-guides/index.rst +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/docs/configuration/configuration.rst +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/docs/configuration/index.rst +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/docs/contributing/contributing_guide.rst +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/docs/contributing/index.rst +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/docs/index.rst +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/docs/make.bat +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/docs/misc/psr_changelog.rst +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/docs/misc/troubleshooting.rst +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/docs/upgrading/08-upgrade.rst +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/docs/upgrading/09-upgrade.rst +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/docs/upgrading/10-upgrade.rst +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/docs/upgrading/index.rst +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/setup.cfg +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/python_semantic_release.egg-info/SOURCES.txt +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/__init__.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/__main__.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/changelog/__init__.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/changelog/context.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/changelog/release_history.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/changelog/template.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/cli/__init__.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/cli/changelog_writer.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/cli/cli_context.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/cli/commands/__init__.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/cli/commands/changelog.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/cli/commands/generate_config.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/cli/commands/main.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/cli/commands/publish.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/cli/config.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/cli/const.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/cli/masking_filter.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/cli/util.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/commit_parser/__init__.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/commit_parser/_base.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/commit_parser/angular.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/commit_parser/conventional.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/commit_parser/emoji.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/commit_parser/scipy.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/commit_parser/tag.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/commit_parser/token.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/commit_parser/util.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/const.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/data/templates/conventional/md/.components/changelog_header.md.j2 +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/data/templates/conventional/md/.components/changelog_init.md.j2 +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/data/templates/conventional/md/.components/changelog_update.md.j2 +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/data/templates/conventional/md/.components/changes.md.j2 +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/data/templates/conventional/md/.components/first_release.md.j2 +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/data/templates/conventional/md/.components/macros.md.j2 +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/data/templates/conventional/md/.components/unreleased_changes.md.j2 +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/data/templates/conventional/md/.components/versioned_changes.md.j2 +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/data/templates/conventional/md/.release_notes.md.j2 +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/data/templates/conventional/md/CHANGELOG.md.j2 +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/data/templates/conventional/rst/.components/changelog_header.rst.j2 +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/data/templates/conventional/rst/.components/changelog_init.rst.j2 +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/data/templates/conventional/rst/.components/changelog_update.rst.j2 +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/data/templates/conventional/rst/.components/changes.rst.j2 +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/data/templates/conventional/rst/.components/first_release.rst.j2 +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/data/templates/conventional/rst/.components/macros.rst.j2 +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/data/templates/conventional/rst/.components/unreleased_changes.rst.j2 +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/data/templates/conventional/rst/.components/versioned_changes.rst.j2 +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/data/templates/conventional/rst/CHANGELOG.rst.j2 +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/enums.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/errors.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/gitproject.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/globals.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/helpers.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/hvcs/__init__.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/hvcs/_base.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/hvcs/bitbucket.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/hvcs/gitea.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/hvcs/github.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/hvcs/gitlab.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/hvcs/remote_hvcs_base.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/hvcs/token_auth.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/hvcs/util.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/py.typed +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/version/__init__.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/version/declaration.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/version/declarations/__init__.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/version/declarations/enum.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/version/declarations/i_version_replacer.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/version/declarations/pattern.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/version/declarations/toml.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/version/translator.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/src/semantic_release/version/version.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/__init__.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/const.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/__init__.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/cmd_changelog/__init__.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/cmd_changelog/test_changelog_parsing.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/cmd_config/__init__.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/cmd_config/test_generate_config.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/cmd_publish/__init__.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/cmd_publish/test_publish.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/cmd_version/__init__.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/cmd_version/bump_version/__init__.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/cmd_version/bump_version/git_flow/__init__.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/cmd_version/bump_version/github_flow/__init__.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/cmd_version/bump_version/trunk_based_dev/__init__.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/cmd_version/test_version.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/cmd_version/test_version_build.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/cmd_version/test_version_release_notes.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/cmd_version/test_version_strict.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/e2e/test_help.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/fixtures/__init__.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/fixtures/commit_parsers.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/fixtures/repos/__init__.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/fixtures/repos/git_flow/__init__.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/fixtures/repos/github_flow/__init__.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/fixtures/repos/trunk_based_dev/__init__.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/fixtures/scipy.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/unit/__init__.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/unit/conftest.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/unit/semantic_release/__init__.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/unit/semantic_release/changelog/__init__.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/unit/semantic_release/changelog/conftest.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/unit/semantic_release/changelog/test_changelog_context.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/unit/semantic_release/changelog/test_default_changelog.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/unit/semantic_release/changelog/test_release_history.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/unit/semantic_release/changelog/test_release_notes.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/unit/semantic_release/changelog/test_template.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/unit/semantic_release/changelog/test_template_render.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/unit/semantic_release/cli/__init__.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/unit/semantic_release/cli/test_config.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/unit/semantic_release/cli/test_github_actions_output.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/unit/semantic_release/cli/test_masking_filter.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/unit/semantic_release/cli/test_version.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/unit/semantic_release/commit_parser/__init__.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/unit/semantic_release/commit_parser/test_conventional.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/unit/semantic_release/commit_parser/test_emoji.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/unit/semantic_release/commit_parser/test_parsed_commit.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/unit/semantic_release/commit_parser/test_scipy.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/unit/semantic_release/commit_parser/test_util.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/unit/semantic_release/hvcs/__init__.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/unit/semantic_release/hvcs/test__base.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/unit/semantic_release/hvcs/test_bitbucket.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/unit/semantic_release/hvcs/test_gitea.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/unit/semantic_release/hvcs/test_github.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/unit/semantic_release/hvcs/test_gitlab.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/unit/semantic_release/hvcs/test_token_auth.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/unit/semantic_release/hvcs/test_util.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/unit/semantic_release/test_helpers.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/unit/semantic_release/version/__init__.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/unit/semantic_release/version/declarations/__init__.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/unit/semantic_release/version/declarations/test_pattern_declaration.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/unit/semantic_release/version/declarations/test_toml_declaration.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/unit/semantic_release/version/test_algorithm.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/unit/semantic_release/version/test_translator.py +0 -0
- {python_semantic_release-10.3.1 → python_semantic_release-10.3.2}/tests/unit/semantic_release/version/test_version.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: python-semantic-release
|
|
3
|
-
Version: 10.3.
|
|
3
|
+
Version: 10.3.2
|
|
4
4
|
Summary: Automatic Semantic Versioning for Python projects
|
|
5
5
|
Author-email: Rolf Erik Lekang <me@rolflekang.com>
|
|
6
6
|
License: MIT
|
|
@@ -17,7 +17,7 @@ Classifier: Programming Language :: Python :: 3.10
|
|
|
17
17
|
Classifier: Programming Language :: Python :: 3.11
|
|
18
18
|
Classifier: Programming Language :: Python :: 3.12
|
|
19
19
|
Classifier: Programming Language :: Python :: 3.13
|
|
20
|
-
Requires-Python:
|
|
20
|
+
Requires-Python: ~=3.8
|
|
21
21
|
Description-Content-Type: text/x-rst
|
|
22
22
|
License-File: LICENSE
|
|
23
23
|
Requires-Dist: click~=8.1.0
|
|
@@ -933,14 +933,14 @@ to the GitHub Release Assets as well.
|
|
|
933
933
|
- name: Action | Semantic Version Release
|
|
934
934
|
id: release
|
|
935
935
|
# Adjust tag with desired version if applicable.
|
|
936
|
-
uses: python-semantic-release/python-semantic-release@v10.3.
|
|
936
|
+
uses: python-semantic-release/python-semantic-release@v10.3.2
|
|
937
937
|
with:
|
|
938
938
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
939
939
|
git_committer_name: "github-actions"
|
|
940
940
|
git_committer_email: "actions@users.noreply.github.com"
|
|
941
941
|
|
|
942
942
|
- name: Publish | Upload to GitHub Release Assets
|
|
943
|
-
uses: python-semantic-release/publish-action@v10.3.
|
|
943
|
+
uses: python-semantic-release/publish-action@v10.3.2
|
|
944
944
|
if: steps.release.outputs.released == 'true'
|
|
945
945
|
with:
|
|
946
946
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
@@ -1039,7 +1039,7 @@ The equivalent GitHub Action configuration would be:
|
|
|
1039
1039
|
|
|
1040
1040
|
- name: Action | Semantic Version Release
|
|
1041
1041
|
# Adjust tag with desired version if applicable.
|
|
1042
|
-
uses: python-semantic-release/python-semantic-release@v10.3.
|
|
1042
|
+
uses: python-semantic-release/python-semantic-release@v10.3.2
|
|
1043
1043
|
with:
|
|
1044
1044
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
1045
1045
|
force: patch
|
|
@@ -1098,14 +1098,14 @@ Publish Action.
|
|
|
1098
1098
|
|
|
1099
1099
|
- name: Release submodule 1
|
|
1100
1100
|
id: release-submod-1
|
|
1101
|
-
uses: python-semantic-release/python-semantic-release@v10.3.
|
|
1101
|
+
uses: python-semantic-release/python-semantic-release@v10.3.2
|
|
1102
1102
|
with:
|
|
1103
1103
|
directory: ${{ env.SUBMODULE_1_DIR }}
|
|
1104
1104
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
1105
1105
|
|
|
1106
1106
|
- name: Release submodule 2
|
|
1107
1107
|
id: release-submod-2
|
|
1108
|
-
uses: python-semantic-release/python-semantic-release@v10.3.
|
|
1108
|
+
uses: python-semantic-release/python-semantic-release@v10.3.2
|
|
1109
1109
|
with:
|
|
1110
1110
|
directory: ${{ env.SUBMODULE_2_DIR }}
|
|
1111
1111
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
@@ -1117,7 +1117,7 @@ Publish Action.
|
|
|
1117
1117
|
# ------------------------------------------------------------------- #
|
|
1118
1118
|
|
|
1119
1119
|
- name: Publish | Upload package 1 to GitHub Release Assets
|
|
1120
|
-
uses: python-semantic-release/publish-action@v10.3.
|
|
1120
|
+
uses: python-semantic-release/publish-action@v10.3.2
|
|
1121
1121
|
if: steps.release-submod-1.outputs.released == 'true'
|
|
1122
1122
|
with:
|
|
1123
1123
|
directory: ${{ env.SUBMODULE_1_DIR }}
|
|
@@ -1125,7 +1125,7 @@ Publish Action.
|
|
|
1125
1125
|
tag: ${{ steps.release-submod-1.outputs.tag }}
|
|
1126
1126
|
|
|
1127
1127
|
- name: Publish | Upload package 2 to GitHub Release Assets
|
|
1128
|
-
uses: python-semantic-release/publish-action@v10.3.
|
|
1128
|
+
uses: python-semantic-release/publish-action@v10.3.2
|
|
1129
1129
|
if: steps.release-submod-2.outputs.released == 'true'
|
|
1130
1130
|
with:
|
|
1131
1131
|
directory: ${{ env.SUBMODULE_2_DIR }}
|
|
@@ -176,7 +176,7 @@ look like this:
|
|
|
176
176
|
id: version
|
|
177
177
|
env:
|
|
178
178
|
GH_TOKEN: "none"
|
|
179
|
-
run: uv run semantic-release -v version --no-commit --no-tag
|
|
179
|
+
run: uv run semantic-release -v version --no-changelog --no-commit --no-tag
|
|
180
180
|
|
|
181
181
|
- name: Upload | Distribution Artifacts
|
|
182
182
|
if: ${{ steps.version.outputs.released == 'true' }}
|
|
@@ -6,9 +6,9 @@ build-backend = "setuptools.build_meta"
|
|
|
6
6
|
|
|
7
7
|
[project]
|
|
8
8
|
name = "python-semantic-release"
|
|
9
|
-
version = "10.3.
|
|
9
|
+
version = "10.3.2"
|
|
10
10
|
description = "Automatic Semantic Versioning for Python projects"
|
|
11
|
-
requires-python = "
|
|
11
|
+
requires-python = "~= 3.8"
|
|
12
12
|
license = { text = "MIT" }
|
|
13
13
|
classifiers = [
|
|
14
14
|
"Programming Language :: Python",
|
|
@@ -471,11 +471,7 @@ def version( # noqa: C901
|
|
|
471
471
|
no_verify = runtime.no_git_verify
|
|
472
472
|
opts = runtime.global_cli_options
|
|
473
473
|
gha_output = VersionGitHubActionsOutput(
|
|
474
|
-
gh_client=(
|
|
475
|
-
hvcs_client
|
|
476
|
-
if isinstance(hvcs_client, Github)
|
|
477
|
-
else Github(hvcs_client.remote_url(use_token=False))
|
|
478
|
-
),
|
|
474
|
+
gh_client=hvcs_client if isinstance(hvcs_client, Github) else None,
|
|
479
475
|
mode=(
|
|
480
476
|
PersistenceMode.TEMPORARY
|
|
481
477
|
if opts.noop or (not commit_changes and not create_tag)
|
|
@@ -553,7 +549,8 @@ def version( # noqa: C901
|
|
|
553
549
|
|
|
554
550
|
# Update GitHub Actions output value with new version & set delayed write
|
|
555
551
|
gha_output.version = new_version
|
|
556
|
-
|
|
552
|
+
if isinstance(hvcs_client, Github):
|
|
553
|
+
ctx.call_on_close(gha_output.write_if_possible)
|
|
557
554
|
|
|
558
555
|
# Make string variant of version or appropriate tag as necessary
|
|
559
556
|
version_to_print = str(new_version) if not print_only_tag else new_version.as_tag()
|
|
@@ -24,7 +24,7 @@ class VersionGitHubActionsOutput:
|
|
|
24
24
|
|
|
25
25
|
def __init__(
|
|
26
26
|
self,
|
|
27
|
-
gh_client: Github,
|
|
27
|
+
gh_client: Github | None = None,
|
|
28
28
|
mode: PersistenceMode = PersistenceMode.PERMANENT,
|
|
29
29
|
released: bool | None = None,
|
|
30
30
|
version: Version | None = None,
|
|
@@ -106,6 +106,12 @@ class VersionGitHubActionsOutput:
|
|
|
106
106
|
raise TypeError("output 'prev_version' should be a Version")
|
|
107
107
|
self._prev_version = value
|
|
108
108
|
|
|
109
|
+
@property
|
|
110
|
+
def gh_client(self) -> Github:
|
|
111
|
+
if not self._gh_client:
|
|
112
|
+
raise ValueError("GitHub client not set, cannot create links")
|
|
113
|
+
return self._gh_client
|
|
114
|
+
|
|
109
115
|
def to_output_text(self) -> str:
|
|
110
116
|
missing: set[str] = set()
|
|
111
117
|
if self.version is None:
|
|
@@ -128,7 +134,7 @@ class VersionGitHubActionsOutput:
|
|
|
128
134
|
"version": str(self.version),
|
|
129
135
|
"tag": self.tag,
|
|
130
136
|
"is_prerelease": str(self.is_prerelease).lower(),
|
|
131
|
-
"link": self.
|
|
137
|
+
"link": self.gh_client.create_release_url(self.tag) if self.tag else "",
|
|
132
138
|
"previous_version": str(self.prev_version) if self.prev_version else "",
|
|
133
139
|
"commit_sha": self.commit_sha if self.commit_sha else "",
|
|
134
140
|
}
|
|
@@ -346,24 +346,7 @@ def next_version(
|
|
|
346
346
|
# Step 5. apply the parser to each commit in the history (could return multiple results per commit)
|
|
347
347
|
parsed_results = list(map(commit_parser.parse, commits_since_last_release))
|
|
348
348
|
|
|
349
|
-
# Step 5A.
|
|
350
|
-
for parsed_result in parsed_results:
|
|
351
|
-
if not any(
|
|
352
|
-
(
|
|
353
|
-
isinstance(parsed_result, (ParseError, ParsedCommit)),
|
|
354
|
-
type(parsed_result) == list
|
|
355
|
-
and validate_types_in_sequence(
|
|
356
|
-
parsed_result, (ParseError, ParsedCommit)
|
|
357
|
-
),
|
|
358
|
-
type(parsed_result) == tuple
|
|
359
|
-
and validate_types_in_sequence(
|
|
360
|
-
parsed_result, (ParseError, ParsedCommit)
|
|
361
|
-
),
|
|
362
|
-
)
|
|
363
|
-
):
|
|
364
|
-
raise TypeError("Unexpected type returned from commit_parser.parse")
|
|
365
|
-
|
|
366
|
-
# Step 5B. Accumulate all parsed results into a single list accounting for possible multiple results per commit
|
|
349
|
+
# Step 5A. Accumulate all parsed results into a single list accounting for possible multiple results per commit
|
|
367
350
|
consolidated_results: list[ParseResult] = reduce(
|
|
368
351
|
lambda accumulated_results, p_results: [
|
|
369
352
|
*accumulated_results,
|
|
@@ -378,6 +361,10 @@ def next_version(
|
|
|
378
361
|
[],
|
|
379
362
|
)
|
|
380
363
|
|
|
364
|
+
# Step 5B. Validation type check for the parser results (important because of possible custom parsers)
|
|
365
|
+
if not validate_types_in_sequence(consolidated_results, (ParseError, ParsedCommit)):
|
|
366
|
+
raise TypeError("Unexpected type returned from commit_parser.parse")
|
|
367
|
+
|
|
381
368
|
# Step 5C. Parse the commits to determine the bump level that should be applied
|
|
382
369
|
parsed_levels: set[LevelBump] = {
|
|
383
370
|
parsed_result.bump # type: ignore[union-attr] # too complex for type checkers
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
"""Note: fixtures are stored in the tests/fixtures directory for better
|
|
1
|
+
"""Note: fixtures are stored in the tests/fixtures directory for better organization"""
|
|
2
2
|
|
|
3
3
|
from __future__ import annotations
|
|
4
4
|
|
|
@@ -9,7 +9,7 @@ from datetime import datetime, timedelta, timezone
|
|
|
9
9
|
from hashlib import md5
|
|
10
10
|
from pathlib import Path
|
|
11
11
|
from tempfile import NamedTemporaryFile
|
|
12
|
-
from typing import TYPE_CHECKING
|
|
12
|
+
from typing import TYPE_CHECKING, cast
|
|
13
13
|
from unittest import mock
|
|
14
14
|
|
|
15
15
|
import pytest
|
|
@@ -17,13 +17,15 @@ from click.testing import CliRunner
|
|
|
17
17
|
from filelock import FileLock
|
|
18
18
|
from git import Commit, Repo
|
|
19
19
|
|
|
20
|
+
from semantic_release.version.version import Version
|
|
21
|
+
|
|
20
22
|
from tests.const import PROJ_DIR
|
|
21
23
|
from tests.fixtures import *
|
|
22
24
|
from tests.util import copy_dir_tree, remove_dir_tree
|
|
23
25
|
|
|
24
26
|
if TYPE_CHECKING:
|
|
25
27
|
from tempfile import _TemporaryFileWrapper
|
|
26
|
-
from typing import Any, Callable, Generator, Protocol, Sequence, TypedDict
|
|
28
|
+
from typing import Any, Callable, Generator, Optional, Protocol, Sequence, TypedDict
|
|
27
29
|
|
|
28
30
|
from click.testing import Result
|
|
29
31
|
from filelock import AcquireReturnProxy
|
|
@@ -325,7 +327,7 @@ def get_authorization_to_build_repo_cache(
|
|
|
325
327
|
def get_cached_repo_data(request: pytest.FixtureRequest) -> GetCachedRepoDataFn:
|
|
326
328
|
def _get_cached_repo_data(proj_dirname: str) -> RepoData | None:
|
|
327
329
|
cache_key = f"psr/repos/{proj_dirname}"
|
|
328
|
-
return request.config.cache.get(cache_key, None)
|
|
330
|
+
return cast("Optional[RepoData]", request.config.cache.get(cache_key, None))
|
|
329
331
|
|
|
330
332
|
return _get_cached_repo_data
|
|
331
333
|
|
|
@@ -335,6 +337,10 @@ def set_cached_repo_data(request: pytest.FixtureRequest) -> SetCachedRepoDataFn:
|
|
|
335
337
|
def magic_serializer(obj: Any) -> Any:
|
|
336
338
|
if isinstance(obj, Path):
|
|
337
339
|
return obj.__fspath__()
|
|
340
|
+
|
|
341
|
+
if isinstance(obj, Version):
|
|
342
|
+
return obj.__dict__
|
|
343
|
+
|
|
338
344
|
return obj
|
|
339
345
|
|
|
340
346
|
def _set_cached_repo_data(proj_dirname: str, data: RepoData) -> None:
|
|
@@ -386,13 +392,30 @@ def build_repo_or_copy_cache(
|
|
|
386
392
|
with log_file_lock, log_file.open(mode="a") as afd:
|
|
387
393
|
afd.write(f"{stable_now_date().isoformat()}: {build_msg}...\n")
|
|
388
394
|
|
|
395
|
+
try:
|
|
396
|
+
# Try to build repository but catch any errors so that it doesn't cascade through all tests
|
|
397
|
+
# do to an unreleased lock
|
|
398
|
+
build_definition = build_repo_func(cached_repo_path)
|
|
399
|
+
except Exception:
|
|
400
|
+
remove_dir_tree(cached_repo_path, force=True)
|
|
401
|
+
|
|
402
|
+
if filelock:
|
|
403
|
+
filelock.lock.release()
|
|
404
|
+
|
|
405
|
+
with log_file_lock, log_file.open(mode="a") as afd:
|
|
406
|
+
afd.write(
|
|
407
|
+
f"{stable_now_date().isoformat()}: {build_msg}...FAILED\n"
|
|
408
|
+
)
|
|
409
|
+
|
|
410
|
+
raise
|
|
411
|
+
|
|
389
412
|
# Marks the date when the cached repo was created
|
|
390
413
|
set_cached_repo_data(
|
|
391
414
|
repo_name,
|
|
392
415
|
{
|
|
393
416
|
"build_date": today_date_str,
|
|
394
417
|
"build_spec_hash": build_spec_hash,
|
|
395
|
-
"build_definition":
|
|
418
|
+
"build_definition": build_definition,
|
|
396
419
|
},
|
|
397
420
|
)
|
|
398
421
|
|
|
@@ -14,7 +14,6 @@ import semantic_release.hvcs.github
|
|
|
14
14
|
from semantic_release.changelog.context import ChangelogMode
|
|
15
15
|
from semantic_release.cli.config import ChangelogOutputFormat
|
|
16
16
|
from semantic_release.hvcs.github import Github
|
|
17
|
-
from semantic_release.version.version import Version
|
|
18
17
|
|
|
19
18
|
from tests.const import (
|
|
20
19
|
CHANGELOG_SUBCMD,
|
|
@@ -77,6 +76,12 @@ if TYPE_CHECKING:
|
|
|
77
76
|
|
|
78
77
|
from requests_mock import Mocker
|
|
79
78
|
|
|
79
|
+
from semantic_release.commit_parser.conventional import (
|
|
80
|
+
ConventionalCommitParser,
|
|
81
|
+
)
|
|
82
|
+
from semantic_release.commit_parser.emoji import EmojiCommitParser
|
|
83
|
+
from semantic_release.commit_parser.scipy import ScipyCommitParser
|
|
84
|
+
|
|
80
85
|
from tests.conftest import RunCliFn
|
|
81
86
|
from tests.e2e.conftest import RetrieveRuntimeContextFn
|
|
82
87
|
from tests.fixtures.example_project import (
|
|
@@ -867,9 +872,12 @@ def test_changelog_update_mode_unreleased_n_released(
|
|
|
867
872
|
commit_n_rtn_changelog_entry: CommitNReturnChangelogEntryFn,
|
|
868
873
|
changelog_file: Path,
|
|
869
874
|
insertion_flag: str,
|
|
870
|
-
get_commit_def_of_conventional_commit: GetCommitDefFn,
|
|
871
|
-
get_commit_def_of_emoji_commit: GetCommitDefFn,
|
|
872
|
-
get_commit_def_of_scipy_commit: GetCommitDefFn,
|
|
875
|
+
get_commit_def_of_conventional_commit: GetCommitDefFn[ConventionalCommitParser],
|
|
876
|
+
get_commit_def_of_emoji_commit: GetCommitDefFn[EmojiCommitParser],
|
|
877
|
+
get_commit_def_of_scipy_commit: GetCommitDefFn[ScipyCommitParser],
|
|
878
|
+
default_conventional_parser: ConventionalCommitParser,
|
|
879
|
+
default_emoji_parser: EmojiCommitParser,
|
|
880
|
+
default_scipy_parser: ScipyCommitParser,
|
|
873
881
|
):
|
|
874
882
|
"""
|
|
875
883
|
Given there are unreleased changes and a previous release in the changelog,
|
|
@@ -890,18 +898,23 @@ def test_changelog_update_mode_unreleased_n_released(
|
|
|
890
898
|
commit_n_section: Commit2Section = {
|
|
891
899
|
"conventional": {
|
|
892
900
|
"commit": get_commit_def_of_conventional_commit(
|
|
893
|
-
"perf: improve the performance of the application"
|
|
901
|
+
"perf: improve the performance of the application",
|
|
902
|
+
parser=default_conventional_parser,
|
|
894
903
|
),
|
|
895
904
|
"section": "Performance Improvements",
|
|
896
905
|
},
|
|
897
906
|
"emoji": {
|
|
898
907
|
"commit": get_commit_def_of_emoji_commit(
|
|
899
|
-
":zap: improve the performance of the application"
|
|
908
|
+
":zap: improve the performance of the application",
|
|
909
|
+
parser=default_emoji_parser,
|
|
900
910
|
),
|
|
901
911
|
"section": ":zap:",
|
|
902
912
|
},
|
|
903
913
|
"scipy": {
|
|
904
|
-
"commit": get_commit_def_of_scipy_commit(
|
|
914
|
+
"commit": get_commit_def_of_scipy_commit(
|
|
915
|
+
"MAINT: fix an issue",
|
|
916
|
+
parser=default_scipy_parser,
|
|
917
|
+
),
|
|
905
918
|
"section": "Fix",
|
|
906
919
|
},
|
|
907
920
|
}
|
|
@@ -1095,9 +1108,7 @@ def test_custom_release_notes_template(
|
|
|
1095
1108
|
) -> None:
|
|
1096
1109
|
"""Verify the template `.release_notes.md.j2` from `template_dir` is used."""
|
|
1097
1110
|
expected_call_count = 1
|
|
1098
|
-
version =
|
|
1099
|
-
get_versions_from_repo_build_def(repo_result["definition"])[-1]
|
|
1100
|
-
)
|
|
1111
|
+
version = get_versions_from_repo_build_def(repo_result["definition"])[-1]
|
|
1101
1112
|
|
|
1102
1113
|
# Setup
|
|
1103
1114
|
use_release_notes_template()
|
|
@@ -18,6 +18,10 @@ from tests.util import (
|
|
|
18
18
|
if TYPE_CHECKING:
|
|
19
19
|
from pathlib import Path
|
|
20
20
|
|
|
21
|
+
from semantic_release.commit_parser.conventional import (
|
|
22
|
+
ConventionalCommitParser,
|
|
23
|
+
)
|
|
24
|
+
|
|
21
25
|
from tests.conftest import RunCliFn
|
|
22
26
|
from tests.fixtures.example_project import UpdatePyprojectTomlFn, UseCustomParserFn
|
|
23
27
|
from tests.fixtures.git_repo import BuiltRepoResult, GetCommitDefFn
|
|
@@ -31,9 +35,10 @@ def test_changelog_custom_parser_remove_from_changelog(
|
|
|
31
35
|
run_cli: RunCliFn,
|
|
32
36
|
update_pyproject_toml: UpdatePyprojectTomlFn,
|
|
33
37
|
use_custom_parser: UseCustomParserFn,
|
|
34
|
-
get_commit_def_of_conventional_commit: GetCommitDefFn,
|
|
38
|
+
get_commit_def_of_conventional_commit: GetCommitDefFn[ConventionalCommitParser],
|
|
35
39
|
changelog_md_file: Path,
|
|
36
40
|
default_md_changelog_insertion_flag: str,
|
|
41
|
+
default_conventional_parser: ConventionalCommitParser,
|
|
37
42
|
):
|
|
38
43
|
"""
|
|
39
44
|
Given when a changelog filtering custom parser is configured
|
|
@@ -41,7 +46,8 @@ def test_changelog_custom_parser_remove_from_changelog(
|
|
|
41
46
|
Then the commit message is not included in the resulting changelog
|
|
42
47
|
"""
|
|
43
48
|
ignored_commit_def = get_commit_def_of_conventional_commit(
|
|
44
|
-
"chore: do not include me in the changelog"
|
|
49
|
+
"chore: do not include me in the changelog",
|
|
50
|
+
parser=default_conventional_parser,
|
|
45
51
|
)
|
|
46
52
|
|
|
47
53
|
# Because we are in init mode, the insertion flag is not present in the changelog
|
|
@@ -6,8 +6,6 @@ from typing import TYPE_CHECKING
|
|
|
6
6
|
import pytest
|
|
7
7
|
from pytest_lazy_fixtures import lf as lazy_fixture
|
|
8
8
|
|
|
9
|
-
from semantic_release.version.version import Version
|
|
10
|
-
|
|
11
9
|
from tests.const import CHANGELOG_SUBCMD, EXAMPLE_PROJECT_LICENSE, MAIN_PROG_NAME
|
|
12
10
|
from tests.fixtures.repos import (
|
|
13
11
|
repo_w_github_flow_w_default_release_channel_conventional_commits,
|
|
@@ -21,7 +19,7 @@ from tests.util import assert_successful_exit_code
|
|
|
21
19
|
if TYPE_CHECKING:
|
|
22
20
|
from requests_mock import Mocker
|
|
23
21
|
|
|
24
|
-
from tests.conftest import GetStableDateNowFn, RunCliFn
|
|
22
|
+
from tests.conftest import GetCachedRepoDataFn, GetStableDateNowFn, RunCliFn
|
|
25
23
|
from tests.fixtures.example_project import UpdatePyprojectTomlFn
|
|
26
24
|
from tests.fixtures.git_repo import (
|
|
27
25
|
BuiltRepoResult,
|
|
@@ -56,19 +54,16 @@ def test_changelog_latest_release_notes(
|
|
|
56
54
|
repo_def = repo_result["definition"]
|
|
57
55
|
tag_format_str: str = get_cfg_value_from_def(repo_def, "tag_format_str") # type: ignore[assignment]
|
|
58
56
|
repo_actions_per_version = split_repo_actions_by_release_tags(
|
|
59
|
-
repo_definition=repo_def
|
|
60
|
-
tag_format_str=tag_format_str,
|
|
57
|
+
repo_definition=repo_def
|
|
61
58
|
)
|
|
62
59
|
all_versions = get_versions_from_repo_build_def(repo_def)
|
|
63
60
|
latest_release_version = all_versions[-1]
|
|
64
61
|
release_tag = tag_format_str.format(version=latest_release_version)
|
|
65
62
|
|
|
66
63
|
expected_release_notes = generate_default_release_notes_from_def(
|
|
67
|
-
version_actions=repo_actions_per_version[
|
|
64
|
+
version_actions=repo_actions_per_version[latest_release_version],
|
|
68
65
|
hvcs=get_hvcs_client_from_repo_def(repo_def),
|
|
69
|
-
previous_version=(
|
|
70
|
-
Version.parse(all_versions[-2]) if len(all_versions) > 1 else None
|
|
71
|
-
),
|
|
66
|
+
previous_version=(all_versions[-2] if len(all_versions) > 1 else None),
|
|
72
67
|
license_name=EXAMPLE_PROJECT_LICENSE,
|
|
73
68
|
mask_initial_release=get_cfg_value_from_def(repo_def, "mask_initial_release"),
|
|
74
69
|
)
|
|
@@ -130,8 +125,7 @@ def test_changelog_previous_release_notes(
|
|
|
130
125
|
repo_def = repo_result["definition"]
|
|
131
126
|
tag_format_str: str = get_cfg_value_from_def(repo_def, "tag_format_str") # type: ignore[assignment]
|
|
132
127
|
repo_actions_per_version = split_repo_actions_by_release_tags(
|
|
133
|
-
repo_definition=repo_def
|
|
134
|
-
tag_format_str=tag_format_str,
|
|
128
|
+
repo_definition=repo_def
|
|
135
129
|
)
|
|
136
130
|
# Extract all versions except for the latest one
|
|
137
131
|
all_prev_versions = get_versions_from_repo_build_def(repo_def)[:-1]
|
|
@@ -139,10 +133,10 @@ def test_changelog_previous_release_notes(
|
|
|
139
133
|
release_tag = tag_format_str.format(version=latest_release_version)
|
|
140
134
|
|
|
141
135
|
expected_release_notes = generate_default_release_notes_from_def(
|
|
142
|
-
version_actions=repo_actions_per_version[
|
|
136
|
+
version_actions=repo_actions_per_version[latest_release_version],
|
|
143
137
|
hvcs=get_hvcs_client_from_repo_def(repo_def),
|
|
144
138
|
previous_version=(
|
|
145
|
-
|
|
139
|
+
all_prev_versions[-2] if len(all_prev_versions) > 1 else None
|
|
146
140
|
),
|
|
147
141
|
license_name=EXAMPLE_PROJECT_LICENSE,
|
|
148
142
|
mask_initial_release=mask_initial_release,
|
|
@@ -170,17 +164,17 @@ def test_changelog_previous_release_notes(
|
|
|
170
164
|
|
|
171
165
|
|
|
172
166
|
@pytest.mark.parametrize(
|
|
173
|
-
"repo_result,
|
|
167
|
+
"repo_result, repo_fixture_name, mask_initial_release, license_name",
|
|
174
168
|
[
|
|
175
169
|
(
|
|
176
170
|
lazy_fixture(repo_w_trunk_only_conventional_commits.__name__),
|
|
177
|
-
|
|
171
|
+
repo_w_trunk_only_conventional_commits.__name__,
|
|
178
172
|
True,
|
|
179
173
|
"BSD-3-Clause",
|
|
180
174
|
),
|
|
181
175
|
pytest.param(
|
|
182
176
|
lazy_fixture(repo_w_trunk_only_conventional_commits.__name__),
|
|
183
|
-
|
|
177
|
+
repo_w_trunk_only_conventional_commits.__name__,
|
|
184
178
|
False,
|
|
185
179
|
"BSD-3-Clause",
|
|
186
180
|
marks=pytest.mark.comprehensive,
|
|
@@ -188,7 +182,7 @@ def test_changelog_previous_release_notes(
|
|
|
188
182
|
*[
|
|
189
183
|
pytest.param(
|
|
190
184
|
lazy_fixture(repo_fixture_name),
|
|
191
|
-
|
|
185
|
+
repo_fixture_name,
|
|
192
186
|
mask_initial_release,
|
|
193
187
|
"BSD-3-Clause",
|
|
194
188
|
marks=pytest.mark.comprehensive,
|
|
@@ -216,15 +210,15 @@ def test_changelog_release_notes_license_change(
|
|
|
216
210
|
split_repo_actions_by_release_tags: SplitRepoActionsByReleaseTagsFn,
|
|
217
211
|
generate_default_release_notes_from_def: GenerateDefaultReleaseNotesFromDefFn,
|
|
218
212
|
update_pyproject_toml: UpdatePyprojectTomlFn,
|
|
219
|
-
|
|
220
|
-
cache_key: str,
|
|
213
|
+
repo_fixture_name: str,
|
|
221
214
|
stable_now_date: GetStableDateNowFn,
|
|
215
|
+
get_cached_repo_data: GetCachedRepoDataFn,
|
|
222
216
|
):
|
|
223
217
|
# Setup
|
|
224
218
|
repo_def = repo_result["definition"]
|
|
225
219
|
tag_format_str: str = get_cfg_value_from_def(repo_def, "tag_format_str") # type: ignore[assignment]
|
|
226
220
|
|
|
227
|
-
if not (repo_build_data :=
|
|
221
|
+
if not (repo_build_data := get_cached_repo_data(repo_fixture_name)):
|
|
228
222
|
pytest.fail("Repo build date not found in cache")
|
|
229
223
|
|
|
230
224
|
repo_build_datetime = datetime.strptime(repo_build_data["build_date"], "%Y-%m-%d")
|
|
@@ -236,7 +230,6 @@ def test_changelog_release_notes_license_change(
|
|
|
236
230
|
|
|
237
231
|
repo_actions_per_version = split_repo_actions_by_release_tags(
|
|
238
232
|
repo_definition=repo_def,
|
|
239
|
-
tag_format_str=tag_format_str,
|
|
240
233
|
)
|
|
241
234
|
# Extract all versions
|
|
242
235
|
all_versions = get_versions_from_repo_build_def(repo_def)
|
|
@@ -247,21 +240,17 @@ def test_changelog_release_notes_license_change(
|
|
|
247
240
|
prev_release_tag = tag_format_str.format(version=previous_release_version)
|
|
248
241
|
|
|
249
242
|
expected_release_notes = generate_default_release_notes_from_def(
|
|
250
|
-
version_actions=repo_actions_per_version[
|
|
243
|
+
version_actions=repo_actions_per_version[latest_release_version],
|
|
251
244
|
hvcs=get_hvcs_client_from_repo_def(repo_def),
|
|
252
|
-
previous_version=(
|
|
253
|
-
Version.parse(previous_release_version) if len(all_versions) > 1 else None
|
|
254
|
-
),
|
|
245
|
+
previous_version=(previous_release_version if len(all_versions) > 1 else None),
|
|
255
246
|
license_name=license_name,
|
|
256
247
|
mask_initial_release=mask_initial_release,
|
|
257
248
|
)
|
|
258
249
|
|
|
259
250
|
expected_prev_release_notes = generate_default_release_notes_from_def(
|
|
260
|
-
version_actions=repo_actions_per_version[
|
|
251
|
+
version_actions=repo_actions_per_version[previous_release_version],
|
|
261
252
|
hvcs=get_hvcs_client_from_repo_def(repo_def),
|
|
262
|
-
previous_version=(
|
|
263
|
-
Version.parse(all_versions[-3]) if len(all_versions) > 2 else None
|
|
264
|
-
),
|
|
253
|
+
previous_version=(all_versions[-3] if len(all_versions) > 2 else None),
|
|
265
254
|
license_name=EXAMPLE_PROJECT_LICENSE,
|
|
266
255
|
mask_initial_release=mask_initial_release,
|
|
267
256
|
)
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
from __future__ import annotations
|
|
2
2
|
|
|
3
|
+
from pathlib import Path
|
|
3
4
|
from typing import TYPE_CHECKING
|
|
4
5
|
|
|
5
6
|
import pytest
|
|
@@ -11,8 +12,7 @@ from tests.const import MAIN_PROG_NAME, VERSION_SUBCMD
|
|
|
11
12
|
from tests.util import assert_successful_exit_code
|
|
12
13
|
|
|
13
14
|
if TYPE_CHECKING:
|
|
14
|
-
from
|
|
15
|
-
from typing import Protocol
|
|
15
|
+
from typing import Protocol, Sequence
|
|
16
16
|
|
|
17
17
|
from click.testing import Result
|
|
18
18
|
|
|
@@ -24,7 +24,8 @@ if TYPE_CHECKING:
|
|
|
24
24
|
def __call__(
|
|
25
25
|
self,
|
|
26
26
|
mirror_repo_dir: Path,
|
|
27
|
-
|
|
27
|
+
configuration_steps: Sequence[RepoActionConfigure],
|
|
28
|
+
files_to_remove: Sequence[Path],
|
|
28
29
|
) -> Path: ...
|
|
29
30
|
|
|
30
31
|
class RunPSReleaseFn(Protocol):
|
|
@@ -32,18 +33,18 @@ if TYPE_CHECKING:
|
|
|
32
33
|
self,
|
|
33
34
|
next_version_str: str,
|
|
34
35
|
git_repo: Repo,
|
|
36
|
+
config_toml_path: Path = ...,
|
|
35
37
|
) -> Result: ...
|
|
36
38
|
|
|
37
39
|
|
|
38
40
|
@pytest.fixture(scope="session")
|
|
39
41
|
def init_mirror_repo_for_rebuild(
|
|
40
42
|
build_repo_from_definition: BuildRepoFromDefinitionFn,
|
|
41
|
-
changelog_md_file: Path,
|
|
42
|
-
changelog_rst_file: Path,
|
|
43
43
|
) -> InitMirrorRepo4RebuildFn:
|
|
44
44
|
def _init_mirror_repo_for_rebuild(
|
|
45
45
|
mirror_repo_dir: Path,
|
|
46
|
-
|
|
46
|
+
configuration_steps: Sequence[RepoActionConfigure],
|
|
47
|
+
files_to_remove: Sequence[Path],
|
|
47
48
|
) -> Path:
|
|
48
49
|
# Create the mirror repo directory
|
|
49
50
|
mirror_repo_dir.mkdir(exist_ok=True, parents=True)
|
|
@@ -51,13 +52,23 @@ def init_mirror_repo_for_rebuild(
|
|
|
51
52
|
# Initialize mirror repository
|
|
52
53
|
build_repo_from_definition(
|
|
53
54
|
dest_dir=mirror_repo_dir,
|
|
54
|
-
repo_construction_steps=
|
|
55
|
+
repo_construction_steps=configuration_steps,
|
|
55
56
|
)
|
|
56
57
|
|
|
57
58
|
with Repo(mirror_repo_dir) as mirror_git_repo:
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
59
|
+
for filepath in files_to_remove:
|
|
60
|
+
file = (
|
|
61
|
+
(mirror_git_repo.working_dir / filepath).resolve().absolute()
|
|
62
|
+
if not filepath.is_absolute()
|
|
63
|
+
else filepath
|
|
64
|
+
)
|
|
65
|
+
if (
|
|
66
|
+
Path(mirror_git_repo.working_dir) not in file.parents
|
|
67
|
+
or not file.exists()
|
|
68
|
+
):
|
|
69
|
+
continue
|
|
70
|
+
|
|
71
|
+
mirror_git_repo.git.rm(str(file), force=True)
|
|
61
72
|
|
|
62
73
|
return mirror_repo_dir
|
|
63
74
|
|
|
@@ -69,6 +80,7 @@ def run_psr_release(
|
|
|
69
80
|
run_cli: RunCliFn,
|
|
70
81
|
changelog_rst_file: Path,
|
|
71
82
|
update_pyproject_toml: UpdatePyprojectTomlFn,
|
|
83
|
+
pyproject_toml_file: Path,
|
|
72
84
|
) -> RunPSReleaseFn:
|
|
73
85
|
base_version_cmd = [MAIN_PROG_NAME, "--strict", VERSION_SUBCMD]
|
|
74
86
|
write_changelog_only_cmd = [
|
|
@@ -82,6 +94,7 @@ def run_psr_release(
|
|
|
82
94
|
def _run_psr_release(
|
|
83
95
|
next_version_str: str,
|
|
84
96
|
git_repo: Repo,
|
|
97
|
+
config_toml_path: Path = pyproject_toml_file,
|
|
85
98
|
) -> Result:
|
|
86
99
|
version_n_buildmeta = next_version_str.split("+", maxsplit=1)
|
|
87
100
|
version_n_prerelease = version_n_buildmeta[0].split("-", maxsplit=1)
|
|
@@ -107,6 +120,7 @@ def run_psr_release(
|
|
|
107
120
|
update_pyproject_toml(
|
|
108
121
|
"tool.semantic_release.changelog.default_templates.changelog_file",
|
|
109
122
|
str(changelog_rst_file),
|
|
123
|
+
toml_file=config_toml_path,
|
|
110
124
|
)
|
|
111
125
|
cli_cmd = [*write_changelog_only_cmd, *prerelease_args, *build_metadata_args]
|
|
112
126
|
result = run_cli(cli_cmd[1:], env={Github.DEFAULT_ENV_TOKEN_NAME: "1234"})
|
|
@@ -116,7 +130,7 @@ def run_psr_release(
|
|
|
116
130
|
git_repo.git.reset("--mixed", "HEAD")
|
|
117
131
|
|
|
118
132
|
# Add the changelog file to the git index but reset the working directory
|
|
119
|
-
git_repo.git.add(str(changelog_rst_file))
|
|
133
|
+
git_repo.git.add(str(changelog_rst_file.resolve()))
|
|
120
134
|
git_repo.git.checkout("--", ".")
|
|
121
135
|
|
|
122
136
|
# Actual run to release & write the MD changelog
|