Skip to content

~~Link commits in changelog~~ add plugin_path option to enable loading local plugins #396

@jtpavlock

Description

@jtpavlock
Contributor

Description

Add the ability to link a changelog message to the original commit. This would greatly increase the ability to provide context around changes.

Possible Solution

Ability to add a changelog option, so when generating a changelog, it would just add links in the generated markdown for the associated commit message.

After #396 (comment), we decide adding a plugin_path might be a good solution for it.

Activity

woile

woile commented on Jul 1, 2021

@woile
Member

Hello! This can be achieved using a custom hook.
https://commitizen-tools.github.io/commitizen/customization.html#custom-changelog-generator
You can use changelog_message_builder_hook

In the example you can see the commit author is being added to each commit, the same can be done for commits:

def changelog_message_builder_hook(self, parsed_message: dict, commit: git.GitCommit) -> dict:
        rev = commit.rev
        m = parsed_message["message"]
        parsed_message["message"] = f"{m} {rev} [{commit.rev}](github.com/project/{commit.rev})"
        return parsed_message

I don't think it makes sense to add links, because if we add github link any other git server (gitlab, bitbucket, etc) would have to have something similar.

jtpavlock

jtpavlock commented on Jul 6, 2021

@jtpavlock
ContributorAuthor

Thanks for the response! Although I think I'm a bit confused how I would add the above function you mentioned to a python configuration file alongside my project. The docs seem to imply I need an entirely separate package/github repo? That seems a bit excessive for a small project-specific configuration change.

Lee-W

Lee-W commented on Jul 7, 2021

@Lee-W
Member

Yes, I think that's the only way as of now.

woile

woile commented on Jul 7, 2021

@woile
Member

As of now the changelog provides some flexibility.
Extra functionality like sending slack messages, customizing what is shown in the changelog, like emojis, github links, etc are considered out of the scope of the flexibility we can provide.
You could create a new custom changelog with the github commits and list it in the third party section, we have a template (which needs some love :/)

I think the design could be improved, but we don't have the capacity at the moment, sorry for that.

jtpavlock

jtpavlock commented on Jul 12, 2021

@jtpavlock
ContributorAuthor

Could adding a config setting pointing to a python file work?

The following code is a snippet that can be used to import a module from a given plugin_path filename

plugin_spec = importlib.util.spec_from_file_location(plugin_path.stem, plugin_path)
    if plugin_spec:
        plugin_module = importlib.util.module_from_spec(plugin_spec)
        plugin_spec.loader.exec_module(plugin_module)

source: https://docs.python.org/3/library/importlib.html#importing-a-source-file-directly

Maybe then plugin_module could be added to the list of plugins that you import normally?

Lee-W

Lee-W commented on Jul 14, 2021

@Lee-W
Member

Does that mean we'll need to add a plugin_path configuration?

This is how we load cz_ as of now
https://github.com/commitizen-tools/commitizen/blob/master/commitizen/cz/__init__.py

jtpavlock

jtpavlock commented on Jul 14, 2021

@jtpavlock
ContributorAuthor

Does that mean we'll need to add a plugin_path configuration?

Yes, that's correct.

Lee-W

Lee-W commented on Jul 15, 2021

@Lee-W
Member

Then I think this issue also relates to #264 (comment). We'll need to make cz configurable first. It's on our plan but we're quite busy these days. Not sure when could we support this feature

jtpavlock

jtpavlock commented on Jul 15, 2021

@jtpavlock
ContributorAuthor

I think I'm a bit confused. I'm talking about having a configuration option in your pyproject.toml called plugin_path that would point to a local plugin file so users could easily implement their own project-specific plugins without having to create a whole new package on PYPI.

Lee-W

Lee-W commented on Jul 16, 2021

@Lee-W
Member

After a second thought, I was wrong about the idea. Yep, I think we could add this option. @woile What do you think?

jtpavlock

jtpavlock commented on Aug 2, 2021

@jtpavlock
ContributorAuthor

@Lee-W could you point me towards the relevant code/steps needed to add a new configuration option? If you guys are keen on adding this as a feature, that is.

Lee-W

Lee-W commented on Aug 3, 2021

@Lee-W
Member

commitizen/config/init.py is the file that we use to manage the configuration. But I think we might not need to change it, unless the configuration is complicated.

commitizen/cz/init.py is where we load these cz rules. I think this one might be more relevant.

usrme

usrme commented on Jun 10, 2022

@usrme

Example on how to add a custom Python module: #395 (comment).

changed the title [-]Link commits in changelog[/-] [+]~~Link commits in changelog~~ add `plugin_path` option to enable loading local plugins[/+] on Aug 14, 2022
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

        Participants

        @woile@Lee-W@usrme@jtpavlock

        Issue actions

          ~~Link commits in changelog~~ add `plugin_path` option to enable loading local plugins · Issue #396 · commitizen-tools/commitizen