Skip to content

Commit 1c54d0a

Browse files
committed
fix: update
1 parent 94fd458 commit 1c54d0a

File tree

1 file changed

+58
-51
lines changed

1 file changed

+58
-51
lines changed

packages/app/server/routes/publish.post.ts

Lines changed: 58 additions & 51 deletions
Original file line numberDiff line numberDiff line change
@@ -251,13 +251,12 @@ export default eventHandler(async (event) => {
251251
let prevComment:
252252
| OctokitComponents["schemas"]["issue-comment"]
253253
| undefined;
254-
let prevIssueComment:
255-
| OctokitComponents["schemas"]["issue-comment"]
256-
| undefined;
257-
let relatedIssueNumber: number | undefined;
258-
const matchIssueNumber = /(fix|close|resolve)\s*(\d+)/gi;
254+
let prevIssueComments: OctokitComponents["schemas"]["issue-comment"][] =
255+
[];
256+
let relatedIssueNumbers: number[] = [];
257+
const matchIssueNumber = /(fix(es)?|closes?|resolves?)\s*(\d+)/gi;
259258
const fullAddressMatchIssueNumber = new RegExp(
260-
`(fix|close|resolve)\\s*https://github.com/${workflowData.owner}/${workflowData.repo}/issues/(\\d+)`,
259+
`(fix(es)|closes?|resolves?)\\s*https://github.com/${workflowData.owner}/${workflowData.repo}/issues/(\\d+)`,
261260
"gi",
262261
);
263262

@@ -281,19 +280,17 @@ export default eventHandler(async (event) => {
281280
while ((match = matchIssueNumber.exec(body)) !== null) {
282281
const issueNumber = Number(match[2]);
283282
if (!isNaN(issueNumber)) {
284-
relatedIssueNumber = issueNumber;
285-
break;
283+
relatedIssueNumbers.push(issueNumber);
286284
}
287285
}
288-
if (!relatedIssueNumber) {
286+
if (!relatedIssueNumbers.length) {
289287
fullAddressMatchIssueNumber.lastIndex = 0;
290288
while (
291289
(match = fullAddressMatchIssueNumber.exec(body)) !== null
292290
) {
293291
const issueNumber = Number(match[2]);
294292
if (!isNaN(issueNumber)) {
295-
relatedIssueNumber = issueNumber;
296-
break;
293+
relatedIssueNumbers.push(issueNumber);
297294
}
298295
}
299296
}
@@ -302,7 +299,7 @@ export default eventHandler(async (event) => {
302299
if (!syncCommentWithIssue) {
303300
done();
304301
break;
305-
} else if (relatedIssueNumber) {
302+
} else if (relatedIssueNumbers.length) {
306303
done();
307304
break;
308305
}
@@ -312,25 +309,28 @@ export default eventHandler(async (event) => {
312309
},
313310
);
314311

315-
if (syncCommentWithIssue && relatedIssueNumber) {
316-
await installation.paginate(
317-
"GET /repos/{owner}/{repo}/issues/{issue_number}/comments",
318-
{
319-
owner: workflowData.owner,
320-
repo: workflowData.repo,
321-
issue_number: relatedIssueNumber,
322-
},
323-
({ data }, done) => {
324-
for (const c of data) {
325-
if (c.performed_via_github_app?.id === Number(appId)) {
326-
prevIssueComment = c;
327-
done();
328-
break;
312+
if (syncCommentWithIssue && relatedIssueNumbers.length) {
313+
prevIssueComments = [];
314+
for (const issueNumber of relatedIssueNumbers) {
315+
await installation.paginate(
316+
"GET /repos/{owner}/{repo}/issues/{issue_number}/comments",
317+
{
318+
owner: workflowData.owner,
319+
repo: workflowData.repo,
320+
issue_number: issueNumber,
321+
},
322+
({ data }, done) => {
323+
for (const c of data) {
324+
if (c.performed_via_github_app?.id === Number(appId)) {
325+
prevIssueComments.push(c);
326+
done();
327+
break;
328+
}
329329
}
330-
}
331-
return [];
332-
},
333-
);
330+
return [];
331+
},
332+
);
333+
}
334334
}
335335

336336
if (comment !== "off") {
@@ -371,18 +371,23 @@ export default eventHandler(async (event) => {
371371
);
372372
if (
373373
syncCommentWithIssue &&
374-
relatedIssueNumber &&
375-
prevIssueComment
374+
relatedIssueNumbers.length &&
375+
prevIssueComments.length
376376
) {
377-
await installation.request(
378-
"PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}",
379-
{
380-
owner: workflowData.owner,
381-
repo: workflowData.repo,
382-
comment_id: prevIssueComment.id,
383-
body: commentBody,
384-
},
385-
);
377+
for (let i = 0; i < relatedIssueNumbers.length; i++) {
378+
const prevIssueComment = prevIssueComments[i];
379+
if (!prevIssueComment) continue;
380+
381+
await installation.request(
382+
"PATCH /repos/{owner}/{repo}/issues/comments/{comment_id}",
383+
{
384+
owner: workflowData.owner,
385+
repo: workflowData.repo,
386+
comment_id: prevIssueComment.id,
387+
body: commentBody,
388+
},
389+
);
390+
}
386391
}
387392
} else {
388393
const commentBody = generatePullRequestPublishMessage(
@@ -407,16 +412,18 @@ export default eventHandler(async (event) => {
407412
body: commentBody,
408413
},
409414
);
410-
if (syncCommentWithIssue && relatedIssueNumber) {
411-
await installation.request(
412-
"POST /repos/{owner}/{repo}/issues/{issue_number}/comments",
413-
{
414-
owner: workflowData.owner,
415-
repo: workflowData.repo,
416-
issue_number: relatedIssueNumber,
417-
body: commentBody,
418-
},
419-
);
415+
if (syncCommentWithIssue && relatedIssueNumbers.length) {
416+
for (const relatedIssueNumber of relatedIssueNumbers) {
417+
await installation.request(
418+
"POST /repos/{owner}/{repo}/issues/{issue_number}/comments",
419+
{
420+
owner: workflowData.owner,
421+
repo: workflowData.repo,
422+
issue_number: relatedIssueNumber,
423+
body: commentBody,
424+
},
425+
);
426+
}
420427
}
421428
}
422429
} catch (error) {

0 commit comments

Comments
 (0)