Skip to content

changelog generation is not working as expected in case of cz_customize? #466

Description

@brunopereira7

Description

Maybe I'm missing something but I'm not able to generate a changelog properly with custom configurations (cz_customize).

Steps to reproduce

cz --debug changelog --dry-run

Current behavior

I've tried different configurations through cz_customize, although the customization related to commits seems ok, the changelog generation doesn't work for me. I'm not able to generate a changelog as I do with the cz_conventional_commits. There is no filtering on the commits, no grouping by change_type as you can see below.

File: .cz.yaml

commitizen:
  name: cz_customize
  customize:
    message_template: "{{change_type}}:{% if show_message %} {{message}}{% endif %}"
    example: 'feature: this feature enable customize through config file'
    schema: "<type>: <body>"
    schema_pattern: (build|ci|docs|feat|fix|perf|refactor|style|test|chore|revert|bump)(\(\S+\))?!?:(\s.*)
    changelog_pattern: ^(feat|fix|chore|refactor|perf)(\(.+\))?(!)?
    change_type_order: ["BREAKING CHANGE", "feat", "fix", "refactor", "chore", "perf"]
    info_path: cz_customize_info.txt
    info: This is customized info
    questions:
    - type: list
      name: change_type
      choices:
      - value: feature
        name: 'feature: A new feature.'
      - value: bug fix
        name: 'bug fix: A bug fix.'
      message: Select the type of change you are committing
    - type: input
      name: message
      message: Body.
    - type: confirm
      name: show_message
      message: Do you want to add body message in commit?
cz --debug changelog --dry-run
## Unreleased


- feat(DL-4567): new feature test
- fix(DL-1234): qweqwe

Screenshots

image

Desired behavior

File: .cz.yaml

commitizen:
  name: cz_customize
  customize:
    message_template: "{{change_type}}:{% if show_message %} {{message}}{% endif %}"
    example: 'feature: this feature enable customize through config file'
    schema: "<type>: <body>"
    schema_pattern: (build|ci|docs|feat|fix|perf|refactor|style|test|chore|revert|bump)(\(\S+\))?!?:(\s.*)
    changelog_pattern: ^(feat|fix|chore|refactor|perf)(\(.+\))?(!)?
    change_type_order: ["BREAKING CHANGE", "feat", "fix", "refactor", "chore", "perf"]
    info_path: cz_customize_info.txt
    info: This is customized info
    questions:
    - type: list
      name: change_type
      choices:
      - value: feature
        name: 'feature: A new feature.'
      - value: bug fix
        name: 'bug fix: A bug fix.'
      message: Select the type of change you are committing
    - type: input
      name: message
      message: Body.
    - type: confirm
      name: show_message
      message: Do you want to add body message in commit?
