从github api v3获取与拉取请求相关联的链接问题和项目



如何从github API V3获取给定拉取请求的项目和链接问题?pulls端点不提供关于它们中任何一个的信息。在github的拉取请求部分的侧边栏中,提到了ProjectsLinked issues。但我找不到通过API调用获取这些信息的方法。

供参考的侧边栏屏幕截图

我想知道合并成功后拉取请求关闭的问题是什么。

要获得带有链接到特定拉取请求的卡片的项目,您可以使用以下有效负载使用Github GraphQL API:

{
repository(owner: "twbs", name: "bootstrap") {
pullRequest(number: 30342) {
projectCards {
nodes {
project {
name
}
}
}
}
}
}

但对于相关的问题,我认为API还不可用。如果回购是公开的,您仍然可以从github.com抓取列表。以下python脚本使用beautifulsoup:获取问题URL列表

import requests
from bs4 import BeautifulSoup
import re
repo = "twbs/bootstrap"
pr = "30342"
r = requests.get(f"https://github.com/{repo}/pull/{pr}")
soup = BeautifulSoup(r.text, 'html.parser')
issueForm = soup.find("form", { "aria-label": re.compile('Link issues')})
print([ i["href"] for i in issueForm.find_all("a")])

2022更新:

GraphQL中的pull请求现在有一个closingIssuesReferences属性。

pullRequest(number: $number) {
id
closingIssuesReferences (first: 50) {
edges {
node {
id
body
number
title
}
}
}
}

没有直接的方法可以获得链接到拉取请求的问题列表。

但每个Pull Request都包括一个事件的时间线,其中一个事件是当问题被链接时。使用事件的时间线,我能够编写一个GitHub APIv4 API请求和一些javascript,以将问题链接到PR:

首先,这里是GraphQL查询:

{
resource(url: "https://github.com/Org/Project/pull/1234") {
... on PullRequest {
timelineItems(itemTypes: [CONNECTED_EVENT, DISCONNECTED_EVENT], first: 100) {
nodes {
... on ConnectedEvent {
id
subject {
... on Issue {
number
}
}
}
... on DisconnectedEvent {
id
subject {
... on Issue {
number
}
}
}
}
}
}
}
}

如果在GitHub GraphQL资源管理器中运行(https://developer.github.com/v4/explorer/),您将看到Issue与Pull Request连接和断开连接的所有事件。

使用该查询,我将响应传递给我为nodejs应用程序编写的代码,然后确定哪个Issue仍然链接到Pull Request

const issues = {};
resource.timelineItems.nodes.map(node => {
if (issues.hasOwnProperty(node.subject.number)) {
issues[node.subject.number]++;
} else {
issues[node.subject.number] = 1;
}
});
const linkedIssues = [];
for (const [issue, count] of Object.entries(issues)) {
if (count % 2 != 0) {
linkedIssues.push(issue);
}
}
console.log(issues);
console.log(linkedIssues);

这里的逻辑如下:

  1. 获取CONNECTED_EVENT和DISCONNECTED_EVENT 类型的Pull请求上的所有事件的列表

  2. 创建一个由问题编号键入的映射,并记录问题连接和断开的次数

  3. 从该映射中,查找计数为奇数的键,因为这些是已连接的事件,但没有相应的DISCONNECTED事件。

这不是一个超级优雅的解决方案,但它解决了我所需要的,即找到那些链接的问题。

希望这能帮助其他人摆脱

理论上,以下查询应该返回问题的链接拉取请求编号。然而,它现在返回一条提示内部错误的错误消息。我在github开了一张关于它的票。

(kode konveyor/TaskMarket项目,第121期(

{
repository(owner: "kode-konveyor", name: "TaskMarket") {
issue(number: 121) {
id
number
title
timelineItems {
__typename
... on IssueTimelineItemsConnection {
nodes {
__typename
... on ConnectedEvent {
source {
__typename
... on PullRequest {
number
}
}
subject {
__typename
... on PullRequest {
number
}
}
}
}
}
}
}
}
}

相关内容

  • 没有找到相关文章

最新更新