Features
- Initial commit with config files ([79a6df1](https://github.com/multimac/conventional/commit/79a6df1f164c3ed2a447aed2168417db43f7c251))
- Create core git repository parsing functionality ([72d54b0](https://github.com/multimac/conventional/commit/72d54b049a2906e707bcd8ac835420f15483c9ad))
- Add "template" command for generating templates from commits ([d216714](https://github.com/multimac/conventional/commit/d216714c3000b3dfa628576335db20e00d70086e))
- Finish up "template" command, add new flags to other commands ([608f976](https://github.com/multimac/conventional/commit/608f976d2a78e5693e021f421e57058730afef37))
Changelog
{%- with types = config["type-headings"] | read_config({}, dict) %}
{%- for tag, version in versions if version.has_commits() %}
{% with pattern = config["version-link-pattern"] | read_config(None) %}
{%- if pattern is none or tag is none -%}
{{ tag["name"] | default("Unreleased") }}
{%- else -%}
[{{ tag["name"] | default("Unreleased") }}]({{ pattern.format(tag=tag["name"]) }})
{%- endif %}
{%- endwith %}
{%- with pattern = config["compare-link-pattern"] | read_config(None) %}
{%- if pattern is not none and tag is not none and loop.nextitem is defined %}
{%- with next_tag, _ = loop.nextitem %}
*Compare with [{{ next_tag["name"] }}]({{ pattern.format(to=tag["name"], from=next_tag["name"]) }})*
{%- endwith %}
{%- endif %}
{%- endwith %}
{%- for type, changes in version.items() if type is not none and type in types %}
{{ config["type-headings"][type] | read_config }}
{%- for change in changes if "data" in change %}
{- }
-
{%- if "scope" in change["data"]["subject"] %} **{{ change["data"]["subject"]["scope"] }}:**{% endif %}
{- } {{ change["data"]["subject"]["message"] }}
{%- with pattern = config["commit-link-pattern"] | read_config(None) %}
{%- if pattern is not none %} ([{{ change["source"]["short_rev"] }}]({{ pattern.format(commit=change["source"]["rev"]) }})){% endif %}
{%- endwith %}
{%- with pattern = config["issue-link-pattern"] | read_config(None) %}
{%- if pattern is not none and change["data"]["metadata"]["closes"] %}, closes
{%- for issue in change["data"]["metadata"]["closes"] %} [{{ issue }}]({{ pattern.format(issue=issue) }}){% endfor %}
{%- endif %}
{%- endwith %}
{%- with footers = change["data"].get("body", {}).get("footer", {}).get("items", []) %}
{%- with release_notes = footers | selectattr("key", "eq", "Release-Notes") | map(attribute="value") %}
{%- for notes in release_notes %}
{{ notes | indent(width=2) }}
{%- endfor %}
{%- endwith %}
{%- with breaking_changes = footers | selectattr("key", "eq", "BREAKING CHANGE") | map(attribute="value") %}
{%- for notes in breaking_changes %}
**BREAKING CHANGE:** {{ notes | indent(width=2) }}
{%- endfor %}
{%- endwith %}
{%- endwith %}
{%- endfor %}
{%- endfor %}
{%- endfor %}
{%- endwith %}