cz --debug changelog --dry-run`
## Unreleased

### Feat

- **DL-4567**: new feature test

### Fix

- **DL-1234**: qweqwe

Screenshots
image

Environment

Commitizen Version: 2.20.0
Python Version: 3.10.0 (default, Oct 12 2021, 22:37:59) [Clang 13.0.0 (clang-1300.0.29.3)]
Operating System: Darwin

Activity

  1. woile commented on Dec 23, 2021

    @woile
    Member

    Hey bruno, I copied your example, seems to be working well. You see that error because of the --debug flag. Which gives you extra information, but it is not returning an error (you can see the error code doing echo $? and you'll see is still 0).

    Let me know if that's correct, otherwise we can continue exploring the issue.

    Cheers!

  2. brunopereira7 commented on Dec 23, 2021

    @brunopereira7
    Author

    Hey Santiago, thanks for your input.

    I switched on the --debug flag to check if I have any extra information that could explain what I'm missing, but maybe I was not clear in explaining the issue (btw, I updated the "Desired Behavior" section).

    I want to generate the changelog (as it is generated by default with cz_conventional_commits) using cz_customize definitions. Maybe I'm missing something in my configuration, but after trying different settings with cz_customize, I'm not able to achieve the changelog generation features:

    • Grouping by change_type
    • Have only commits following the conventional commits specification/schema pattern

    Thanks once again, and let me know if you need further information.

  3. woile commented on Dec 23, 2021

    @woile
    Member

    I think the commit_parser regex is not exposed in the customize

    commit_parser = r"^(?P<change_type>feat|fix|refactor|perf|BREAKING CHANGE)(?:\((?P<scope>[^()\r\n]*)\)|\()?(?P<breaking>!)?:\s(?P<message>.*)?" # noqa

    and it looks like the customize is using the default from the base

    commit_parser: Optional[str] = r"(?P<message>.*)"

    Any thoguhts on this @Lee-W ? Was there a reason for not exposing commit_parser?

  4. Lee-W commented on Dec 24, 2021

    @Lee-W
    Member

    Back to the time cz_customize was designed, it was not designed to have any default value. But there might be some default values accidentally added to cz_cutsomize. What's in my mind now is to deprecate cz_customize and make the options in cz_* customizable

  5. whoracle commented on Jun 10, 2022

    @whoracle

    Any updates on this topic? I stumbled over this, too. Or do I need to create a custom cz_ plugin?

  6. Lee-W commented on Jul 22, 2022

    @Lee-W
    Member

    We're out of bandwidth to implement this feature these days. PR is welcome 🙂

  7. robertschweizer commented on Mar 29, 2023

    @robertschweizer
    Contributor

    I think commit_parser is exposed since #442.

    Better default handling for cz_customize as suggested by @Lee-W is also discussed here: #535

  8. shantonio commented on Jun 26, 2023

    @shantonio

    @Lee-W
    any updates to use cz_customize with default parser ?

  9. Lee-W commented on Jun 27, 2023

    @Lee-W
    Member

    No update at this moment. Would appreciate it if anyone wants to take a look 🙂

  10. PhilStollery commented on Mar 7, 2025

    @PhilStollery

    If anyone else comes across this, like those trying to get a monorepo working with multitple .cz.toml files, you need to add the commit_parser from defeault.py.

    [tool.commitizen]
    name = "cz_customize"
    version = "0.1.4"
    tag_format = "componenta-${version}"
    ignored_tag_formats = "componentb-${version}" # Avoid noise from other tags
    version_scheme = "semver"
    update_changelog_on_bump = true
    changelog_file = "docs/support/changelog.md"
    template = "CHANGELOG.md.j2"
    changelog_incremental = true
    
    [tool.commitizen.customize]
    changelog_pattern = "^(feat|fix|refactor|perf|break)\\(componenta.*\\)(!)?:" # Match any conventional commit type with platform scope
    bump_pattern = "^(feat|fix|refactor|perf|break)\\(componenta.*\\)(!)?"
    commit_parser = "^(?P<change_type>feat|fix|refactor|perf|break)(?:\\((?P<scope>[^()\r\n]*)\\)|\\()?(?P<breaking>!)?:\\s(?P<message>.*)?"

    Spent three days trying to get this to work - hope it saved you sometime.

  11. bearomorphism commented on May 9, 2026

    @bearomorphism
    Collaborator

    Triage from #1964: Looks fixed in master (4.15.1). commitizen/cz/customize/customize.py (lines 40-50) now reads change_type_order, change_type_map, commit_parser, and changelog_pattern from the customize section. If anyone can still reproduce on 4.15.1, please share the config — otherwise this can probably be closed.

  12. bearomorphism commented on May 9, 2026

    @bearomorphism
    Collaborator

    Verification update (re #1964)

    My earlier "likely fixed" triage was wrong — I reproduced this against current master (4.15.1):

    Config (cz.yaml): cz_customize with change_type_order: ["BREAKING CHANGE", "feat", "fix", "refactor", "chore", "perf"] and changelog_pattern: '^(feat|fix|chore|refactor|perf)(\(.+\))?(!)?'.

    Commits: feat(DL-4567): ..., fix(DL-1234): ..., chore: ....

    Output of cz changelog --dry-run:

    ## Unreleased
    
    
    - chore: update deps
    - fix(DL-1234): qweqwe
    - feat(DL-4567): new feature test

    No ### Feat / ### Fix headings — still ungrouped.

    Verdict: STILL VALID. Likely root cause: cz_customize doesn't auto-derive a commit_parser from changelog_pattern, so the changelog generator can't extract a change_type group key. Either:

    1. Document that users must also set commit_parser (with named groups including change_type), or
    2. Auto-derive a sensible default commit_parser from changelog_pattern for cz_customize.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions