python-semantic-release 10.5.1__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.
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/PKG-INFO +1 -1
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/docs/configuration/automatic-releases/github-actions.rst +7 -7
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/pyproject.toml +2 -1
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/cli/commands/version.py +2 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/commit_parser/conventional/options_monorepo.py +26 -17
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/gitproject.py +46 -2
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/conftest.py +9 -1
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/test_version_print.py +2 -25
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/test_version_upstream_check.py +159 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/fixtures/git_repo.py +16 -36
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/fixtures/monorepos/example_monorepo.py +42 -2
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/fixtures/monorepos/github_flow/monorepo_w_default_release.py +21 -8
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/fixtures/monorepos/github_flow/monorepo_w_release_channels.py +15 -10
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/fixtures/monorepos/trunk_based_dev/monorepo_w_tags.py +23 -7
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/semantic_release/test_gitproject.py +20 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/util.py +14 -19
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/LICENSE +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/MANIFEST.in +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/README.rst +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/docs/Makefile +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/docs/api/commands.rst +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/docs/concepts/changelog_templates.rst +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/docs/concepts/commit_parsing.rst +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/docs/concepts/getting_started.rst +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/docs/concepts/index.rst +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/docs/concepts/installation.rst +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/docs/concepts/multibranch_releases.rst +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/docs/concepts/strict_mode.rst +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/docs/conf.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/docs/configuration/automatic-releases/cronjobs.rst +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/docs/configuration/automatic-releases/index.rst +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/docs/configuration/automatic-releases/travis.rst +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/docs/configuration/configuration-guides/index.rst +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/docs/configuration/configuration-guides/monorepos-ex-easy-before-release.png +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/docs/configuration/configuration-guides/monorepos-ex-easy-post-release.png +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/docs/configuration/configuration-guides/monorepos.rst +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/docs/configuration/configuration-guides/uv_integration.rst +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/docs/configuration/configuration.rst +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/docs/configuration/index.rst +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/docs/contributing/contributing_guide.rst +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/docs/contributing/index.rst +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/docs/index.rst +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/docs/make.bat +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/docs/misc/psr_changelog.rst +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/docs/misc/troubleshooting.rst +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/docs/upgrading/08-upgrade.rst +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/docs/upgrading/09-upgrade.rst +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/docs/upgrading/10-upgrade.rst +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/docs/upgrading/index.rst +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/setup.cfg +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/python_semantic_release.egg-info/SOURCES.txt +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/__init__.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/__main__.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/changelog/__init__.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/changelog/context.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/changelog/release_history.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/changelog/template.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/cli/__init__.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/cli/changelog_writer.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/cli/cli_context.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/cli/commands/__init__.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/cli/commands/changelog.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/cli/commands/generate_config.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/cli/commands/main.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/cli/commands/publish.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/cli/config.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/cli/const.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/cli/github_actions_output.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/cli/masking_filter.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/cli/util.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/commit_parser/__init__.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/commit_parser/_base.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/commit_parser/angular.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/commit_parser/conventional/__init__.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/commit_parser/conventional/options.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/commit_parser/conventional/parser.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/commit_parser/conventional/parser_monorepo.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/commit_parser/emoji.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/commit_parser/scipy.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/commit_parser/tag.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/commit_parser/token.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/commit_parser/util.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/const.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/data/templates/conventional/md/.components/changelog_header.md.j2 +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/data/templates/conventional/md/.components/changelog_init.md.j2 +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/data/templates/conventional/md/.components/changelog_update.md.j2 +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/data/templates/conventional/md/.components/changes.md.j2 +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/data/templates/conventional/md/.components/first_release.md.j2 +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/data/templates/conventional/md/.components/macros.md.j2 +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/data/templates/conventional/md/.components/unreleased_changes.md.j2 +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/data/templates/conventional/md/.components/versioned_changes.md.j2 +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/data/templates/conventional/md/.release_notes.md.j2 +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/data/templates/conventional/md/CHANGELOG.md.j2 +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/data/templates/conventional/rst/.components/changelog_header.rst.j2 +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/data/templates/conventional/rst/.components/changelog_init.rst.j2 +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/data/templates/conventional/rst/.components/changelog_update.rst.j2 +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/data/templates/conventional/rst/.components/changes.rst.j2 +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/data/templates/conventional/rst/.components/first_release.rst.j2 +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/data/templates/conventional/rst/.components/macros.rst.j2 +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/data/templates/conventional/rst/.components/unreleased_changes.rst.j2 +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/data/templates/conventional/rst/.components/versioned_changes.rst.j2 +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/data/templates/conventional/rst/CHANGELOG.rst.j2 +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/enums.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/errors.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/globals.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/helpers.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/hvcs/__init__.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/hvcs/_base.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/hvcs/bitbucket.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/hvcs/gitea.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/hvcs/github.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/hvcs/gitlab.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/hvcs/remote_hvcs_base.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/hvcs/token_auth.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/hvcs/util.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/py.typed +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/version/__init__.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/version/algorithm.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/version/declaration.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/version/declarations/__init__.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/version/declarations/enum.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/version/declarations/i_version_replacer.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/version/declarations/pattern.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/version/declarations/toml.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/version/translator.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/version/version.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/__init__.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/const.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/__init__.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_changelog/__init__.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_changelog/test_changelog.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_changelog/test_changelog_custom_parser.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_changelog/test_changelog_parsing.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_changelog/test_changelog_release_notes.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_config/__init__.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_config/test_generate_config.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_publish/__init__.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_publish/test_publish.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/__init__.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/__init__.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/conftest.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/git_flow/__init__.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/git_flow/test_repo_1_channel.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/git_flow/test_repo_2_channels.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/git_flow/test_repo_3_channels.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/git_flow/test_repo_4_channels.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/github_flow/__init__.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/github_flow/test_repo_1_channel.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/github_flow/test_repo_1_channel_branch_update_merge.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/github_flow/test_repo_2_channels.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/github_flow_monorepo/__init__.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/github_flow_monorepo/test_monorepo_1_channel.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/github_flow_monorepo/test_monorepo_2_channels.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/trunk_based_dev/__init__.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/trunk_based_dev/test_repo_trunk.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/trunk_based_dev/test_repo_trunk_dual_version_support.py +0 -0
- {python_semantic_release-10.5.1 → 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
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/trunk_based_dev/test_repo_trunk_w_prereleases.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/trunk_based_dev_monorepo/__init__.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/bump_version/trunk_based_dev_monorepo/test_monorepo_trunk.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/test_version.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/test_version_build.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/test_version_bump.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/test_version_changelog.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/test_version_changelog_custom_commit_msg.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/test_version_github_actions.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/test_version_partial_tag.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/test_version_release_notes.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/test_version_shallow.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/test_version_stamp.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/cmd_version/test_version_strict.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/conftest.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/test_help.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/e2e/test_main.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/fixtures/__init__.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/fixtures/commit_parsers.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/fixtures/example_project.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/fixtures/monorepos/__init__.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/fixtures/monorepos/git_monorepo.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/fixtures/monorepos/github_flow/__init__.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/fixtures/monorepos/trunk_based_dev/__init__.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/fixtures/repos/__init__.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/fixtures/repos/git_flow/__init__.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/fixtures/repos/git_flow/repo_w_1_release_channel.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/fixtures/repos/git_flow/repo_w_2_release_channels.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/fixtures/repos/git_flow/repo_w_3_release_channels.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/fixtures/repos/git_flow/repo_w_4_release_channels.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/fixtures/repos/github_flow/__init__.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/fixtures/repos/github_flow/repo_w_default_release.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/fixtures/repos/github_flow/repo_w_default_release_w_branch_update_merge.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/fixtures/repos/github_flow/repo_w_release_channels.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/fixtures/repos/repo_initial_commit.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/fixtures/repos/trunk_based_dev/__init__.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/fixtures/repos/trunk_based_dev/repo_w_dual_version_support.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/fixtures/repos/trunk_based_dev/repo_w_dual_version_support_w_prereleases.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/fixtures/repos/trunk_based_dev/repo_w_no_tags.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/fixtures/repos/trunk_based_dev/repo_w_prereleases.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/fixtures/repos/trunk_based_dev/repo_w_tags.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/fixtures/scipy.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/__init__.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/conftest.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/semantic_release/__init__.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/semantic_release/changelog/__init__.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/semantic_release/changelog/conftest.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/semantic_release/changelog/test_changelog_context.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/semantic_release/changelog/test_default_changelog.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/semantic_release/changelog/test_release_history.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/semantic_release/changelog/test_release_notes.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/semantic_release/changelog/test_template.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/semantic_release/changelog/test_template_render.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/semantic_release/cli/__init__.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/semantic_release/cli/test_config.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/semantic_release/cli/test_github_actions_output.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/semantic_release/cli/test_masking_filter.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/semantic_release/cli/test_util.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/semantic_release/cli/test_version.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/semantic_release/commit_parser/__init__.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/semantic_release/commit_parser/test_conventional.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/semantic_release/commit_parser/test_emoji.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/semantic_release/commit_parser/test_parsed_commit.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/semantic_release/commit_parser/test_scipy.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/semantic_release/commit_parser/test_util.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/semantic_release/hvcs/__init__.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/semantic_release/hvcs/test__base.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/semantic_release/hvcs/test_bitbucket.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/semantic_release/hvcs/test_gitea.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/semantic_release/hvcs/test_github.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/semantic_release/hvcs/test_gitlab.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/semantic_release/hvcs/test_token_auth.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/semantic_release/hvcs/test_util.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/semantic_release/test_helpers.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/semantic_release/version/__init__.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/semantic_release/version/declarations/__init__.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/semantic_release/version/declarations/test_pattern_declaration.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/semantic_release/version/declarations/test_toml_declaration.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/semantic_release/version/test_algorithm.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/semantic_release/version/test_translator.py +0 -0
- {python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/unit/semantic_release/version/test_version.py +0 -0
|
@@ -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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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 }
|
|
@@ -722,6 +722,7 @@ def version( # noqa: C901
|
|
|
722
722
|
)
|
|
723
723
|
except GitCommitEmptyIndexError:
|
|
724
724
|
logger.info("No local changes to add to any commit, skipping")
|
|
725
|
+
commit_changes = False
|
|
725
726
|
|
|
726
727
|
# Tag the version after potentially creating a new HEAD commit.
|
|
727
728
|
# This way if no source code is modified, i.e. all metadata updates
|
|
@@ -752,6 +753,7 @@ def version( # noqa: C901
|
|
|
752
753
|
project.verify_upstream_unchanged(
|
|
753
754
|
local_ref="HEAD~1",
|
|
754
755
|
upstream_ref=config.remote.name,
|
|
756
|
+
remote_url=remote_url,
|
|
755
757
|
noop=opts.noop,
|
|
756
758
|
)
|
|
757
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
|
-
|
|
49
|
-
|
|
50
|
-
|
|
47
|
+
@classmethod
|
|
48
|
+
def convert_strs_to_paths(cls, value: Any) -> tuple[str, ...]:
|
|
49
|
+
if isinstance(value, str):
|
|
50
|
+
return (value,)
|
|
51
51
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
results.append(Path(val))
|
|
55
|
-
continue
|
|
52
|
+
if isinstance(value, Path):
|
|
53
|
+
return (str(value),)
|
|
56
54
|
|
|
57
|
-
|
|
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
|
-
|
|
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
|
-
|
|
71
|
+
@classmethod
|
|
72
|
+
def resolve_path(cls, dir_path_strs: tuple[str, ...]) -> tuple[str, ...]:
|
|
64
73
|
return tuple(
|
|
65
74
|
(
|
|
66
|
-
|
|
75
|
+
f"!{Path(str_path[1:]).expanduser().absolute().resolve()}"
|
|
67
76
|
# maintains the negation prefix if it exists
|
|
68
|
-
if
|
|
77
|
+
if str_path.startswith("!")
|
|
69
78
|
# otherwise, resolve the path normally
|
|
70
|
-
else
|
|
79
|
+
else str(Path(str_path).expanduser().absolute().resolve())
|
|
71
80
|
)
|
|
72
|
-
for
|
|
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 ""
|
{python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/src/semantic_release/gitproject.py
RENAMED
|
@@ -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,
|
|
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
|
-
|
|
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}'"
|
|
@@ -206,6 +206,10 @@ def run_cli(clean_os_environment: dict[str, str]) -> RunCliFn:
|
|
|
206
206
|
invoke_kwargs: dict[str, Any] | None = None,
|
|
207
207
|
) -> Result:
|
|
208
208
|
from semantic_release.cli.commands.main import main
|
|
209
|
+
from semantic_release.globals import logger
|
|
210
|
+
|
|
211
|
+
# Prevent logs from being propagated to the root logger (pytest)
|
|
212
|
+
logger.propagate = False
|
|
209
213
|
|
|
210
214
|
cli_runner = CliRunner(mix_stderr=False)
|
|
211
215
|
env_vars = {**clean_os_environment, **(env or {})}
|
|
@@ -213,7 +217,11 @@ def run_cli(clean_os_environment: dict[str, str]) -> RunCliFn:
|
|
|
213
217
|
|
|
214
218
|
with mock.patch.dict(os.environ, env_vars, clear=True):
|
|
215
219
|
# run the CLI with the provided arguments
|
|
216
|
-
|
|
220
|
+
result = cli_runner.invoke(main, args=args, **(invoke_kwargs or {}))
|
|
221
|
+
# Force the output to be printed to stdout which will be captured by pytest
|
|
222
|
+
sys.stdout.write(result.stdout)
|
|
223
|
+
sys.stderr.write(result.stderr)
|
|
224
|
+
return result
|
|
217
225
|
|
|
218
226
|
return _run_cli
|
|
219
227
|
|
|
@@ -105,7 +105,6 @@ def test_version_print_next_version(
|
|
|
105
105
|
next_release_version: str,
|
|
106
106
|
file_in_repo: str,
|
|
107
107
|
run_cli: RunCliFn,
|
|
108
|
-
mocked_git_fetch: MagicMock,
|
|
109
108
|
mocked_git_push: MagicMock,
|
|
110
109
|
post_mocker: Mocker,
|
|
111
110
|
):
|
|
@@ -270,7 +269,6 @@ def test_version_print_tag_prints_next_tag(
|
|
|
270
269
|
get_cfg_value_from_def: GetCfgValueFromDefFn,
|
|
271
270
|
file_in_repo: str,
|
|
272
271
|
run_cli: RunCliFn,
|
|
273
|
-
mocked_git_fetch: MagicMock,
|
|
274
272
|
mocked_git_push: MagicMock,
|
|
275
273
|
post_mocker: Mocker,
|
|
276
274
|
):
|
|
@@ -386,7 +384,6 @@ def test_version_print_tag_prints_next_tag_no_zero_versions(
|
|
|
386
384
|
get_cfg_value_from_def: GetCfgValueFromDefFn,
|
|
387
385
|
file_in_repo: str,
|
|
388
386
|
run_cli: RunCliFn,
|
|
389
|
-
mocked_git_fetch: MagicMock,
|
|
390
387
|
mocked_git_push: MagicMock,
|
|
391
388
|
post_mocker: Mocker,
|
|
392
389
|
):
|
|
@@ -450,7 +447,6 @@ def test_version_print_last_released_prints_version(
|
|
|
450
447
|
repo_result: BuiltRepoResult,
|
|
451
448
|
get_versions_from_repo_build_def: GetVersionsFromRepoBuildDefFn,
|
|
452
449
|
run_cli: RunCliFn,
|
|
453
|
-
mocked_git_fetch: MagicMock,
|
|
454
450
|
mocked_git_push: MagicMock,
|
|
455
451
|
post_mocker: Mocker,
|
|
456
452
|
strip_logging_messages: StripLoggingMessagesFn,
|
|
@@ -502,7 +498,6 @@ def test_version_print_last_released_prints_released_if_commits(
|
|
|
502
498
|
get_versions_from_repo_build_def: GetVersionsFromRepoBuildDefFn,
|
|
503
499
|
commits: list[str],
|
|
504
500
|
run_cli: RunCliFn,
|
|
505
|
-
mocked_git_fetch: MagicMock,
|
|
506
501
|
mocked_git_push: MagicMock,
|
|
507
502
|
post_mocker: Mocker,
|
|
508
503
|
file_in_repo: str,
|
|
@@ -552,10 +547,8 @@ def test_version_print_last_released_prints_released_if_commits(
|
|
|
552
547
|
def test_version_print_last_released_prints_nothing_if_no_tags(
|
|
553
548
|
repo_result: BuiltRepoResult,
|
|
554
549
|
run_cli: RunCliFn,
|
|
555
|
-
mocked_git_fetch: MagicMock,
|
|
556
550
|
mocked_git_push: MagicMock,
|
|
557
551
|
post_mocker: Mocker,
|
|
558
|
-
caplog: pytest.LogCaptureFixture,
|
|
559
552
|
):
|
|
560
553
|
repo = repo_result["repo"]
|
|
561
554
|
|
|
@@ -577,10 +570,7 @@ def test_version_print_last_released_prints_nothing_if_no_tags(
|
|
|
577
570
|
# Evaluate (no release actions should have occurred on print)
|
|
578
571
|
assert_successful_exit_code(result, cli_cmd)
|
|
579
572
|
assert result.stdout == ""
|
|
580
|
-
|
|
581
|
-
# must use capture log to see this, because we use the logger to print this message
|
|
582
|
-
# not click's output
|
|
583
|
-
assert "No release tags found." in caplog.text
|
|
573
|
+
assert "No release tags found." in result.stderr
|
|
584
574
|
|
|
585
575
|
# assert nothing else happened (no code changes, no commit, no tag, no push, no vcs release)
|
|
586
576
|
assert repo_status_before == repo_status_after
|
|
@@ -598,7 +588,6 @@ def test_version_print_last_released_on_detached_head(
|
|
|
598
588
|
repo_result: BuiltRepoResult,
|
|
599
589
|
get_versions_from_repo_build_def: GetVersionsFromRepoBuildDefFn,
|
|
600
590
|
run_cli: RunCliFn,
|
|
601
|
-
mocked_git_fetch: MagicMock,
|
|
602
591
|
mocked_git_push: MagicMock,
|
|
603
592
|
post_mocker: Mocker,
|
|
604
593
|
strip_logging_messages: StripLoggingMessagesFn,
|
|
@@ -647,7 +636,6 @@ def test_version_print_last_released_on_nonrelease_branch(
|
|
|
647
636
|
repo_result: BuiltRepoResult,
|
|
648
637
|
get_versions_from_repo_build_def: GetVersionsFromRepoBuildDefFn,
|
|
649
638
|
run_cli: RunCliFn,
|
|
650
|
-
mocked_git_fetch: MagicMock,
|
|
651
639
|
mocked_git_push: MagicMock,
|
|
652
640
|
post_mocker: Mocker,
|
|
653
641
|
strip_logging_messages: StripLoggingMessagesFn,
|
|
@@ -705,7 +693,6 @@ def test_version_print_last_released_tag_prints_correct_tag(
|
|
|
705
693
|
get_cfg_value_from_def: GetCfgValueFromDefFn,
|
|
706
694
|
get_versions_from_repo_build_def: GetVersionsFromRepoBuildDefFn,
|
|
707
695
|
run_cli: RunCliFn,
|
|
708
|
-
mocked_git_fetch: MagicMock,
|
|
709
696
|
mocked_git_push: MagicMock,
|
|
710
697
|
post_mocker: Mocker,
|
|
711
698
|
strip_logging_messages: StripLoggingMessagesFn,
|
|
@@ -766,7 +753,6 @@ def test_version_print_last_released_tag_prints_released_if_commits(
|
|
|
766
753
|
get_versions_from_repo_build_def: GetVersionsFromRepoBuildDefFn,
|
|
767
754
|
commits: list[str],
|
|
768
755
|
run_cli: RunCliFn,
|
|
769
|
-
mocked_git_fetch: MagicMock,
|
|
770
756
|
mocked_git_push: MagicMock,
|
|
771
757
|
post_mocker: Mocker,
|
|
772
758
|
file_in_repo: str,
|
|
@@ -817,10 +803,8 @@ def test_version_print_last_released_tag_prints_released_if_commits(
|
|
|
817
803
|
def test_version_print_last_released_tag_prints_nothing_if_no_tags(
|
|
818
804
|
repo_result: BuiltRepoResult,
|
|
819
805
|
run_cli: RunCliFn,
|
|
820
|
-
mocked_git_fetch: MagicMock,
|
|
821
806
|
mocked_git_push: MagicMock,
|
|
822
807
|
post_mocker: Mocker,
|
|
823
|
-
caplog: pytest.LogCaptureFixture,
|
|
824
808
|
):
|
|
825
809
|
repo = repo_result["repo"]
|
|
826
810
|
|
|
@@ -842,10 +826,7 @@ def test_version_print_last_released_tag_prints_nothing_if_no_tags(
|
|
|
842
826
|
# Evaluate (no release actions should have occurred on print)
|
|
843
827
|
assert_successful_exit_code(result, cli_cmd)
|
|
844
828
|
assert result.stdout == ""
|
|
845
|
-
|
|
846
|
-
# must use capture log to see this, because we use the logger to print this message
|
|
847
|
-
# not click's output
|
|
848
|
-
assert "No release tags found." in caplog.text
|
|
829
|
+
assert "No release tags found." in result.stderr
|
|
849
830
|
|
|
850
831
|
# assert nothing else happened (no code changes, no commit, no tag, no push, no vcs release)
|
|
851
832
|
assert repo_status_before == repo_status_after
|
|
@@ -872,7 +853,6 @@ def test_version_print_last_released_tag_on_detached_head(
|
|
|
872
853
|
get_cfg_value_from_def: GetCfgValueFromDefFn,
|
|
873
854
|
get_versions_from_repo_build_def: GetVersionsFromRepoBuildDefFn,
|
|
874
855
|
run_cli: RunCliFn,
|
|
875
|
-
mocked_git_fetch: MagicMock,
|
|
876
856
|
mocked_git_push: MagicMock,
|
|
877
857
|
post_mocker: Mocker,
|
|
878
858
|
strip_logging_messages: StripLoggingMessagesFn,
|
|
@@ -931,7 +911,6 @@ def test_version_print_last_released_tag_on_nonrelease_branch(
|
|
|
931
911
|
get_cfg_value_from_def: GetCfgValueFromDefFn,
|
|
932
912
|
get_versions_from_repo_build_def: GetVersionsFromRepoBuildDefFn,
|
|
933
913
|
run_cli: RunCliFn,
|
|
934
|
-
mocked_git_fetch: MagicMock,
|
|
935
914
|
mocked_git_push: MagicMock,
|
|
936
915
|
post_mocker: Mocker,
|
|
937
916
|
strip_logging_messages: StripLoggingMessagesFn,
|
|
@@ -989,7 +968,6 @@ def test_version_print_next_version_fails_on_detached_head(
|
|
|
989
968
|
simulate_change_commits_n_rtn_changelog_entry: SimulateChangeCommitsNReturnChangelogEntryFn,
|
|
990
969
|
get_commit_def_fn: GetCommitDefFn[CommitParser[ParseResult, ParserOptions]],
|
|
991
970
|
default_parser: CommitParser[ParseResult, ParserOptions],
|
|
992
|
-
mocked_git_fetch: MagicMock,
|
|
993
971
|
mocked_git_push: MagicMock,
|
|
994
972
|
post_mocker: Mocker,
|
|
995
973
|
strip_logging_messages: StripLoggingMessagesFn,
|
|
@@ -1052,7 +1030,6 @@ def test_version_print_next_tag_fails_on_detached_head(
|
|
|
1052
1030
|
simulate_change_commits_n_rtn_changelog_entry: SimulateChangeCommitsNReturnChangelogEntryFn,
|
|
1053
1031
|
get_commit_def_fn: GetCommitDefFn[CommitParser[ParseResult, ParserOptions]],
|
|
1054
1032
|
default_parser: CommitParser[ParseResult, ParserOptions],
|
|
1055
|
-
mocked_git_fetch: MagicMock,
|
|
1056
1033
|
mocked_git_push: MagicMock,
|
|
1057
1034
|
post_mocker: Mocker,
|
|
1058
1035
|
strip_logging_messages: StripLoggingMessagesFn,
|
|
@@ -291,6 +291,165 @@ def test_version_upstream_check_success_no_changes_untracked_branch(
|
|
|
291
291
|
assert expected_vcs_url_post == post_mocker.call_count # one vcs release created
|
|
292
292
|
|
|
293
293
|
|
|
294
|
+
@pytest.mark.parametrize(
|
|
295
|
+
"repo_fixture_name, build_repo_fn",
|
|
296
|
+
[
|
|
297
|
+
(
|
|
298
|
+
repo_fixture_name,
|
|
299
|
+
lazy_fixture(build_repo_fn_name),
|
|
300
|
+
)
|
|
301
|
+
for repo_fixture_name, build_repo_fn_name in [
|
|
302
|
+
(
|
|
303
|
+
repo_w_trunk_only_conventional_commits.__name__,
|
|
304
|
+
build_trunk_only_repo_w_tags.__name__,
|
|
305
|
+
),
|
|
306
|
+
]
|
|
307
|
+
],
|
|
308
|
+
)
|
|
309
|
+
@pytest.mark.usefixtures(change_to_ex_proj_dir.__name__)
|
|
310
|
+
def test_version_no_upstream_check_on_no_version_commit(
|
|
311
|
+
repo_fixture_name: str,
|
|
312
|
+
run_cli: RunCliFn,
|
|
313
|
+
build_repo_fn: BuildSpecificRepoFn,
|
|
314
|
+
example_project_dir: ExProjectDir,
|
|
315
|
+
git_repo_for_directory: GetGitRepo4DirFn,
|
|
316
|
+
post_mocker: Mocker,
|
|
317
|
+
get_cfg_value_from_def: GetCfgValueFromDefFn,
|
|
318
|
+
get_versions_from_repo_build_def: GetVersionsFromRepoBuildDefFn,
|
|
319
|
+
pyproject_toml_file: Path,
|
|
320
|
+
update_pyproject_toml: UpdatePyprojectTomlFn,
|
|
321
|
+
):
|
|
322
|
+
"""
|
|
323
|
+
Test that PSR succeeds when no version commit is needed, so the upstream check is skipped.
|
|
324
|
+
|
|
325
|
+
This replicates the scenario that occurred on python-semantic-release/publish-action@v10.5.1
|
|
326
|
+
where the version command was run and no version commit was needed, but it failed because
|
|
327
|
+
it attempted to check the upstream branch anyway and we hard coded HEAD~1 because it expects
|
|
328
|
+
a version commit to be created. This is the only reason why you would check the upstream branch
|
|
329
|
+
because pushing a tag to the remote can happen even if the upstream branch has changed.
|
|
330
|
+
"""
|
|
331
|
+
remote_name = "origin"
|
|
332
|
+
# Create a bare remote (simulating origin)
|
|
333
|
+
local_origin = Repo.init(str(example_project_dir / "local_origin"), bare=True)
|
|
334
|
+
|
|
335
|
+
# build target repo into a temporary directory
|
|
336
|
+
target_repo_dir = example_project_dir / repo_fixture_name
|
|
337
|
+
commit_type: CommitConvention = (
|
|
338
|
+
repo_fixture_name.split("commits", 1)[0].split("_")[-2] # type: ignore[assignment]
|
|
339
|
+
)
|
|
340
|
+
target_repo_definition = build_repo_fn(
|
|
341
|
+
repo_name=repo_fixture_name,
|
|
342
|
+
commit_type=commit_type,
|
|
343
|
+
dest_dir=target_repo_dir,
|
|
344
|
+
)
|
|
345
|
+
target_git_repo = git_repo_for_directory(target_repo_dir)
|
|
346
|
+
|
|
347
|
+
# Configure the source repo to use the bare remote (removing any existing 'origin')
|
|
348
|
+
with contextlib.suppress(AttributeError):
|
|
349
|
+
target_git_repo.delete_remote(target_git_repo.remotes[remote_name])
|
|
350
|
+
|
|
351
|
+
target_git_repo.create_remote(remote_name, str(local_origin.working_dir))
|
|
352
|
+
|
|
353
|
+
# Remove last release before pushing to upstream
|
|
354
|
+
tag_format_str = cast(
|
|
355
|
+
"str", get_cfg_value_from_def(target_repo_definition, "tag_format_str")
|
|
356
|
+
)
|
|
357
|
+
latest_tag = tag_format_str.format(
|
|
358
|
+
version=get_versions_from_repo_build_def(target_repo_definition)[-1]
|
|
359
|
+
)
|
|
360
|
+
target_git_repo.git.tag("-d", latest_tag)
|
|
361
|
+
target_git_repo.git.reset("--hard", "HEAD~1")
|
|
362
|
+
|
|
363
|
+
# Remove any version variables to ensure no version commit is needed
|
|
364
|
+
update_pyproject_toml(
|
|
365
|
+
"tool.semantic_release.version_variables",
|
|
366
|
+
None,
|
|
367
|
+
target_repo_dir / pyproject_toml_file,
|
|
368
|
+
)
|
|
369
|
+
update_pyproject_toml(
|
|
370
|
+
"tool.semantic_release.version_toml",
|
|
371
|
+
None,
|
|
372
|
+
target_repo_dir / pyproject_toml_file,
|
|
373
|
+
)
|
|
374
|
+
# TODO: when available, switch this to use hvcs=none or similar config to avoid token use for push
|
|
375
|
+
update_pyproject_toml(
|
|
376
|
+
"tool.semantic_release.remote.ignore_token_for_push",
|
|
377
|
+
True,
|
|
378
|
+
target_repo_dir / pyproject_toml_file,
|
|
379
|
+
)
|
|
380
|
+
target_git_repo.git.commit(amend=True, no_edit=True, all=True)
|
|
381
|
+
|
|
382
|
+
# push the current state to establish the remote (cannot push tags and branches at the same time)
|
|
383
|
+
target_git_repo.git.push(remote_name, all=True) # all branches
|
|
384
|
+
target_git_repo.git.push(remote_name, tags=True) # all tags
|
|
385
|
+
|
|
386
|
+
# ensure bare remote HEAD points to the active branch so clones can checkout
|
|
387
|
+
local_origin.git.symbolic_ref(
|
|
388
|
+
"HEAD", f"refs/heads/{target_git_repo.active_branch.name}"
|
|
389
|
+
)
|
|
390
|
+
|
|
391
|
+
# Simulate CI environment after someone pushes to the repo
|
|
392
|
+
ci_commit_sha = target_git_repo.head.commit.hexsha
|
|
393
|
+
ci_branch = target_git_repo.active_branch.name
|
|
394
|
+
|
|
395
|
+
# current remote tags
|
|
396
|
+
remote_origin_tags_before = {tag.name for tag in local_origin.tags}
|
|
397
|
+
|
|
398
|
+
# Simulate a CI environment by fetching the repo to a new location
|
|
399
|
+
test_repo = Repo.init(str(example_project_dir / "ci_repo"))
|
|
400
|
+
with test_repo.config_writer("repository") as config:
|
|
401
|
+
config.set_value("core", "hookspath", "")
|
|
402
|
+
config.set_value("commit", "gpgsign", False)
|
|
403
|
+
config.set_value("tag", "gpgsign", False)
|
|
404
|
+
|
|
405
|
+
# Configure and retrieve the repository (see GitHub actions/checkout@v5)
|
|
406
|
+
test_repo.git.remote(
|
|
407
|
+
"add",
|
|
408
|
+
remote_name,
|
|
409
|
+
f"file:///{PureWindowsPath(local_origin.working_dir).as_posix()}",
|
|
410
|
+
)
|
|
411
|
+
test_repo.git.fetch("--depth=1", remote_name, ci_commit_sha)
|
|
412
|
+
|
|
413
|
+
# Simulate CI environment and recommended workflow (in docs)
|
|
414
|
+
# NOTE: this could be done in 1 step, but most CI pipelines are doing it in 2 steps
|
|
415
|
+
# 1. Checkout the commit sha (detached head)
|
|
416
|
+
test_repo.git.checkout(ci_commit_sha, force=True)
|
|
417
|
+
# 2. Forcefully set the branch to the current detached head
|
|
418
|
+
test_repo.git.checkout("-B", ci_branch)
|
|
419
|
+
|
|
420
|
+
# Act: run PSR on the cloned repo - it should verify upstream and succeed
|
|
421
|
+
with temporary_working_directory(str(test_repo.working_dir)):
|
|
422
|
+
# We don't use `--no-commit` here because we want to test that the upstream check is skipped
|
|
423
|
+
# when PSR determines that no version commit is needed. If we used `--no-commit`, it would skip the
|
|
424
|
+
# upstream check because it would think that a version commit was not needed.
|
|
425
|
+
cli_cmd = [
|
|
426
|
+
MAIN_PROG_NAME,
|
|
427
|
+
"--strict",
|
|
428
|
+
VERSION_SUBCMD,
|
|
429
|
+
"--no-changelog",
|
|
430
|
+
"--skip-build",
|
|
431
|
+
]
|
|
432
|
+
result = run_cli(cli_cmd[1:], env={Github.DEFAULT_ENV_TOKEN_NAME: "1234"})
|
|
433
|
+
|
|
434
|
+
remote_origin_tags_after = {tag.name for tag in local_origin.tags}
|
|
435
|
+
|
|
436
|
+
# Evaluate
|
|
437
|
+
assert_successful_exit_code(result, cli_cmd)
|
|
438
|
+
|
|
439
|
+
# Verify release occurred as expected
|
|
440
|
+
with test_repo:
|
|
441
|
+
assert latest_tag in test_repo.tags, "Expected release tag to be created"
|
|
442
|
+
assert (
|
|
443
|
+
ci_commit_sha == test_repo.head.commit.hexsha
|
|
444
|
+
), "Expected no new commit to be created on HEAD"
|
|
445
|
+
different_tags = remote_origin_tags_after.difference(remote_origin_tags_before)
|
|
446
|
+
assert latest_tag in different_tags, "Expected new tag to be pushed to remote"
|
|
447
|
+
|
|
448
|
+
# Verify VCS release was created
|
|
449
|
+
expected_vcs_url_post = 1
|
|
450
|
+
assert expected_vcs_url_post == post_mocker.call_count # one vcs release created
|
|
451
|
+
|
|
452
|
+
|
|
294
453
|
@pytest.mark.parametrize(
|
|
295
454
|
"repo_fixture_name, build_repo_fn",
|
|
296
455
|
[
|
{python_semantic_release-10.5.1 → python_semantic_release-10.5.3}/tests/fixtures/git_repo.py
RENAMED
|
@@ -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(
|
|
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
|
-
|
|
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":
|
|
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
|
|