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-Host "Setting deployment branch policy on environment '$EnvironmentName'..." $reviewerFlags = @() $userList = $UserReviewers if ($AddOwnerAsReviewer -and $Owner) { if ($userList -notcontains $Owner) { $userList += $Owner } } $reviewerFlags = Get-ReviewerFlags -UserReviewers $userList -TeamReviewers $TeamReviewers -Org $Owner $cmd = @( "gh", "api", "-X", "PUT", "/repos/$Owner/$Repo/environments/$EnvironmentName", "-H", "Accept: application/vnd.github+json", "-H", "X-GitHub-Api-Version: 2022-11-28" ) + $reviewerFlags + @( "-F", "deployment_branch_policy[protected_branches]=true", "-F", "deployment_branch_policy[custom_branch_policies]=false" ) Invoke-GitHubCliCommand -Command $cmd | Out-Null Write-Host -NoNewline "`u{2713} " -ForegroundColor Green Write-Host "Reviewers set for '$EnvironmentName'." } function Get-UserId { param( [Parameter(Mandatory)] [string]$UserName ) $user = gh api "/users/$UserName" | ConvertFrom-Json return $user.id } function Get-TeamId { param( [Parameter(Mandatory)] [string]$TeamName, [Parameter(Mandatory)] [string]$Org ) $team = gh api "/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 } |