@@ -18,6 +18,32 @@ param(
1818 $AuthToken
1919)
2020
21+ function AddMembers ($memberName , $additionSet ) {
22+ $headers = @ {
23+ Authorization = " bearer $AuthToken "
24+ }
25+ $uri = " https://api.github.com/repos/$RepoOwner /$RepoName /pulls/$PRNumber /requested_reviewers"
26+ $errorOccurred = $false
27+
28+ foreach ($id in $additionSet ) {
29+ try {
30+ $postResp = @ {}
31+ $postResp [$memberName ] = @ ($id )
32+ $postResp = $postResp | ConvertTo-Json
33+
34+ Write-Host $postResp
35+ $resp = Invoke-RestMethod - Method Post - Headers $headers - Body $postResp - Uri $uri - MaximumRetryCount 3
36+ $resp | Write-Verbose
37+ }
38+ catch {
39+ Write-Host " Error attempting to add $user `n $_ "
40+ $errorOccurred = $true
41+ }
42+ }
43+
44+ return $errorOccurred
45+ }
46+
2147# at least one of these needs to be populated
2248if (-not $GitHubUsers -and -not $GitHubTeams ) {
2349 Write-Host " No user provided for addition, exiting."
@@ -27,54 +53,9 @@ if (-not $GitHubUsers -and -not $GitHubTeams) {
2753$userAdditions = @ ($GitHubUsers.Split (" ," ) | % { $_.Trim () } | ? { return $_ })
2854$teamAdditions = @ ($GitHubTeams.Split (" ," ) | % { $_.Trim () } | ? { return $_ })
2955
30- $headers = @ {
31- Authorization = " bearer $AuthToken "
32- }
33- $uri = " https://api.github.com/repos/$RepoOwner /$RepoName /pulls/$PRNumber /requested_reviewers"
56+ $errorsOccurredAddingUsers = AddMembers - memberName " reviewers" - additionSet $userAdditions
57+ $errorsOccurredAddingTeams = AddMembers - memberName " team_reviewers" - additionSet $teamAdditions
3458
35- try {
36- $resp = Invoke-RestMethod - Headers $headers $uri - MaximumRetryCount 3
37- }
38- catch {
39- Write-Error " Invoke-RestMethod [$uri ] failed with exception:`n $_ "
59+ if ($errorsOccurredAddingUsers -or $errorsOccurredAddingTeams ) {
4060 exit 1
4161}
42-
43- # the response object takes this form: https://developer.github.com/v3/pulls/review_requests/#response-1
44- # before we can push a new reviewer, we need to pull the simple Ids out of the complex objects that came back in the response
45- $userReviewers = @ ($resp.users | % { return $_.login })
46- $teamReviewers = @ ($resp.teams | % { return $_.slug })
47-
48- if (! $userReviewers ) { $modifiedUserReviewers = @ () } else { $modifiedUserReviewers = $userReviewers.Clone () }
49- $modifiedUserReviewers += ($userAdditions | ? { ! $modifiedUserReviewers.Contains ($_ ) })
50-
51- if ($teamReviewers ) { $modifiedTeamReviewers = @ () } else { $modifiedTeamReviewers = $teamReviewers.Clone () }
52- $modifiedTeamReviewers += ($teamAdditions | ? { ! $modifiedTeamReviewers.Contains ($_ ) })
53-
54- $detectedUserDiffs = Compare-Object - ReferenceObject $userReviewers - DifferenceObject $modifiedUserReviewers
55- $detectedTeamDiffs = Compare-Object - ReferenceObject $teamReviewers - DifferenceObject $modifiedTeamReviewers
56-
57- # Compare-Object returns values when there is a difference between the comparied objects.
58- # we only want to run the update if there IS a difference.
59- if ($detectedUserDiffs -or $detectedTeamDiffs ) {
60- $postResp = @ {}
61-
62- if ($modifiedUserReviewers ) { $postResp [" reviewers" ] = $modifiedUserReviewers }
63- if ($modifiedTeamReviewers ) { $postResp [" team_reviewers" ] = $modifiedTeamReviewers }
64-
65- $postResp = $postResp | ConvertTo-Json
66-
67- try {
68- Write-Host $postResp
69- $resp = Invoke-RestMethod - Method Post - Headers $headers - Body $postResp - Uri $uri - MaximumRetryCount 3
70- $resp | Write-Verbose
71- }
72- catch {
73- Write-Error " Unable to update PR reviewers. `n $_ "
74- }
75- }
76- else {
77- $results = $GitHubUsers + $GitHubTeams
78- Write-Host " Reviewers $results already added. Exiting."
79- exit (0 )
80- }
0 commit comments