From 47a9dec33d917c2567ccdcee3d4ab8cee4407e11 Mon Sep 17 00:00:00 2001 From: Azure SDK Bot <53356347+azure-sdk@users.noreply.github.com> Date: Tue, 13 Oct 2020 19:44:07 -0700 Subject: [PATCH] Sync eng/common directory with azure-sdk-tools for PR 1088 (#12750) Sync eng/common directory with azure-sdk-tools for PR https://github.com/Azure/azure-sdk-tools/pull/1088 See [eng/common workflow](https://github.com/Azure/azure-sdk-tools/blob/master/eng/common/README.md#workflow) --- eng/common/scripts/Delete-RemoteBranches.ps1 | 44 ++++++++++++++ eng/common/scripts/Invoke-GitHubAPI.ps1 | 62 ++++++++++++++++++++ 2 files changed, 106 insertions(+) create mode 100644 eng/common/scripts/Delete-RemoteBranches.ps1 diff --git a/eng/common/scripts/Delete-RemoteBranches.ps1 b/eng/common/scripts/Delete-RemoteBranches.ps1 new file mode 100644 index 000000000000..da55471ef25f --- /dev/null +++ b/eng/common/scripts/Delete-RemoteBranches.ps1 @@ -0,0 +1,44 @@ +param( + $RepoOwner, + $RepoName, + $BranchPrefix, + $AuthToken +) + +. "${PSScriptRoot}\common.ps1" + +LogDebug "Operating on Repo [ $RepoName ]" +try{ + $branches = (List-References -RepoOwner $RepoOwner -RepoName $RepoName -Ref "heads/$BranchPrefix").ref +} +catch { + LogError "List-References failed with exception:`n$_" + exit 1 +} + +foreach ($branch in $branches) +{ + try { + $branchName = $branch.Replace("refs/heads/","") + $head = "${RepoOwner}/${RepoName}:${branchName}" + LogDebug "Operating on branch [ $branchName ]" + $pullRequests = List-PullRequests -RepoOwner $RepoOwner -RepoName $RepoName -head $head + } + catch + { + LogError "List-PullRequests failed with exception:`n$_" + exit 1 + } + + if ($pullRequests.Count -eq 0) + { + LogDebug "Branch [ $branchName ] in repo [ $RepoName ] has no associated Pull Request. Deleting Branch" + try{ + Delete-References -RepoOwner $RepoOwner -RepoName $RepoName -Ref ($branch.Remove(0,5)) -AuthToken $AuthToken + } + catch { + LogError "Delete-References failed with exception:`n$_" + exit 1 + } + } +} \ No newline at end of file diff --git a/eng/common/scripts/Invoke-GitHubAPI.ps1 b/eng/common/scripts/Invoke-GitHubAPI.ps1 index e2836856dc9f..22f370f3202f 100644 --- a/eng/common/scripts/Invoke-GitHubAPI.ps1 +++ b/eng/common/scripts/Invoke-GitHubAPI.ps1 @@ -47,6 +47,24 @@ function Invoke-GitHubAPIPatch { return $resp } +function Invoke-GitHubAPIDelete { + param ( + [Parameter(Mandatory = $true)] + $apiURI, + [Parameter(Mandatory = $true)] + $token + ) + + $resp = Invoke-RestMethod ` + -Method DELETE ` + -Uri $apiURI ` + -Headers (Get-GitHubHeaders -token $token) ` + -MaximumRetryCount 3 + + return $resp +} + + function Invoke-GitHubAPIGet { param ( [Parameter(Mandatory = $true)] @@ -105,6 +123,27 @@ function List-PullRequests { return Invoke-GitHubAPIGet -apiURI $uri } +# +<# +.PARAMETER Ref +Ref to search for +Pass 'heads/ ,tags/, or nothing +#> +function List-References { + param ( + [Parameter(Mandatory = $true)] + $RepoOwner, + [Parameter(Mandatory = $true)] + $RepoName, + $Ref + ) + + $uri = "$GithubAPIBaseURI/$RepoOwner/$RepoName/git/matching-refs/" + if ($Ref) { $uri += "$Ref" } + + return Invoke-GitHubAPIGet -apiURI $uri +} + function Add-IssueComment { param ( [Parameter(Mandatory = $true)] @@ -229,4 +268,27 @@ function Update-Issue { } return Invoke-GitHubAPIPatch -apiURI $uri -body $parameters -token $AuthToken +} + +function Delete-References { + param ( + [Parameter(Mandatory = $true)] + $RepoOwner, + [Parameter(Mandatory = $true)] + $RepoName, + [ValidateNotNullOrEmpty()] + [Parameter(Mandatory = $true)] + $Ref, + [Parameter(Mandatory = $true)] + $AuthToken + ) + + if ($Ref.Trim().Length -eq 0) + { + throw "You must supply a valid 'Ref' Parameter to 'Delete-Reference'." + } + + $uri = "$GithubAPIBaseURI/$RepoOwner/$RepoName/git/refs/$Ref" + + return Invoke-GitHubAPIDelete -apiURI $uri -token $AuthToken } \ No newline at end of file