orhun / git-cliff

A highly customizable Changelog Generator that follows Conventional Commit specifications ⛰️
https://git-cliff.org
Apache License 2.0
9.34k stars 201 forks source link

Missing/wrong pull requests for commits #436

Open orhun opened 10 months ago

orhun commented 10 months ago

Describe the issue

The current approach to associate commits with the pull requests is the following:

  1. Fetch the commits.
  2. Fetch the pull requests.
  3. Check if the merge_commit_sha of the pull request matches the SHA of the commit.
github_commits.for_each(|commit| {
        let pull_request = github_pull_requests
            .iter()
            .find(|pr| pr.merge_commit_sha == Some(commit.sha.clone()));
    });

This poses a couple of problems when the pull request is not squashed but rebased.

Take #360 for example (it is rebased). git cliff -c github outputs:

* fix: allow version bump with a single previous release by @orhun in #360
* fix: allow version bump with a single previous release by @nappa85

However, it should be:

* fix: allow version bump with a single previous release by @nappa85 in #360

Additional context

I don't know how to fix this yet since it is the limitation of the data we get from the GitHub API. In the perfect world, /commits endpoint would also return the associated pull request number so that we don't need to fetch the pull requests and do some hacky comparison.

Alternatively, we could use <commit>/pull API but that just means sending a request for each commit which adds up to a lot.

dark0dave commented 2 months ago

We need to change the logic to get the user from the pr, not from the commit, get the pr number from the commit should be straightforward.

dark0dave commented 2 months ago
    "number": 1347,
    "state": "open",
    "locked": true,
    "title": "Amazing new feature",
    "user": {
      "login": "octocat",

https://docs.github.com/en/rest/pulls/pulls?apiVersion=2022-11-28#list-pull-requests

orhun commented 2 months ago

That actually makes sense!