diff --git a/scripts/pkg_in_pipe/pkg_in_pipe.py b/scripts/pkg_in_pipe/pkg_in_pipe.py index 294b4126..4a682b4a 100755 --- a/scripts/pkg_in_pipe/pkg_in_pipe.py +++ b/scripts/pkg_in_pipe/pkg_in_pipe.py @@ -246,7 +246,7 @@ def find_pull_requests(repo, start_sha, end_sha): """Find the pull requests for the commits in the [start_sha,end_sha[ range.""" prs = set() for commit in find_commits(GITHUB, repo, start_sha, end_sha): - cache_key = f'commit-prs-4-{commit.sha}' + cache_key = f'commit-prs-6-{commit.sha}' if not args.re_cache and cache_key in CACHE: prs.update(cast(list[PullRequest], CACHE[cache_key])) elif GITHUB: @@ -258,9 +258,12 @@ def find_pull_requests(repo, start_sha, end_sha): if group: pr = GITHUB.get_repo(repo).get_pull(int(group[1])) prs.add(pr) - # github sometimes return a PR which doesn't match the given commit, so we check if the commit - # is actually in the PR - commit_prs = [pr for pr in commit_prs if commit in pr.get_commits()] + # github sometimes returns a PR which is only related to the commit through its branch + # history, e.g. a PR whose branch was created from this commit, so we check that the + # commit is actually part of the PR: it must be one of its commits, or its merge + # commit. The latter is needed for the PRs merged by rebase or squash, whose merge + # commit on the base branch is not one of the PR commits. + commit_prs = [pr for pr in commit_prs if commit in pr.get_commits() or commit.sha == pr.merge_commit_sha] CACHE.set(cache_key, commit_prs, expire=RETENTION_TIME) prs.update(commit_prs) return sorted(prs, key=lambda p: p.number, reverse=True) diff --git a/scripts/pkg_in_pipe/report.json b/scripts/pkg_in_pipe/report.json new file mode 100644 index 00000000..6885a5a7 --- /dev/null +++ b/scripts/pkg_in_pipe/report.json @@ -0,0 +1,108 @@ +{ + "generated_at": "2026-08-26T14:54:16.276502", + "generated_info": null, + "warnings": { + "plane": false, + "github": false + }, + "error": null, + "tags": [ + { + "tag": "v8.3-testing", + "builds": [ + { + "nvr": "sm-3.2.12-23.5.xcpng8.3", + "previous_nvr": "sm-3.2.12-23.4.xcpng8.3", + "package": "sm", + "url": "https://koji.xcp-ng.org/buildinfo?buildID=6089", + "built_by": "gaetan.lehmann", + "maintained_by": "Storage", + "issues": [ + { + "sequence_id": 3706, + "url": "https://project.vates.tech/vates-global/browse/XCPNG-3706/", + "milestones": [ + "8.3-next" + ] + }, + { + "sequence_id": 3675, + "url": "https://project.vates.tech/vates-global/browse/XCPNG-3675/", + "milestones": [ + "8.3-next" + ] + }, + { + "sequence_id": 3674, + "url": "https://project.vates.tech/vates-global/browse/XCPNG-3674/", + "milestones": [ + "8.3-next" + ] + } + ], + "pull_requests": [ + { + "number": 104, + "title": "Release 3.2.12-23.5", + "url": "https://github.com/xcp-ng-rpms/sm/pull/104", + "linked": true + } + ], + "build_linked": true + }, + { + "nvr": "xapi-26.1.16-1.2.xcpng8.3", + "previous_nvr": "xapi-26.1.16-1.1.xcpng8.3", + "package": "xapi", + "url": "https://koji.xcp-ng.org/buildinfo?buildID=6088", + "built_by": "asultanov", + "maintained_by": "XAPI & Network", + "issues": [ + { + "sequence_id": 3671, + "url": "https://project.vates.tech/vates-global/browse/XCPNG-3671/", + "milestones": [ + "8.3-next" + ] + } + ], + "pull_requests": [ + { + "number": 142, + "title": "Optimize migration from QCOW2-backed VDIs + preserve VDI tags on migration", + "url": "https://github.com/xcp-ng-rpms/xapi/pull/142", + "linked": true + } + ], + "build_linked": true + }, + { + "nvr": "blktap-3.55.5-9.4.xcpng8.3", + "previous_nvr": "blktap-3.55.5-9.3.xcpng8.3", + "package": "blktap", + "url": "https://koji.xcp-ng.org/buildinfo?buildID=6091", + "built_by": "abourgeois", + "maintained_by": "Storage", + "issues": [ + { + "sequence_id": 3669, + "url": "https://project.vates.tech/vates-global/browse/XCPNG-3669/", + "milestones": [ + "8.3-next" + ] + } + ], + "pull_requests": [ + { + "number": 28, + "title": "Release 3.55.5-9.4", + "url": "https://github.com/xcp-ng-rpms/blktap/pull/28", + "linked": true + } + ], + "build_linked": true + } + ] + } + ] +} \ No newline at end of file