获取与拉取请求表单相关联的问题和项目 github api v3
Getting Linked issues and Projects associated with a pull request form github api v3
如何从 github API V3 获取给定拉取请求的项目和相关问题? pulls
端点不提供有关它们中任何一个的信息。
在 github 的拉取请求部分的边栏中,提到了 Projects
和 Linked issues
。但是我找不到通过 API 调用获取此信息的方法。
Screenshot of the sidebar for reference
我想知道拉取请求在合并成功时关闭了哪些问题。
要获取带有链接到特定拉取请求的卡片的项目,您可以使用 Github GraphQL API 使用此负载:
{
repository(owner: "twbs", name: "bootstrap") {
pullRequest(number: 30342) {
projectCards {
nodes {
project {
name
}
}
}
}
}
}
但对于相关问题,我认为 API 尚不可用。如果回购是 public,您仍然可以 从 github.com 抓取 列表。以下 python script get the list of issues URL using beautifulsoup :
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")])
理论上,以下查询应该 return 问题的链接拉取请求编号。然而,它 return 是一条提示内部错误的错误消息。我在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
}
}
}
}
}
}
}
}
}
(Post 如果其他人希望将问题链接到 Pull Request 会有所帮助)
没有直接的方法来获取链接到合并请求的问题列表。
但是每个 Pull Request 都包含一个事件时间表,其中一个事件是 Issue 被链接的时候。使用事件的时间线,我能够写一个 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 Explorer (https://developer.github.com/v4/explorer/) 中执行此操作,您将看到问题与拉取请求连接和断开连接的所有事件。
使用该查询,我将响应传递给我为 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);
这里的逻辑如下:
获取类型为 CONNECTED_EVENT 和 DISCONNECTED_EVENT
的合并请求的所有事件列表
创建一个映射,以问题编号为键并记录问题被连接和断开的次数
从该映射中,查找具有奇数计数的键,因为这些是已连接但没有相应的断开连接事件的事件。
这不是一个超级优雅的解决方案,但它解决了我需要的,即找到那些链接的问题。
希望这对其他人有帮助
如何从 github API V3 获取给定拉取请求的项目和相关问题? pulls
端点不提供有关它们中任何一个的信息。
在 github 的拉取请求部分的边栏中,提到了 Projects
和 Linked issues
。但是我找不到通过 API 调用获取此信息的方法。
Screenshot of the sidebar for reference
我想知道拉取请求在合并成功时关闭了哪些问题。
要获取带有链接到特定拉取请求的卡片的项目,您可以使用 Github GraphQL API 使用此负载:
{
repository(owner: "twbs", name: "bootstrap") {
pullRequest(number: 30342) {
projectCards {
nodes {
project {
name
}
}
}
}
}
}
但对于相关问题,我认为 API 尚不可用。如果回购是 public,您仍然可以 从 github.com 抓取 列表。以下 python script get the list of issues URL using beautifulsoup :
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")])
理论上,以下查询应该 return 问题的链接拉取请求编号。然而,它 return 是一条提示内部错误的错误消息。我在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
}
}
}
}
}
}
}
}
}
(Post 如果其他人希望将问题链接到 Pull Request 会有所帮助)
没有直接的方法来获取链接到合并请求的问题列表。
但是每个 Pull Request 都包含一个事件时间表,其中一个事件是 Issue 被链接的时候。使用事件的时间线,我能够写一个 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 Explorer (https://developer.github.com/v4/explorer/) 中执行此操作,您将看到问题与拉取请求连接和断开连接的所有事件。
使用该查询,我将响应传递给我为 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);
这里的逻辑如下:
获取类型为 CONNECTED_EVENT 和 DISCONNECTED_EVENT
的合并请求的所有事件列表
创建一个映射,以问题编号为键并记录问题被连接和断开的次数
从该映射中,查找具有奇数计数的键,因为这些是已连接但没有相应的断开连接事件的事件。
这不是一个超级优雅的解决方案,但它解决了我需要的,即找到那些链接的问题。
希望这对其他人有帮助