private/Set-GitHubEnvironmentPolicy.ps1
function Set-GitHubEnvironmentPolicy { [CmdletBinding()] param( [Parameter(Mandatory)][string]$Owner, [Parameter(Mandatory)][string]$Repo, [Parameter(Mandatory)][string]$EnvironmentName, [string[]]$UserReviewers = @(), [string[]]$TeamReviewers = @(), [bool]$AddOwnerAsReviewer = $false ) Write-Bootstraplog "Setting deployment branch policy on environment '$EnvironmentName'..." $userList = $UserReviewers if ($AddOwnerAsReviewer -and $Owner) { if ($userList -notcontains $Owner) { $userList += $Owner } } $reviewerFlags = Get-ReviewerFlags -UserReviewers $userList -TeamReviewers $TeamReviewers -Org $Owner $additionalArgs = $reviewerFlags + @( "-F", "deployment_branch_policy[protected_branches]=true", "-F", "deployment_branch_policy[custom_branch_policies]=false" ) try { Invoke-GitHubApiCommand -Method "PUT" -Endpoint "/repos/$Owner/$Repo/environments/$EnvironmentName" -AdditionalArgs $additionalArgs | Out-Null Write-Bootstraplog "Reviewers set for '$EnvironmentName'." -Level Success } catch { Write-Bootstraplog "Reviewers not set for '$EnvironmentName'." -Level Warning } } function Get-UserId { param( [Parameter(Mandatory)] [string]$UserName ) $user = Invoke-GitHubApiCommand -Method "GET" -Endpoint "/users/$UserName" | ConvertFrom-Json return $user.id } function Get-TeamId { param( [Parameter(Mandatory)] [string]$TeamName, [Parameter(Mandatory)] [string]$Org ) $team = Invoke-GitHubApiCommand -Method "GET" -Endpoint "/orgs/$Org/teams/$TeamName" | ConvertFrom-Json return $team.id } function Get-ReviewerFlags { param( [string[]]$UserReviewers = @(), [string[]]$TeamReviewers = @(), [Parameter(Mandatory)] [string]$Org ) $flags = @() foreach ($user in $UserReviewers) { $id = Get-UserId -UserName $user $flags += "-F" $flags += "reviewers[][type]=User" $flags += "-F" $flags += "reviewers[][id]=$id" } foreach ($team in $TeamReviewers) { $id = Get-TeamId -TeamName $team -Org $Org $flags += "-F" $flags += "reviewers[][type]=Team" $flags += "-F" $flags += "reviewers[][id]=$id" } return $flags } |