- Notifications
You must be signed in to change notification settings - Fork262
chore(psr-changelog): consolidate & simplify jinja macro implementation#1265
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.
Already on GitHub?Sign in to your account
Merged
codejedi365 merged 1 commit intopython-semantic-release:masterfromcodejedi365:chore/consolidate-psr-jinja-functionalityMay 26, 2025
Uh oh!
There was an error while loading.Please reload this page.
Merged
Changes fromall commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Uh oh!
There was an error while loading.Please reload this page.
Jump to
Jump to file
Failed to load files.
Loading
Uh oh!
There was an error while loading.Please reload this page.
Diff view
Diff view
There are no files selected for viewing
13 changes: 7 additions & 6 deletionsconfig/release-templates/.components/changes.md.j2
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
17 changes: 9 additions & 8 deletionsconfig/release-templates/.components/changes.rst.j2
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
160 changes: 160 additions & 0 deletionsconfig/release-templates/.components/macros.common.j2
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,160 @@ | ||
| {# TODO: move to configuration for user to modify #} | ||
| {% set section_heading_translations = { | ||
| 'feat': 'features', | ||
| 'fix': 'bug fixes', | ||
| 'perf': 'performance improvements', | ||
| 'docs': 'documentation', | ||
| 'build': 'build system', | ||
| 'refactor': 'refactoring', | ||
| 'test': 'testing', | ||
| 'ci': 'continuous integration', | ||
| 'chore': 'chores', | ||
| 'style': 'code style', | ||
| } | ||
| %} | ||
| {% set section_heading_order = section_heading_translations.values() %} | ||
| {% set emoji_map = { | ||
| 'breaking': '💥', | ||
| 'features': '✨', | ||
| 'bug fixes': '🪲', | ||
| 'performance improvements': '⚡', | ||
| 'documentation': '📖', | ||
| 'build system': '⚙️', | ||
| 'refactoring': '♻️', | ||
| 'testing': '✅', | ||
| 'continuous integration': '🤖', | ||
| 'chores': '🧹', | ||
| 'code style': '🎨', | ||
| 'unknown': '❗', | ||
| 'release_note': '💡', | ||
| } %} | ||
| {# | ||
| MACRO: Capitalize the first letter of a string only | ||
| #}{% macro capitalize_first_letter_only(sentence) | ||
| %}{{ (sentence[0] | upper) ~ sentence[1:] | ||
| }}{% endmacro | ||
| %} | ||
| {# | ||
| MACRO: format a commit descriptions list by: | ||
| - Capitalizing the first line of the description | ||
| - Adding an optional scope prefix | ||
| - Joining the rest of the descriptions with a double newline | ||
| #}{% macro format_attr_paragraphs(commit, attribute) | ||
| %}{# NOTE: requires namespace because of the way Jinja2 handles variable scoping with loops | ||
| #}{% set ns = namespace(full_description="") | ||
| %}{# | ||
| #}{% if commit.error is undefined | ||
| %}{% for paragraph in commit | attr(attribute) | ||
| %}{% if paragraph | trim | length > 0 | ||
| %}{# | ||
| #}{% set ns.full_description = [ | ||
| ns.full_description, | ||
| capitalize_first_letter_only(paragraph) | trim | safe, | ||
| ] | join("\n\n") | ||
| %}{# | ||
| #}{% endif | ||
| %}{% endfor | ||
| %}{# | ||
| #}{% set ns.full_description = ns.full_description | trim | ||
| %}{# | ||
| #}{% if commit.scope | ||
| %}{% set ns.full_description = "**%s**: %s" | format( | ||
| commit.scope, ns.full_description | ||
| ) | ||
| %}{% endif | ||
| %}{% endif | ||
| %}{# | ||
| #}{{ ns.full_description | ||
| }}{% endmacro | ||
| %} | ||
| {# | ||
| MACRO: format the breaking changes description by: | ||
| - Capitalizing the description | ||
| - Adding an optional scope prefix | ||
| #}{% macro format_breaking_changes_description(commit) | ||
| %}{{ format_attr_paragraphs(commit, 'breaking_descriptions') | ||
| }}{% endmacro | ||
| %} | ||
| {# | ||
| MACRO: format the release notice by: | ||
| - Capitalizing the description | ||
| - Adding an optional scope prefix | ||
| #}{% macro format_release_notice(commit) | ||
| %}{{ format_attr_paragraphs(commit, "release_notices") | ||
| }}{% endmacro | ||
| %} | ||
| {# | ||
| MACRO: order commits alphabetically by scope and attribute | ||
| - Commits are sorted based on scope and then the attribute alphabetically | ||
| - Commits without scope are placed first and sorted alphabetically by the attribute | ||
| - parameter: ns (namespace) object with a commits list | ||
| - parameter: attr (string) attribute to sort by | ||
| - returns None but modifies the ns.commits list in place | ||
| #}{% macro order_commits_alphabetically_by_scope_and_attr(ns, attr) | ||
| %}{% set ordered_commits = [] | ||
| %}{# | ||
| # # Eliminate any ParseError commits from input set | ||
| #}{% set filtered_commits = ns.commits | rejectattr("error", "defined") | list | ||
| %}{# | ||
| # # grab all commits with no scope and sort alphabetically by attr | ||
| #}{% for commit in filtered_commits | rejectattr("scope") | sort(attribute=attr) | ||
| %}{% set _ = ordered_commits.append(commit) | ||
| %}{% endfor | ||
| %}{# | ||
| # # grab all commits with a scope and sort alphabetically by the scope and then attr | ||
| #}{% for commit in filtered_commits | selectattr("scope") | sort(attribute=(['scope', attr] | join(","))) | ||
| %}{% set _ = ordered_commits.append(commit) | ||
| %}{% endfor | ||
| %}{# | ||
| # # Return the ordered commits | ||
| #}{% set ns.commits = ordered_commits | ||
| %}{% endmacro | ||
| %} | ||
| {# | ||
| MACRO: apply smart ordering of commits objects based on alphabetized summaries and then scopes | ||
| - Commits are sorted based on the commit type and the commit message | ||
| - Commits are grouped by the commit type | ||
| - parameter: ns (namespace) object with a commits list | ||
| - returns None but modifies the ns.commits list in place | ||
| #}{% macro apply_alphabetical_ordering_by_descriptions(ns) | ||
| %}{% set _ = order_commits_alphabetically_by_scope_and_attr(ns, 'descriptions.0') | ||
| %}{% endmacro | ||
| %} | ||
| {# | ||
| MACRO: apply smart ordering of commits objects based on alphabetized breaking changes and then scopes | ||
| - Commits are sorted based on the commit type and the commit message | ||
| - Commits are grouped by the commit type | ||
| - parameter: ns (namespace) object with a commits list | ||
| - returns None but modifies the ns.commits list in place | ||
| #}{% macro apply_alphabetical_ordering_by_brk_descriptions(ns) | ||
| %}{% set _ = order_commits_alphabetically_by_scope_and_attr(ns, 'breaking_descriptions.0') | ||
| %}{% endmacro | ||
| %} | ||
| {# | ||
| MACRO: apply smart ordering of commits objects based on alphabetized release notices and then scopes | ||
| - Commits are sorted based on the commit type and the commit message | ||
| - Commits are grouped by the commit type | ||
| - parameter: ns (namespace) object with a commits list | ||
| - returns None but modifies the ns.commits list in place | ||
| #}{% macro apply_alphabetical_ordering_by_release_notices(ns) | ||
| %}{% set _ = order_commits_alphabetically_by_scope_and_attr(ns, 'release_notices.0') | ||
| %}{% endmacro | ||
| %} |
174 changes: 1 addition & 173 deletionsconfig/release-templates/.components/macros.md.j2
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.Learn more about bidirectional Unicode characters
Oops, something went wrong.
Uh oh!
There was an error while loading.Please reload this page.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.