@@ -18,7 +18,7 @@ const models = require('../models');
18
18
const logger = require ( '../utils/logger' ) ;
19
19
const errors = require ( '../utils/errors' ) ;
20
20
const topcoderApiHelper = require ( '../utils/topcoder-api-helper' ) ;
21
- const gitHubService = require ( './GithubService ' ) ;
21
+ const gitHelper = require ( '../utils/git-helper ' ) ;
22
22
const emailService = require ( './EmailService' ) ;
23
23
const userService = require ( './UserService' ) ;
24
24
const gitlabService = require ( './GitlabService' ) ;
@@ -83,22 +83,14 @@ async function handleEventGracefully(event, issue, err) {
83
83
comment = `Payment failed: ${ comment } ` ;
84
84
}
85
85
// notify error in git host
86
- if ( event . provider === 'github' ) {
87
- await gitHubService . createComment ( event . copilot , event . data . repository . full_name , issue . number , comment ) ;
88
- } else {
89
- await gitlabService . createComment ( event . copilot , event . data . repository . id , issue . number , comment ) ;
90
- }
86
+ await gitHelper . createComment ( event , issue . number , comment ) ;
91
87
92
88
if ( event . event === 'issue.closed' ) {
93
89
// reopen
94
- await reOpenIssue ( event , issue ) ;
90
+ await gitHelper . reOpenIssue ( event , issue ) ;
95
91
// ensure label is ready for review
96
92
const readyForReviewLabels = [ config . READY_FOR_REVIEW_ISSUE_LABEL ] ;
97
- if ( event . provider === 'github' ) {
98
- await gitHubService . addLabels ( event . copilot , event . data . repository . full_name , issue . number , readyForReviewLabels ) ;
99
- } else {
100
- await gitlabService . addLabels ( event . copilot , event . data . repository . id , issue . number , readyForReviewLabels ) ;
101
- }
93
+ await gitHelper . addLabels ( event , issue . number , readyForReviewLabels ) ;
102
94
}
103
95
}
104
96
}
@@ -140,31 +132,13 @@ async function ensureChallengeExists(event, issue) {
140
132
* @private
141
133
*/
142
134
async function getProjectDetail ( issue , event ) {
143
- let fullRepoUrl ;
144
- if ( issue . provider === 'github' ) {
145
- fullRepoUrl = `https://github.com/${ event . data . repository . full_name } ` ;
146
- } else if ( issue . provider === 'gitlab' ) {
147
- fullRepoUrl = `${ config . GITLAB_API_BASE_URL } /${ event . data . repository . full_name } ` ;
148
- }
135
+ const fullRepoUrl = gitHelper . getFullRepoUrl ( event ) ;
149
136
const project = await models . Project . findOne ( {
150
137
repoUrl : fullRepoUrl
151
138
} ) ;
152
139
return project ;
153
140
}
154
141
155
- /**
156
- * re opens the issue
157
- * @param {Object } event the event
158
- * @param {Object } issue the issue
159
- */
160
- async function reOpenIssue ( event , issue ) {
161
- if ( event . provider === 'github' ) {
162
- await gitHubService . changeState ( event . copilot , event . data . repository . full_name , issue . number , 'open' ) ;
163
- } else {
164
- await gitlabService . changeState ( event . copilot , event . data . repository . id , issue . number , 'reopen' ) ;
165
- }
166
- }
167
-
168
142
/**
169
143
* removes the current assignee if user is not found in topcoder X mapping.
170
144
* user first need to sign up in Topcoder X
@@ -175,25 +149,14 @@ async function reOpenIssue(event, issue) {
175
149
* @private
176
150
*/
177
151
async function rollbackAssignee ( event , assigneeUserId , issue , reOpen = false ) {
178
- let assigneeUsername ;
179
- if ( event . provider === 'github' ) {
180
- assigneeUsername = await gitHubService . getUsernameById ( event . copilot , assigneeUserId ) ;
181
- } else {
182
- assigneeUsername = await gitlabService . getUsernameById ( event . copilot , assigneeUserId ) ;
183
- }
152
+ const assigneeUsername = await gitHelper . getUsernameById ( event , assigneeUserId ) ;
184
153
// comment on the git ticket for the user to self-sign up with the Topcoder x Self-Service tool
185
154
const comment = `@${ assigneeUsername } , please sign-up with Topcoder X tool` ;
186
- if ( event . provider === 'github' ) {
187
- await gitHubService . createComment ( event . copilot , event . data . repository . full_name , issue . number , comment ) ;
188
- // un-assign the user from the ticket
189
- await gitHubService . removeAssign ( event . copilot , event . data . repository . full_name , issue . number , assigneeUsername ) ;
190
- } else {
191
- await gitlabService . createComment ( event . copilot , event . data . repository . id , issue . number , comment ) ;
192
- // un-assign the user from the ticket
193
- await gitlabService . removeAssign ( event . copilot , event . data . repository . id , issue . number , assigneeUserId ) ;
194
- }
155
+ await gitHelper . createComment ( event , issue . number , comment ) ;
156
+ // un-assign the user from the ticket
157
+ await gitHelper . removeAssign ( event , issue . number , assigneeUserId , assigneeUsername ) ;
195
158
if ( reOpen ) {
196
- await reOpenIssue ( event , issue ) ;
159
+ await gitHelper . reOpenIssue ( event , issue ) ;
197
160
}
198
161
}
199
162
@@ -267,22 +230,14 @@ async function handleIssueAssignment(event, issue) {
267
230
. push ( config . ASSIGNED_ISSUE_LABEL )
268
231
. value ( ) ;
269
232
270
- if ( event . provider === 'github' ) {
271
- await gitHubService . addLabels ( event . copilot , event . data . repository . full_name , issue . number , updateLabels ) ;
272
- } else {
273
- await gitlabService . addLabels ( event . copilot , event . data . repository . id , issue . number , updateLabels ) ;
274
- }
233
+ await gitHelper . addLabels ( event , issue . number , updateLabels ) ;
275
234
} catch ( err ) {
276
235
handleEventGracefully ( event , issue , err ) ;
277
236
return ;
278
237
}
279
238
const contestUrl = getUrlForChallengeId ( dbIssue . challengeId ) ;
280
239
const comment = `Contest ${ contestUrl } has been updated - it has been assigned to ${ userMapping . topcoderUsername } .` ;
281
- if ( event . provider === 'github' ) {
282
- await gitHubService . createComment ( event . copilot , event . data . repository . full_name , issue . number , comment ) ;
283
- } else {
284
- await gitlabService . createComment ( event . copilot , event . data . repository . id , issue . number , comment ) ;
285
- }
240
+ await gitHelper . createComment ( event , issue . number , comment ) ;
286
241
287
242
logger . debug ( `Member ${ userMapping . topcoderUsername } is assigned to challenge with id ${ dbIssue . challengeId } ` ) ;
288
243
} else {
@@ -307,20 +262,11 @@ async function handleIssueComment(event, issue) {
307
262
const newTitle = `[$${ parsedComment . acceptedBidAmount } ] ${ issue . title } ` ;
308
263
logger . debug ( `updating issue: ${ event . data . repository . name } /${ issue . number } ` ) ;
309
264
310
- if ( event . provider === 'github' ) {
311
- await gitHubService . updateIssue ( event . copilot , event . data . repository . full_name , issue . number , newTitle ) ;
312
- } else {
313
- await gitlabService . updateIssue ( event . copilot , event . data . repository . id , issue . number , newTitle ) ;
314
- }
265
+ await gitHelper . updateIssue ( event , issue . number , newTitle ) ;
315
266
316
267
// assign user
317
268
logger . debug ( `assigning user, ${ parsedComment . assignedUser } to issue: ${ event . data . repository . name } /${ issue . number } ` ) ;
318
- if ( event . provider === 'github' ) {
319
- await gitHubService . assignUser ( event . copilot , event . data . repository . full_name , issue . number , parsedComment . assignedUser ) ;
320
- } else {
321
- const userId = await gitlabService . getUserIdByLogin ( event . copilot , parsedComment . assignedUser ) ;
322
- await gitlabService . assignUser ( event . copilot , event . data . repository . id , issue . number , userId ) ;
323
- }
269
+ await gitHelper . assignUser ( event , issue . number , parsedComment . assignedUser ) ;
324
270
}
325
271
}
326
272
@@ -363,11 +309,7 @@ async function handleIssueUpdate(event, issue) {
363
309
// comment on the git ticket for the user to self-sign up with the Topcoder x Self-Service tool
364
310
const contestUrl = getUrlForChallengeId ( dbIssue . challengeId ) ;
365
311
const comment = `Contest ${ contestUrl } has been updated - the new changes has been updated for this ticket.` ;
366
- if ( event . provider === 'github' ) {
367
- await gitHubService . createComment ( event . copilot , event . data . repository . full_name , issue . number , comment ) ;
368
- } else {
369
- await gitlabService . createComment ( event . copilot , event . data . repository . id , issue . number , comment ) ;
370
- }
312
+ await gitHelper . createComment ( event , issue . number , comment ) ;
371
313
372
314
logger . debug ( `updated challenge ${ dbIssue . challengeId } for for issue ${ issue . number } ` ) ;
373
315
}
@@ -390,11 +332,7 @@ async function handleIssueClose(event, issue) {
390
332
logger . debug ( `This issue ${ issue . number } is closed without fix accepted label.` ) ;
391
333
let comment = 'This ticket was not processed for payment. If you would like to process it for payment,' ;
392
334
comment += ' please reopen it, add the ```' + config . FIX_ACCEPTED_ISSUE_LABEL + '``` label, and then close it again' ; // eslint-disable-line
393
- if ( event . provider === 'github' ) {
394
- await gitHubService . createComment ( event . copilot , event . data . repository . full_name , issue . number , comment ) ;
395
- } else {
396
- await gitlabService . createComment ( event . copilot , event . data . repository . id , issue . number , comment ) ;
397
- }
335
+ await gitHelper . createComment ( event , issue . number , comment ) ;
398
336
closeChallenge = true ;
399
337
}
400
338
if ( issue . prizes [ 0 ] === 0 ) {
@@ -485,11 +423,7 @@ async function handleIssueClose(event, issue) {
485
423
. push ( config . ASSIGNED_ISSUE_LABEL ) . value ( )
486
424
} ) ;
487
425
await dbIssue . save ( ) ;
488
- if ( event . provider === 'github' ) {
489
- await gitHubService . markIssueAsPaid ( event . copilot , event . data . repository . full_name , issue . number , dbIssue . challengeId ) ;
490
- } else {
491
- await gitlabService . markIssueAsPaid ( event . copilot , event . data . repository . id , issue . number , dbIssue . challengeId ) ;
492
- }
426
+ await gitHelper . markIssueAsPaid ( event , issue . number , dbIssue . challengeId ) ;
493
427
} catch ( e ) {
494
428
await handleEventGracefully ( event , issue , e , event . paymentSuccessful ) ;
495
429
return ;
@@ -559,11 +493,7 @@ async function handleIssueCreate(event, issue) {
559
493
560
494
const contestUrl = getUrlForChallengeId ( issue . challengeId ) ;
561
495
const comment = `Contest ${ contestUrl } has been created for this ticket.` ;
562
- if ( event . provider === 'github' ) {
563
- await gitHubService . createComment ( event . copilot , event . data . repository . full_name , issue . number , comment ) ;
564
- } else {
565
- await gitlabService . createComment ( event . copilot , event . data . repository . id , issue . number , comment ) ;
566
- }
496
+ await gitHelper . createComment ( event , issue . number , comment ) ;
567
497
if ( event . provider === 'gitlab' ) {
568
498
// if assignee is added during issue create then assign as well
569
499
if ( event . data . issue . assignees && event . data . issue . assignees . length > 0 && event . data . issue . assignees [ 0 ] . id ) {
@@ -622,11 +552,7 @@ async function handleIssueUnAssignment(event, issue) {
622
552
} ) ;
623
553
const contestUrl = getUrlForChallengeId ( dbIssue . challengeId ) ;
624
554
const comment = `Contest ${ contestUrl } has been updated - ${ userMapping . topcoderUsername } has been unassigned.` ;
625
- if ( event . provider === 'github' ) {
626
- await gitHubService . createComment ( event . copilot , event . data . repository . full_name , issue . number , comment ) ;
627
- } else {
628
- await gitlabService . createComment ( event . copilot , event . data . repository . id , issue . number , comment ) ;
629
- }
555
+ await gitHelper . createComment ( event , issue . number , comment ) ;
630
556
logger . debug ( `Member ${ userMapping . topcoderUsername } is unassigned from challenge with id ${ dbIssue . challengeId } ` ) ;
631
557
}
632
558
}
@@ -656,12 +582,7 @@ async function process(event) {
656
582
repositoryId : event . data . repository . id ,
657
583
labels : event . data . issue . labels
658
584
} ;
659
- let fullRepoUrl ;
660
- if ( event . provider === 'github' ) {
661
- fullRepoUrl = `https://github.com/${ event . data . repository . full_name } ` ;
662
- } else if ( event . provider === 'gitlab' ) {
663
- fullRepoUrl = `${ config . GITLAB_API_BASE_URL } /${ event . data . repository . full_name } ` ;
664
- }
585
+ const fullRepoUrl = gitHelper . getFullRepoUrl ( event ) ;
665
586
666
587
const project = await models . Project . findOne ( {
667
588
repoUrl : fullRepoUrl
@@ -682,11 +603,7 @@ async function process(event) {
682
603
issue . body = md . render ( _ . get ( issue , 'body' , '' ) ) ;
683
604
684
605
if ( event . data . issue . assignees && event . data . issue . assignees . length > 0 && event . data . issue . assignees [ 0 ] . id ) {
685
- if ( event . provider === 'github' ) {
686
- issue . assignee = await gitHubService . getUsernameById ( copilot , event . data . issue . assignees [ 0 ] . id ) ;
687
- } else if ( event . provider === 'gitlab' ) {
688
- issue . assignee = await gitlabService . getUsernameById ( copilot , event . data . issue . assignees [ 0 ] . id ) ;
689
- }
606
+ issue . assign = await gitHelper . getUsernameById ( event , event . data . issue . assignees [ 0 ] . id ) ;
690
607
}
691
608
if ( event . event === 'issue.created' ) {
692
609
await handleIssueCreate ( event , issue ) ;
0 commit comments