Skip to content

Commit 429e5e4

Browse files
authored
Sync eng/common directory with azure-sdk-tools repository for Tools PR 1041 (#14005)
1 parent 01982cf commit 429e5e4

File tree

4 files changed

+109
-104
lines changed

4 files changed

+109
-104
lines changed

eng/common/pipelines/templates/steps/create-pull-request.yml

+16-4
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ parameters:
1515
ScriptDirectory: eng/common/scripts
1616
GHReviewersVariable: ''
1717
GHTeamReviewersVariable: ''
18-
GHAssignessVariable: ''
1918
# Multiple labels seperated by comma, e.g. "bug, APIView"
2019
PRLabels: ''
2120

@@ -76,6 +75,19 @@ steps:
7675
-PRTitle "${{ parameters.PRTitle }}"
7776
-PRBody "${{ coalesce(parameters.PRBody, parameters.CommitMsg, parameters.PRTitle) }}"
7877
-PRLabels "${{ parameters.PRLabels}}"
79-
-UserReviewers "$(${{ parameters.GHReviewersVariable }})"
80-
-TeamReviewers "$(${{ parameters.GHTeamReviewersVariable }})"
81-
-Assignees "$(${{ parameters.GHAssignessVariable }})"
78+
79+
- task: PowerShell@2
80+
displayName: Tag a Reviewer on PR
81+
condition: and(succeeded(), eq(variables['HasChanges'], 'true'))
82+
continueOnError: true
83+
inputs:
84+
pwsh: true
85+
workingDirectory: ${{ parameters.WorkingDirectory }}
86+
filePath: ${{ parameters.ScriptDirectory }}/add-pullrequest-reviewers.ps1
87+
arguments: >
88+
-RepoOwner "${{ parameters.RepoOwner }}"
89+
-RepoName "$(RepoNameWithoutOwner)"
90+
-AuthToken "$(azuresdk-github-pat)"
91+
-GitHubUsers "$(${{ parameters.GHReviewersVariable }})"
92+
-GitHubTeams "$(${{ parameters.GHTeamReviewersVariable }})"
93+
-PRNumber "$(Submitted.PullRequest.Number)"

eng/common/scripts/Submit-PullRequest.ps1

+32-63
Original file line numberDiff line numberDiff line change
@@ -49,63 +49,39 @@ param(
4949
[string]$PRBody = $PRTitle,
5050

5151
[Parameter(Mandatory = $false)]
52-
[string]$PRLabels,
53-
54-
[Parameter(Mandatory = $false)]
55-
[string]$UserReviewers,
56-
57-
[Parameter(Mandatory = $false)]
58-
[string]$TeamReviewers,
59-
60-
[Parameter(Mandatory = $false)]
61-
[string]$Assignees
52+
[string]$PRLabels
6253
)
6354

6455
$headers = @{
6556
Authorization = "bearer $AuthToken"
6657
}
67-
$baseURI = "https://api.github.com/repos"
68-
function SplitMembers ($membersString)
69-
{
70-
return @($membersString.Split(",") | % { $_.Trim() } | ? { return $_ })
71-
}
7258

73-
function InvokeGitHubAPI($apiURI, $method, $body) {
74-
$resp = Invoke-RestMethod -Method $method -Headers $headers -Body ($body | ConvertTo-Json) -Uri $apiURI -MaximumRetryCount 3
75-
Write-Host -f green "These members have been added to: https://github.com/$RepoOwner/$RepoName/pull/$prNumber"
76-
($body | Format-List | Write-Output)
77-
$resp | Write-Verbose
78-
}
59+
$query = "state=open&head=${PROwner}:${PRBranch}&base=${BaseBranch}"
7960

80-
function AddReviewers ($prNumber, $users, $teams) {
81-
$uri = "$baseURI/$RepoOwner/$RepoName/pulls/$prNumber/requested_reviewers"
82-
$userAdditions = SplitMembers -membersString $users
83-
$teamAdditions = SplitMembers -membersString $teams
84-
$postResp = @{}
85-
if ($userAdditions) {
86-
$postResp["reviewers"] = @($userAdditions)
87-
}
88-
if ($teamAdditions) {
89-
$postResp["team_reviewers"] = @($teamAdditions)
61+
function AddLabels([int] $prNumber, [string] $prLabelString)
62+
{
63+
# Adding labels to the pr.
64+
if (-not $prLabelString) {
65+
Write-Verbose "There are no labels added to the PR."
66+
return
9067
}
91-
return InvokeGitHubAPI -apiURI $uri -method 'Post' -body $postResp
92-
}
9368

94-
function AddLabelsAndOrAssignees ($prNumber, $labels, $assignees) {
95-
$uri = "$baseURI/$RepoOwner/$RepoName/issues/$prNumber"
96-
$labelAdditions = SplitMembers -membersString $labels
97-
$assigneeAdditions = SplitMembers -membersString $assignees
98-
$postResp = @{}
99-
if ($assigneeAdditions) {
100-
$postResp["assignees"] = @($assigneeAdditions)
69+
# Parse the labels from string to array
70+
$prLabelArray = @($prLabelString.Split(",") | % { $_.Trim() } | ? { return $_ })
71+
$prLabelUri = "https://api.github.com/repos/$RepoOwner/$RepoName/issues/$prNumber"
72+
$labelRequestData = @{
73+
labels = $prLabelArray
10174
}
102-
if ($labelAdditions) {
103-
$postResp["labels"] = @($labelAdditions)
75+
try {
76+
$resp = Invoke-RestMethod -Method PATCH -Headers $headers $prLabelUri -Body ($labelRequestData | ConvertTo-Json)
77+
}
78+
catch {
79+
Write-Error "Invoke-RestMethod $prLabelUri failed with exception:`n$_"
10480
}
105-
return InvokeGitHubAPI -apiURI $uri -method 'Post' -body $postResp
106-
}
10781

108-
$query = "state=open&head=${PROwner}:${PRBranch}&base=${BaseBranch}"
82+
$resp | Write-Verbose
83+
Write-Host -f green "Label(s) [$prLabelArray] added to pull request: https://github.com/$RepoOwner/$RepoName/pull/$prNumber"
84+
}
10985

11086
try {
11187
$resp = Invoke-RestMethod -Headers $headers "https://api.github.com/repos/$RepoOwner/$RepoName/pulls?$query"
@@ -117,18 +93,11 @@ catch {
11793
$resp | Write-Verbose
11894

11995
if ($resp.Count -gt 0) {
120-
try {
12196
Write-Host -f green "Pull request already exists $($resp[0].html_url)"
12297

12398
# setting variable to reference the pull request by number
12499
Write-Host "##vso[task.setvariable variable=Submitted.PullRequest.Number]$($resp[0].number)"
125-
AddReviewers -prNumber $resp[0].number -users $UserReviewers -teams $TeamReviewers
126-
AddLabelsAndOrAssignees -prNumber $resp[0].number -labels $PRLabels -assignees $Assignees
127-
}
128-
catch {
129-
Write-Error "Call to GitHub API failed with exception:`n$_"
130-
exit 1
131-
}
100+
AddLabels $resp[0].number $PRLabels
132101
}
133102
else {
134103
$data = @{
@@ -143,17 +112,17 @@ else {
143112
$resp = Invoke-RestMethod -Method POST -Headers $headers `
144113
"https://api.github.com/repos/$RepoOwner/$RepoName/pulls" `
145114
-Body ($data | ConvertTo-Json)
146-
147-
$resp | Write-Verbose
148-
Write-Host -f green "Pull request created https://github.com/$RepoOwner/$RepoName/pull/$($resp.number)"
149-
150-
# setting variable to reference the pull request by number
151-
Write-Host "##vso[task.setvariable variable=Submitted.PullRequest.Number]$($resp.number)"
152-
AddReviewers -prNumber $resp.number -users $UserReviewers -teams $TeamReviewers
153-
AddLabelsAndOrAssignees -prNumber $resp.number -labels $PRLabels -assignees $Assignees
154115
}
155116
catch {
156-
Write-Error "Call to GitHub API failed with exception:`n$_"
117+
Write-Error "Invoke-RestMethod [https://api.github.com/repos/$RepoOwner/$RepoName/pulls] failed with exception:`n$_"
157118
exit 1
158119
}
159-
}
120+
121+
$resp | Write-Verbose
122+
Write-Host -f green "Pull request created https://github.com/$RepoOwner/$RepoName/pull/$($resp.number)"
123+
124+
# setting variable to reference the pull request by number
125+
Write-Host "##vso[task.setvariable variable=Submitted.PullRequest.Number]$($resp.number)"
126+
127+
AddLabels $resp.number $PRLabels
128+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
param(
2+
[Parameter(Mandatory = $true)]
3+
$RepoOwner,
4+
5+
[Parameter(Mandatory = $true)]
6+
$RepoName,
7+
8+
[Parameter(Mandatory = $false)]
9+
$GitHubUsers = "",
10+
11+
[Parameter(Mandatory = $false)]
12+
$GitHubTeams = "",
13+
14+
[Parameter(Mandatory = $true)]
15+
$PRNumber,
16+
17+
[Parameter(Mandatory = $true)]
18+
$AuthToken
19+
)
20+
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+
47+
# at least one of these needs to be populated
48+
if (-not $GitHubUsers -and -not $GitHubTeams) {
49+
Write-Host "No user provided for addition, exiting."
50+
exit 0
51+
}
52+
53+
$userAdditions = @($GitHubUsers.Split(",") | % { $_.Trim() } | ? { return $_ })
54+
$teamAdditions = @($GitHubTeams.Split(",") | % { $_.Trim() } | ? { return $_ })
55+
56+
$errorsOccurredAddingUsers = AddMembers -memberName "reviewers" -additionSet $userAdditions
57+
$errorsOccurredAddingTeams = AddMembers -memberName "team_reviewers" -additionSet $teamAdditions
58+
59+
if ($errorsOccurredAddingUsers -or $errorsOccurredAddingTeams) {
60+
exit 1
61+
}

eng/common/scripts/get-pr-creator.ps1

-37
This file was deleted.

0 commit comments

Comments
 (0)