git-synchronizer 0.1.0

Easily synchronize your local branches and worktrees
[workspace]
# Update CHANGELOG.md in the release PR
changelog_update = true
# Create git tags on release
git_tag_enable = true
# Create GitHub releases with changelog as release notes
git_release_enable = true
# Do not run cargo-semver-checks (no public library API)
semver_check = false
# Labels to apply to the release PR
pr_labels = ["release"]
# Repository URL (avoids needing upstream tracking branch to resolve it)
repo_url = "https://github.com/noirbizarre/git-synchronizer"
# Use git tags instead of cargo registry for version detection (binary crate, not published)
git_only = true

pr_branch_prefix = "release/"

[changelog]
header = """
# Changelog

"""
body = """
{% if version -%}
  ## ๐Ÿš€ [{{ version }}]{% if release_link %}({{ release_link }}){% endif %} ({{ timestamp | date(format="%Y-%m-%d") }})
{% else -%}
  ## [Unreleased]
{% endif -%}

{% for group, commits in commits | group_by(attribute="group") %}
### {{ group | striptags | trim | upper_first }}
{% for commit in commits
| filter(attribute="scope")
| sort(attribute="scope") %}
  - **{{ commit.scope }}:** {{ commit.message | upper_first }} \
    ([{{ commit.id | truncate(length=7, end="") }}]({{ remote.link }}/commit/{{ commit.id }}))\
    {%- if commit.links %} {% for link in commit.links %}[{{link.text}}]({{link.href}}) {% endfor -%}{% endif %}
  {%- if commit.breaking %}
  {% raw %}  {% endraw %}๐Ÿšจ **BREAKING**: {{ commit.breaking_description }}
  {%- endif -%}
{%- endfor -%}
{% for commit in commits %}
  {%- if not commit.scope %}
  - {{ commit.message | upper_first }} \
    ([{{ commit.id | truncate(length=7, end="") }}]({{ remote.link }}/commit/{{ commit.id }}))\
    {%- if commit.links %} {% for link in commit.links %}[{{link.text}}]({{link.href}}) {% endfor -%}{% endif %}
  {%- if commit.breaking %}
  {% raw %}  {% endraw %}๐Ÿšจ **BREAKING**: {{ commit.breaking_description }}
  {%- endif -%}
  {%- endif -%}
{%- endfor %}
{% endfor %}

{% set ctx = __tera_context -%}
{%- if ctx.remote.contributors is defined and ctx.remote.contributors | length != 0 %}
### Contributors
{%- for contributor in remote.contributors %}
  - @{{ contributor.username }}
{%- endfor %}
{%- endif %}
"""
trim = true
protect_breaking_commits = true
sort_commits = "newest"
commit_preprocessors = [
  # Replace issue/PR numbers with GitHub links
  { pattern = "\\(#([0-9]+)\\)", replace = "([#${1}](https://github.com/noirbizarre/git-synchronizer/pull/${1}))" },
]
commit_parsers = [
  { message = "^feat", group = "<!-- 0 -->๐Ÿ’ซ New features" },
  { message = "^fix", group = "<!-- 1 -->๐Ÿ› Bug fixes" },
  { message = "^perf", group = "<!-- 2 -->๐Ÿ“ˆ Performance" },
  { message = "^doc", group = "<!-- 3 -->๐Ÿ“– Documentation" },
  { message = "^refactor", group = "<!-- 4 -->๐Ÿ”ง Refactorings" },
  { message = "^build", group = "<!-- 5 -->๐Ÿ“ฆ Build" },
  { message = "^ci", group = "<!-- 6 -->๐Ÿ›ธ Continuous Integration" },
  { message = "^test", group = "<!-- 7 -->๐Ÿšฆ Testing" },
  { message = "^style", group = "<!-- 8 -->๐ŸŽจ Style" },
  { message = "^revert", group = "<!-- 9 -->๐Ÿ”™ Reverted" },
  { message = "^wip", skip = true },
  { message = "^chore\\(release\\)", skip = true },
  { message = "^chore|^misc", group = "<!-- 10 -->๐Ÿงน Chores" },
]