@@ -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 = / ( f i x | c l o s e | r e s o l v e ) \s * ( \d + ) / gi;
254+ let prevIssueComments : OctokitComponents [ "schemas" ] [ "issue-comment" ] [ ] =
255+ [ ] ;
256+ let relatedIssueNumbers : number [ ] = [ ] ;
257+ const matchIssueNumber = / ( f i x ( e s ) ? | c l o s e s ? | r e s o l v e s ? ) \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