@@ -25,7 +25,90 @@ async function run() {
25
25
}
26
26
} ) ;
27
27
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 + ) \] \( h t t p s : \/ \/ g i t h u b \. c o m \/ g e t s e n t r y \/ s e n t r y - j a v a s c r i p t \/ p u l l \/ (?: \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 ) ;
29
112
}
30
113
31
114
run ( ) ;
0 commit comments