Skip to content

Commit e382981

Browse files
committed
query linked issues
1 parent 493ddf3 commit e382981

File tree

1 file changed

+84
-1
lines changed
  • dev-packages/release-comment-issues-gh-action

1 file changed

+84
-1
lines changed

dev-packages/release-comment-issues-gh-action/index.mjs

Lines changed: 84 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,90 @@ async function run() {
2525
}
2626
});
2727

28-
console.log(release);
28+
29+
const prNumbers = extractPrsFromReleaseBody(release.data.body);
30+
31+
if(!prNumbers.length) {
32+
core.debug('No PRs found in release body.');
33+
return;
34+
}
35+
36+
core.debug(`Found PRs in release body: ${prNumbers.join(', ')}`);
37+
38+
39+
const res = await octokit.graphql(`
40+
{
41+
query issuesForPr($owner: String!, $repo: String!, $prNumber: Int!) {
42+
repository(owner: $owner, name: $repo) {
43+
pullRequest(number: $prNumber) {
44+
id
45+
closingIssuesReferences (first: 50) {
46+
edges {
47+
node {
48+
id
49+
number
50+
}
51+
}
52+
}
53+
}
54+
}
55+
}
56+
}
57+
`, {
58+
prNumber: prNumbers[0],
59+
owner,
60+
repo
61+
});
62+
63+
const linkedIssues = Promise.all(prNumbers.map((prNumber) => getLinkedIssuesForPr(octokit, { repo, owner, prNumber })));
64+
65+
console.log(linkedIssues);
66+
}
67+
68+
/**
69+
*
70+
* @param {string} body
71+
* @returns {number[]}
72+
*/
73+
function extractPrsFromReleaseBody(body) {
74+
const regex = /\[#(\d+)\]\(https:\/\/github\.com\/getsentry\/sentry-javascript\/pull\/(?:\d+)\)/gm;
75+
const prNumbers = Array.from(new Set([...body.matchAll(regex)].map((match) => parseInt(match[1]))));
76+
77+
return prNumbers.filter(number => !!number && !Number.isNaN(number));
78+
}
79+
80+
/**
81+
*
82+
* @param {ReturnType<import('@actions/github').getOctokit>} octokit
83+
* @param {{ repo: string, owner: string, prNumber: number}} options
84+
* @returns {Promise<{id: string, number: number}[]>}
85+
*/
86+
async function getLinkedIssuesForPr(octokit, { repo, owner, prNumber }) {
87+
const res = await octokit.graphql(`
88+
{
89+
query issuesForPr($owner: String!, $repo: String!, $prNumber: Int!) {
90+
repository(owner: $owner, name: $repo) {
91+
pullRequest(number: $prNumber) {
92+
id
93+
closingIssuesReferences (first: 50) {
94+
edges {
95+
node {
96+
id
97+
number
98+
}
99+
}
100+
}
101+
}
102+
}
103+
}
104+
}
105+
`, {
106+
prNumber,
107+
owner,
108+
repo
109+
});
110+
111+
return res.data.repository?.pullRequest?.closingIssuesReferences.edges.map(edge => edge.node);
29112
}
30113

31114
run();

0 commit comments

Comments
 (0)