-
Notifications
You must be signed in to change notification settings - Fork 227
Assign sync prs #1043
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Assign sync prs #1043
Changes from all commits
2745a39
4d829e3
4f85608
d748305
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -49,40 +49,79 @@ param( | |
| [string]$PRBody = $PRTitle, | ||
|
|
||
| [Parameter(Mandatory = $false)] | ||
| [string]$PRLabels | ||
| [string]$PRLabels, | ||
|
|
||
| [Parameter(Mandatory = $false)] | ||
| [string]$UserReviewers, | ||
|
|
||
| [Parameter(Mandatory = $false)] | ||
| [string]$TeamReviewers, | ||
|
|
||
| [Parameter(Mandatory = $false)] | ||
| [string]$Assignees | ||
| ) | ||
|
|
||
| . "${PSScriptRoot}\logging.ps1" | ||
|
|
||
| $headers = @{ | ||
| Authorization = "bearer $AuthToken" | ||
| } | ||
| $baseURI = "https://api.github.com/repos" | ||
| function SplitMembers ($membersString) | ||
| { | ||
| if (!$membersString) { return $null } | ||
| return @($membersString.Split(",") | % { $_.Trim() } | ? { return $_ }) | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'd suggest adding a check for empty like: That prevents any cases were we have an empty/null value and turn it into and empty array. |
||
| } | ||
|
|
||
| $query = "state=open&head=${PROwner}:${PRBranch}&base=${BaseBranch}" | ||
| function InvokeGitHubAPI($apiURI, $method, $body) { | ||
| $resp = Invoke-RestMethod -Method $method -Headers $headers -Body ($body | ConvertTo-Json) -Uri $apiURI -MaximumRetryCount 3 | ||
| LogDebug "These members have been added to: https://github.com/$RepoOwner/$RepoName/pull/$prNumber" | ||
| ($body | Format-List | Write-Output) | ||
| $resp | Write-Verbose | ||
| } | ||
|
|
||
| function AddLabels([int] $prNumber, [string] $prLabelString) | ||
| { | ||
| # Adding labels to the pr. | ||
| if (-not $prLabelString) { | ||
| Write-Verbose "There are no labels added to the PR." | ||
| return | ||
| function AddReviewers ($prNumber, $users, $teams) { | ||
| if (!$users -and !$teams) | ||
| { | ||
| exit 0 | ||
| } | ||
|
|
||
| # Parse the labels from string to array | ||
| $prLabelArray = @($prLabelString.Split(",") | % { $_.Trim() } | ? { return $_ }) | ||
| $prLabelUri = "https://api.github.com/repos/$RepoOwner/$RepoName/issues/$prNumber" | ||
| $labelRequestData = @{ | ||
| labels = $prLabelArray | ||
| else { | ||
| $uri = "$baseURI/$RepoOwner/$RepoName/pulls/$prNumber/requested_reviewers" | ||
| $userAdditions = SplitMembers -membersString $users | ||
| $teamAdditions = SplitMembers -membersString $teams | ||
| $postResp = @{} | ||
| if ($userAdditions) { | ||
| $postResp["reviewers"] = @($userAdditions) | ||
| } | ||
| if ($teamAdditions) { | ||
| $postResp["team_reviewers"] = @($teamAdditions) | ||
| } | ||
| return InvokeGitHubAPI -apiURI $uri -method 'Post' -body $postResp | ||
| } | ||
| try { | ||
| $resp = Invoke-RestMethod -Method PATCH -Headers $headers $prLabelUri -Body ($labelRequestData | ConvertTo-Json) | ||
| } | ||
|
|
||
| function AddLabelsAndOrAssignees ($prNumber, $labels, $assignees) { | ||
| if (!$labels -and !$assignees) | ||
| { | ||
| exit 0 | ||
| } | ||
| catch { | ||
| Write-Error "Invoke-RestMethod $prLabelUri failed with exception:`n$_" | ||
| else { | ||
| $uri = "$baseURI/$RepoOwner/$RepoName/issues/$prNumber" | ||
| $labelAdditions = SplitMembers -membersString $labels | ||
| $assigneeAdditions = SplitMembers -membersString $assignees | ||
| $postResp = @{} | ||
| if ($assigneeAdditions) { | ||
| $postResp["assignees"] = @($assigneeAdditions) | ||
| } | ||
| if ($labelAdditions) { | ||
| $postResp["labels"] = @($labelAdditions) | ||
| } | ||
| return InvokeGitHubAPI -apiURI $uri -method 'Post' -body $postResp | ||
| } | ||
|
|
||
| $resp | Write-Verbose | ||
| Write-Host -f green "Label(s) [$prLabelArray] added to pull request: https://github.com/$RepoOwner/$RepoName/pull/$prNumber" | ||
| } | ||
|
|
||
| $query = "state=open&head=${PROwner}:${PRBranch}&base=${BaseBranch}" | ||
|
|
||
| try { | ||
| $resp = Invoke-RestMethod -Headers $headers "https://api.github.com/repos/$RepoOwner/$RepoName/pulls?$query" | ||
| } | ||
|
|
@@ -93,11 +132,18 @@ catch { | |
| $resp | Write-Verbose | ||
|
|
||
| if ($resp.Count -gt 0) { | ||
| Write-Host -f green "Pull request already exists $($resp[0].html_url)" | ||
| try { | ||
| LogDebug "Pull request already exists $($resp[0].html_url)" | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. We should keep this a normal log message otherwise it will not show up in Devops logging unless you set System.Debug = true
Member
Author
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. |
||
|
|
||
| # setting variable to reference the pull request by number | ||
| Write-Host "##vso[task.setvariable variable=Submitted.PullRequest.Number]$($resp[0].number)" | ||
| AddLabels $resp[0].number $PRLabels | ||
| AddReviewers -prNumber $resp[0].number -users $UserReviewers -teams $TeamReviewers | ||
| AddLabelsAndOrAssignees -prNumber $resp[0].number -labels $PRLabels -assignees $Assignees | ||
| } | ||
| catch { | ||
| LogError "Call to GitHub API failed with exception:`n$_" | ||
| exit 1 | ||
| } | ||
| } | ||
| else { | ||
| $data = @{ | ||
|
|
@@ -112,17 +158,17 @@ else { | |
| $resp = Invoke-RestMethod -Method POST -Headers $headers ` | ||
| "https://api.github.com/repos/$RepoOwner/$RepoName/pulls" ` | ||
| -Body ($data | ConvertTo-Json) | ||
|
|
||
| $resp | Write-Verbose | ||
| LogDebug "Pull request created https://github.com/$RepoOwner/$RepoName/pull/$($resp.number)" | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Lets keep this a normal log |
||
|
|
||
| # setting variable to reference the pull request by number | ||
| Write-Host "##vso[task.setvariable variable=Submitted.PullRequest.Number]$($resp.number)" | ||
| AddReviewers -prNumber $resp.number -users $UserReviewers -teams $TeamReviewers | ||
| AddLabelsAndOrAssignees -prNumber $resp.number -labels $PRLabels -assignees $Assignees | ||
| } | ||
| catch { | ||
| Write-Error "Invoke-RestMethod [https://api.github.com/repos/$RepoOwner/$RepoName/pulls] failed with exception:`n$_" | ||
| LogError "Call to GitHub API failed with exception:`n$_" | ||
| exit 1 | ||
| } | ||
|
|
||
| $resp | Write-Verbose | ||
| Write-Host -f green "Pull request created https://github.com/$RepoOwner/$RepoName/pull/$($resp.number)" | ||
|
|
||
| # setting variable to reference the pull request by number | ||
| Write-Host "##vso[task.setvariable variable=Submitted.PullRequest.Number]$($resp.number)" | ||
|
|
||
| AddLabels $resp.number $PRLabels | ||
| } | ||
| } | ||
This file was deleted.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,37 @@ | ||
| param ( | ||
| [Parameter(Mandatory = $true)] | ||
| [string]$RepoOwner, | ||
|
|
||
| [Parameter(Mandatory = $true)] | ||
| [string]$RepoName, | ||
|
|
||
| [Parameter(Mandatory = $true)] | ||
| $PullRequestNumber, | ||
|
|
||
| [Parameter(Mandatory = $true)] | ||
| $VsoPRCreatorVariable, | ||
|
|
||
| [Parameter(Mandatory = $false)] | ||
| $AuthToken | ||
| ) | ||
|
|
||
| $headers = @{ } | ||
|
|
||
| if ($AuthToken) { | ||
| $headers = @{ | ||
| Authorization = "bearer $AuthToken" | ||
| } | ||
| } | ||
|
|
||
| try | ||
| { | ||
| $prApiUrl = "https://api.github.com/repos/$RepoOwner/$RepoName/pulls/${PullRequestNumber}" | ||
| $response = Invoke-RestMethod -Headers $headers $prApiUrl | ||
| Write-Host "##vso[task.setvariable variable=$VsoPRCreatorVariable;]$($response.user.login)" | ||
| } | ||
| catch | ||
| { | ||
| Write-Error "Invoke-RestMethod ${prApiUrl} failed with exception:`n$_" | ||
| exit 1 | ||
| } | ||
|
|
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -31,10 +31,10 @@ function LogDebug | |
| { | ||
| if ($isDevOpsRun) | ||
| { | ||
| Write-Host "##vso[task.LogIssue type=debug;]$args" | ||
| Write-Host "[debug]$args" | ||
|
Member
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Oh on my other comments I assume this was still debug logging. I think I would keep this as is so we have support for that debug logging. Perhaps we need a LogInfo or something similar that will just do a Write-Host. |
||
| } | ||
| else | ||
| { | ||
| Write-Debug "$args" | ||
| Write-Debug "$args" -Debug | ||
| } | ||
| } | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Why not import common.ps1?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
So far we only need the logging logic here, so I did not feel the need to import common.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
OK. I'm fine with this for now but at some point we might want to consider always importing common.ps1 just to avoid any differences for scripts we use in our eng-system. The only time we should avoid it is if we want to limit our dependencies in a script to use it in other contexts.