xcodeproj 0.3.0

xcodeproj reader and parser.
Documentation
[changelog]
# changelog header
header = """
# Changelog
"""
# template for the changelog body
# https://tera.netlify.app/docs/#introduction
body = """
{%- set repo = "https://github.com/tami5/xcodeproj" -%}\

{% if version %}\
    ## [{{ version | trim_start_matches(pat="v") }}] - {{ timestamp | date(format="%Y-%m-%d") }}
{% else %}\
    ## [unreleased]
{% endif %}\
{% for group, commits in commits | group_by(attribute="group") %}\
### {{ group | upper_first }}
{% for commit in commits | filter(attribute="scope") | sort(attribute="scope") %}\
  - `({{ commit.scope | upper_first }})` <a href="{{ repo }}/commit/{{ commit.id | truncate(length=7, end="") }}"> {% if commit.breaking %}[**breaking**] {% endif %}{{ commit.message | upper_first }}</a>
{% endfor %}\n
 {%- for commit in commits %}
         {%- if commit.scope -%}
         {% else -%}
          - `(General)` <a href="{{ repo }}/commit/{{ commit.id | truncate(length=7, end="") }}"> {% if commit.breaking %}[**breaking**] {% endif %}{{ commit.message | upper_first }}</a>
         {% endif -%}
     {% endfor -%}
{% endfor %}\n
"""
# remove the leading and trailing whitespaces from the template
trim = true
# changelog footer
footer = ""

[git]
# parse the commits based on https://www.conventionalcommits.org
conventional_commits = true
# filter out the commits that are not conventional
filter_unconventional = true
# regex for parsing and grouping commits
commit_parsers = [
    { message = "^feat", group = "<!-- 0 -->Features"},
    { message = "^fix", group = "<!-- 1 -->Bug Fixes"},
    { message = "^ref", group = "<!-- 2 -->Refactor"},
    { message = "^enh", group = "<!-- 3 -->Enhancement"},
    { message = "^doc: update readme*.", skip = true},
    { message = "^chore: update changelog*.", skip = true},
    { message = "^doc", group = "Documentation"},
    { message = "^perf", group = "Performance"},
    { message = "^style", group = "Styling"},
    { message = "^test", group = "Testing"},
    { message = "^release*.", skip = true},
    { message = "^chore", skip = true },
    { body = ".*security", group = "Security"},
]
# filter out the commits that are not matched by commit parsers
filter_commits = false
# glob pattern for matching git tags
tag_pattern = "v[0-9]*"
# regex for skipping tags
skip_tags = "v0.1.0-beta.1"
# regex for ignoring tags
ignore_tags = ""
# sort the tags topologically
topo_order = false
# sort the commits inside sections by oldest/newest order
sort_commits = "oldest"