v10.0.0 (2025-05-25)
This release is published under the MIT License.
✨ Features
-
cmd-version: Enable
version_variables
version stamp of vars with double-equals (PR#1244,080e4bc
) -
parser-conventional: Set parser to evaluate all squashed commits by default (
6fcdc99
) -
parser-conventional: Set parser to ignore merge commits by default (
59bf084
) -
parser-emoji: Set parser to evaluate all squashed commits by default (
514a922
) -
parser-emoji: Set parser to ignore merge commits by default (
8a51525
) -
parser-scipy: Set parser to evaluate all squashed commits by default (
634fffe
) -
parser-scipy: Set parser to ignore merge commits by default (
d4f128e
)
🪲 Bug Fixes
-
changelog-md: Change to 1-line descriptions in markdown template (
e7ac155
) -
changelog-rst: Change to 1-line descriptions in the default ReStructuredText template (
731466f
) -
cli: Adjust verbosity parameter to enable silly-level logging (
bd3e7bf
) -
github-action: Resolve command injection vulnerability in action script (
fb3da27
) -
parser-conventional: Remove breaking change footer messages from commit descriptions (
b271cbb
) -
parser-conventional: Remove issue footer messages from commit descriptions (
b1bb0e5
) -
parser-conventional: Remove PR/MR references from commit subject line (
eed63fa
) -
parser-conventional: Remove release notice footer messages from commit descriptions (
7e8dc13
) -
parser-emoji: Remove issue footer messages from commit descriptions (
b757603
) -
parser-emoji: Remove PR/MR references from commit subject line (
16465f1
) -
parser-emoji: Remove release notice footer messages from commit descriptions (
b6307cb
) -
parser-scipy: Remove issue footer messages from commit descriptions (
3cfee76
) -
parser-scipy: Remove PR/MR references from commit subject line (
da4140f
) -
parser-scipy: Remove release notice footer messages from commit descriptions (
58308e3
)
📖 Documentation
-
Refactor documentation page navigation (
4e52f4b
) -
algorithm: Remove out-of-date algorithm description (
6cd0fbe
) -
commit-parsing: Define limitation of revert commits with the scipy parser (
5310d0c
) -
configuration: Change default value for
allow_zero_version
in the description (203d29d
) -
configuration: Change the default for the base changelog's
mask_initial_release
value (5fb02ab
) -
configuration: Change the default value for
changelog.mode
in the setting description (0bed906
) -
configuration: Update
version_variables
section to include double-equals operand support (PR#1244,080e4bc
) -
contributing: Refactor contributing & contributors layout (
8bed5bc
) -
github-actions: Add reference to manual release workflow example (
6aad7f1
) -
github-actions: Change recommended workflow to separate release from deploy (
67b2ae0
) -
github-actions: Update
python-semantic-release/publish-action
parameter notes (c4d45ec
) -
github-actions: Update PSR action parameter documentation (
a082896
) -
upgrading: Re-locate version upgrade guides into
Upgrading PSR
(a5f5e04
) -
upgrading-v10: Added migration guide for v9 to v10 (
4ea92ec
)
⚙️ Build System
♻️ Refactoring
-
config: Change
allow_zero_version
default tofalse
(c6b6eab
) -
config: Change
changelog.default_templates.mask_initial_release
default totrue
(0e114c3
) -
config: Change
changelog.mode
default toupdate
(7d39e76
)
💥 Breaking Changes
For a summarized walkthrough, check out our v10 migration guide as well.
-
changelog-md: The default Markdown changelog template and release notes template will no longer print out the entire commit message contents, instead, it will only print the commit subject line. This comes to meet the high demand of better formatted changelogs and requests for subject line only. Originally, it was a decision to not hide commit subjects that were included in the commit body via the
git merge --squash
command and PSR did not have another alternative. At this point, all the built-in parsers have the ability to parse squashed commits and separate them out into their own entry on the changelog. Therefore, the default template no longer needs to write out the full commit body. See the commit parser options if you want to enable/disable parsing squash commits. -
changelog-rst: The default ReStructured changelog template will no longer print out the entire commit message contents, instead, it will only print the commit subject line. This comes to meet the high demand of better formatted changelogs and requests for subject line only. Originally, it was a decision to not hide commit subjects that were included in the commit body via the
git merge --squash
command and PSR did not have another alternative. At this point, all the built-in parsers have the ability to parse squashed commits and separate them out into their own entry on the changelog. Therefore, the default template no longer needs to write out the full commit body. See the commit parser options if you want to enable/disable parsing squash commits. -
config: This release switches the
allow_zero_version
default tofalse
. This change is to encourage less0.x
releases as the default but rather allow the experienced developer to choose when0.x
is appropriate. There are way too many projects in the ecosystems that never leave0.x
and that is problematic for the industry tools that help auto-update based on SemVer. We should strive for publishing usable tools and maintaining good forethought for when compatibility must break. If your configuration already sets theallow_zero_version
value, this change will have no effect on your project. If you want to use0.x
versions, from the start then changeallow_zero_version
totrue
in your configuration. -
config: This release switches the
changelog.default_templates.mask_initial_release
default totrue
. This change is intended to toggle better recommended outputs of the default changelog. Conceptually, the very first release is hard to describe--one can only provide new features as nothing exists yet for the end user. No changelog should be written as there is no start point to compare the "changes" to. The recommendation instead is to only list a simple message asInitial Release
. This is now the default for PSR when providing the very first release (no pre-existing tags) in the changelog and release notes. If your configuration already sets thechangelog.default_templates.mask_initial_release
value, then this change will have no effect on your project. If you do NOT want to mask the first release information, then setchangelog.default_templates.mask_initial_release
tofalse
in your configuration. -
config: This release switches the
changelog.mode
default toupdate
. In this mode, if a changelog exists, PSR will update the changelog IF AND ONLY IF the configured insertion flag exists in the changelog. The Changelog output will remain unchanged if no insertion flag exists. The insertion flag may be configured with thechangelog.insertion_flag
setting. When upgrading tov10
, you must add the insertion flag manually or you can just delete the changelog file and run PSR's changelog generation and it will rebuild the changelog (similar to init mode) but it will add the insertion flag. If your configuration already sets thechangelog.mode
value, then this change will have no effect on your project. If you would rather the changelog be generated from scratch every release, than set thechangelog.mode
value toinit
in your configuration. -
github-action: The
root_options
action input parameter has been removed because it created a command injection vulnerability for arbitrary code to execute within the container context of the GitHub action if a command injection code was provided as part of theroot_options
parameter string. To eliminate the vulnerability, each relevant option that can be provided tosemantic-release
has been individually added as its own parameter and will be processed individually to prevent command injection. Please review our Github Actions Configuration page on the Python Semantic Release Documentation website to review the newly available configuration options that replace theroot_options
parameter. -
parser-conventional: Any breaking change footer messages that the conventional commit parser detects will now be removed from the
commit.descriptions[]
list but maintained in and only in thecommit.breaking_descriptions[]
list. Previously, the descriptions included all text from the commit message but that was redundant as the default changelog now handles breaking change footers in its own section. -
parser-conventional, parser-emoji, parser-scipy: Any issue resolution footers that the parser detects will now be removed from the
commit.descriptions[]
list. Previously, the descriptions included all text from the commit message but now that the parser pulls out the issue numbers the numbers will be included in thecommit.linked_issues
tuple for user extraction in any changelog generation. -
parser-conventional, parser-emoji, parser-scipy: Any release notice footer messages that the commit parser detects will now be removed from the
commit.descriptions[]
list but maintained in and only in thecommit.notices[]
list. Previously, the descriptions included all text from the commit message but that was redundant as the default changelog now handles release notice footers in its own section. -
parser-conventional, parser-emoji, parser-scipy: Generally, a pull request or merge request number reference is included in the subject line at the end within parentheses on some common VCS's like GitHub. PSR now looks for this reference and extracts it into the
commit.linked_merge_request
and thecommit.linked_pull_request
attributes of a commit object. Since this is now pulled out individually, it is cleaner to remove this from the first line of thecommit.descriptions
list (ie. the subject line) so that changelog macros do not have to replace the text but instead only append a PR/MR link to the end of the line. The reference does maintain the PR/MR prefix indicator (#
or!
). -
parser-conventional, parser-emoji, parser-scipy: The configuration setting
commit_parser_options.ignore_merge_commits
is now set totrue
by default. The feature to ignore squash commits was introduced inv9.18.0
and was originally set tofalse
to prevent unexpected results on a non-breaking update. The ignore merge commits feature prevents additional unnecessary processing on a commit message that likely will not match a commit message syntax. Most merge commits are syntactically pre-defined by Git or Remote Version Control System (ex. GitHub, etc.) and do not follow a commit convention (nor should they). The larger issue with merge commits is that they ultimately are a full copy of all the changes that were previously created and committed. The merge commit itself ensures that the previous commit tree is maintained in history, therefore the commit message always exists. If merge commits are parsed, it generally creates duplicate messages that will end up in your changelog, which is less than desired in most cases. If you have previously used thechangelog.exclude_commit_patterns
functionality to ignore merge commit messages then you will want this setting set totrue
to improve parsing speed. You can also now remove the merge commit exclude pattern from the list as well to improve parsing speed. If this functionality is not desired, you will need to update your configuration to change the new setting tofalse
. -
parser-conventional, parser-emoji, parser-scipy: The configuration setting
commit_parser_options.parse_squash_commits
is now set totrue
by default. The feature to parse squash commits was introduced inv9.17.0
and was originally set tofalse
to prevent unexpected results on a non-breaking update. The parse squash commits feature attempts to find additional commits of the same commit type within the body of a single commit message. When squash commits are found, Python Semantic Release will separate out each commit into its own artificial commit object and parse them individually. This potentially can change the resulting version bump if a larger bump was detected within the squashed components. It also allows for the changelog and release notes to separately order and display each commit as originally written. If this is not desired, you will need to update your configuration to change the new setting tofalse
.
✅ Resolved Issues
- #733: feat: only include commit subject lines in changelog
Detailed Changes: v9.21.1...v10.0.0
Installable artifacts are available from: