diff --git a/images.CI/macos/azure-pipelines/image-generation.yml b/images.CI/macos/azure-pipelines/image-generation.yml deleted file mode 100644 index a8a917c64..000000000 --- a/images.CI/macos/azure-pipelines/image-generation.yml +++ /dev/null @@ -1,151 +0,0 @@ -jobs: -- job: Image_generation - displayName: Image Generation (${{ parameters.image_label }}) - timeoutInMinutes: 1200 - pool: - name: Mac-Cloud Image Generation - demands: - - PrimaryRackAgent -equals ${{ parameters.primary_agent }} - variables: - - group: ${{ parameters.variable_group_name }} - - steps: - - pwsh: | - $cleanBuildNumber = "$(Build.BuildNumber)" -replace "(.+_unstable)(\.\d+)", '$1' - $virtualMachineName = "${cleanBuildNumber}.$(System.JobAttempt)" - echo "##vso[task.setvariable variable=VirtualMachineName;]$virtualMachineName" - echo "##vso[build.updatebuildnumber]$virtualMachineName" - displayName: Update BuildNumber - - - checkout: self - clean: true - fetchDepth: 1 - - - task: PowerShell@2 - displayName: 'Validate contributor permissions' - condition: startsWith(variables['Build.SourceBranch'], 'refs/pull/') - inputs: - targetType: 'filePath' - filePath: ./images.CI/macos/validate-contributor.ps1 - pwsh: true - arguments: -RepositoryName "$(Build.Repository.Name)" ` - -AccessToken "$(github-feed-token)" ` - -SourceBranch "$(Build.SourceBranch)" ` - -ContributorAllowList "$(CONTRIBUTOR_ALLOWLIST)" - - - task: PowerShell@2 - displayName: 'Download custom repository' - condition: and(ne(variables['CUSTOM_REPOSITORY_URL'], ''), ne(variables['CUSTOM_REPOSITORY_BRANCH'], '')) - inputs: - targetType: 'filePath' - filePath: ./images.CI/download-repo.ps1 - arguments: -RepoUrl $(CUSTOM_REPOSITORY_URL) ` - -RepoBranch $(CUSTOM_REPOSITORY_BRANCH) - - - task: DeleteFiles@1 - displayName: Clean up self-hosted machine - inputs: - SourceFolder: 'images/macos/provision/log/' - RemoveSourceFolder: true - - - task: PowerShell@2 - displayName: 'Select datastore' - inputs: - targetType: 'filePath' - filePath: ./images.CI/macos/select-datastore.ps1 - arguments: -VMName "$(VirtualMachineName)" ` - -VIServer "$(vcenter-server-v2)" ` - -VIUserName "$(vcenter-username-v2)" ` - -VIPassword '$(vcenter-password-v2)' ` - -Cluster "$(esxi-cluster-v2)" - - - pwsh: | - $SensitiveData = @( - 'IP address:', - 'Using ssh communicator to connect:' - ) - - packer init ${{ parameters.template_path }} - packer build -on-error=abort ` - -var="vcenter_server=$(vcenter-server-v2)" ` - -var="vcenter_username=$(vcenter-username-v2)" ` - -var='vcenter_password=$(vcenter-password-v2)' ` - -var="vcenter_datacenter=$(vcenter-datacenter-v2)" ` - -var="cluster_or_esxi_host=$(esxi-cluster-v2)" ` - -var="esxi_datastore=$(buildDatastore)" ` - -var="output_folder=$(output-folder)" ` - -var="vm_username=$(vm-username)" ` - -var="vm_password=$(vm-password)" ` - -var="github_api_pat=$(github_api_pat)" ` - -var="build_id=$(VirtualMachineName)" ` - -var="baseimage_name=${{ parameters.base_image_name }}" ` - -var="xcode_install_storage_url=$(xcode_install_storage_url)" ` - -var="xcode_install_sas=$(xcode_install_sas)" ` - -color=false ` - ${{ parameters.template_path }} ` - | Where-Object { - #Filter sensitive data from Packer logs - $currentString = $_ - $sensitiveString = $SensitiveData | Where-Object { $currentString -match $_ } - $sensitiveString -eq $null - } - displayName: 'Build VM' - workingDirectory: 'images/macos' - env: - PACKER_LOG: 1 - PACKER_LOG_PATH: $(Agent.TempDirectory)/packer-log.txt - - - bash: | - echo "Copy software report files" - cp -vR "images/image-output/software-report/." "$(Build.ArtifactStagingDirectory)/" - - echo "Put VM name to 'VM_Done_Name' file" - echo "$(VirtualMachineName)" > "$(Build.ArtifactStagingDirectory)/VM_Done_Name" - displayName: Prepare artifact - - - bash: | - cat "$(Build.ArtifactStagingDirectory)/systeminfo.md" - displayName: Print markdown software report - - - bash: | - cat "$(Build.ArtifactStagingDirectory)/systeminfo.json" - displayName: Print json software report - - - task: PublishBuildArtifacts@1 - inputs: - ArtifactName: 'Built_VM_Artifacts' - displayName: Publish Artifacts - - - task: PowerShell@2 - displayName: 'Print provisioners duration' - inputs: - targetType: 'filePath' - filePath: ./images.CI/measure-provisioners-duration.ps1 - arguments: -PackerLogPath "$(Agent.TempDirectory)/packer-log.txt" ` - -PrintTopNLongest 25 - - - task: PowerShell@2 - displayName: 'Move vm to cold storage and clear datastore tag' - condition: always() - inputs: - targetType: 'filePath' - filePath: ./images.CI/macos/move-vm.ps1 - arguments: -VMName "$(VirtualMachineName)" ` - -TargetDataStore "${{ parameters.target_datastore }}" ` - -VIServer "$(vcenter-server-v2)" ` - -VIUserName "$(vcenter-username-v2)" ` - -VIPassword '$(vcenter-password-v2)' ` - -CpuCount "$(cpu-count)" ` - -CoresPerSocketCount "$(cores-per-socket-count)" ` - -Memory "$(memory)" - - - task: PowerShell@2 - displayName: 'Destroy VM (if build canceled only)' - condition: eq(variables['Agent.JobStatus'], 'Canceled') - inputs: - targetType: 'filePath' - filePath: ./images.CI/macos/destroy-vm.ps1 - arguments: -VMName "$(VirtualMachineName)" ` - -VIServer "$(vcenter-server-v2)" ` - -VIUserName "$(vcenter-username-v2)" ` - -VIPassword '$(vcenter-password-v2)' diff --git a/images.CI/macos/azure-pipelines/macos11.yml b/images.CI/macos/azure-pipelines/macos11.yml deleted file mode 100644 index 7f659c75f..000000000 --- a/images.CI/macos/azure-pipelines/macos11.yml +++ /dev/null @@ -1,28 +0,0 @@ -name: macOS-11_$(date:yyyyMMdd)$(rev:.r)_unstable -schedules: -- cron: '45 0 * * *' - displayName: Daily - branches: - include: - - main - always: true - -trigger: none -pr: - autoCancel: true - branches: - include: - - main - -variables: -- group: Mac-Cloud Image Generation - -jobs: -- template: image-generation.yml - parameters: - image_label: 'macOS Big Sur' - base_image_name: 'clean-macOS-11-380Gb-runner' - template_path: 'templates/macOS-11.pkr.hcl' - target_datastore: 'ds-image' - variable_group_name: 'Mac-Cloud Image Generation' - primary_agent: 'true' diff --git a/images.CI/macos/azure-pipelines/macos12.yml b/images.CI/macos/azure-pipelines/macos12.yml deleted file mode 100644 index e3652d8d4..000000000 --- a/images.CI/macos/azure-pipelines/macos12.yml +++ /dev/null @@ -1,28 +0,0 @@ -name: macOS-12_$(date:yyyyMMdd)$(rev:.r)_unstable -schedules: -- cron: "0 0 * * *" - displayName: Daily - branches: - include: - - main - always: true - -trigger: none -pr: - autoCancel: true - branches: - include: - - main - -variables: -- group: Mac-Cloud Image Generation - -jobs: -- template: image-generation.yml - parameters: - image_label: 'macOS Monterey' - base_image_name: 'clean-macOS-12-380Gb-runner' - template_path: 'templates/macOS-12.pkr.hcl' - target_datastore: 'ds-image' - variable_group_name: 'Mac-Cloud Image Generation' - primary_agent: 'true' diff --git a/images.CI/macos/azure-pipelines/secondary-macos11.yml b/images.CI/macos/azure-pipelines/secondary-macos11.yml deleted file mode 100644 index 5e86fa88a..000000000 --- a/images.CI/macos/azure-pipelines/secondary-macos11.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: macOS-11_$(date:yyyyMMdd)$(rev:.r)_unstable -schedules: -- cron: '45 0 * * 1' - displayName: Weekly - branches: - include: - - main - always: true - -trigger: none - -variables: -- group: Mac-Cloud Image Generation - -jobs: -- template: image-generation.yml - parameters: - image_label: 'macOS Big Sur' - base_image_name: 'clean-macOS-11-380Gb-runner' - template_path: 'templates/macOS-11.pkr.hcl' - target_datastore: 'ds-image' - variable_group_name: 'Mac-Cloud Secondary Image Generation' - primary_agent: 'false' diff --git a/images.CI/macos/azure-pipelines/secondary-macos12.yml b/images.CI/macos/azure-pipelines/secondary-macos12.yml deleted file mode 100644 index a43c2c0ea..000000000 --- a/images.CI/macos/azure-pipelines/secondary-macos12.yml +++ /dev/null @@ -1,23 +0,0 @@ -name: macOS-12_$(date:yyyyMMdd)$(rev:.r)_unstable -schedules: -- cron: '45 1 * * 1' - displayName: Weekly - branches: - include: - - main - always: true - -trigger: none - -variables: -- group: Mac-Cloud Image Generation - -jobs: -- template: image-generation.yml - parameters: - image_label: 'macOS Monterey' - base_image_name: 'clean-macOS-12-380Gb-runner' - template_path: 'templates/macOS-12.pkr.hcl' - target_datastore: 'ds-image' - variable_group_name: 'Mac-Cloud Secondary Image Generation' - primary_agent: 'false' diff --git a/images.CI/macos/destroy-vm.ps1 b/images.CI/macos/destroy-vm.ps1 deleted file mode 100644 index 774fa1115..000000000 --- a/images.CI/macos/destroy-vm.ps1 +++ /dev/null @@ -1,95 +0,0 @@ -<# -.SYNOPSIS - -This script deletes vm from vCenter - -.PARAMETER VMName -VM name to delete (Example "macOS-10.15_20201012.4") - -.PARAMETER VIServer -vCenter address (Example "10.0.1.16") - -.PARAMETER VIUserName -vCenter username (Example "Administrator") - -.PARAMETER VIPassword -vCenter password (Example "12345678") -#> - -[CmdletBinding()] -param( - [Parameter(Mandatory)] - [ValidateNotNullOrEmpty()] - [string]$VMName, - - [Parameter(Mandatory)] - [ValidateNotNullOrEmpty()] - [string]$VIServer, - - [Parameter(Mandatory)] - [ValidateNotNullOrEmpty()] - [string]$VIUserName, - - [Parameter(Mandatory)] - [ValidateNotNullOrEmpty()] - [string]$VIPassword -) - -# Import helpers module -Import-Module $PSScriptRoot\helpers.psm1 -DisableNameChecking - -# Connection to a vCenter Server system -Connect-VCServer -VIServer $VIServer -VIUserName $VIUserName -VIPassword $VIPassword - -# Check vm clone status -$chainId = (Get-VIEvent -Entity $VMName).ChainId -if ($chainId) -{ - $task = Get-Task -Status Running | Where-Object { ($_.Name -eq 'CloneVM_Task') -and ($_.ExtensionData.Info.EventChainId -in $chainId) } - if ($task) - { - try - { - Stop-Task -Task $task -Confirm:$false -ErrorAction Stop - Write-Host "The vm '$VMName' clone task has been canceled" - } - catch - { - Write-Host "##vso[task.LogIssue type=error;]Failed to cancel the task" - } - } -} - -# Remove a vm -$vm = Get-VM -Name $VMName -ErrorAction SilentlyContinue - -if ($vm) -{ - $vmState = $vm.PowerState - if ($vmState -ne "PoweredOff") - { - try - { - $null = Stop-VM -VM $vm -Confirm:$false -ErrorAction Stop - Write-Host "The vm '$VMName' has been powered off" - } - catch - { - Write-Host "##vso[task.LogIssue type=error;]Failed to shutdown '$VMName'" - } - } - - try - { - Remove-VM -VM $vm -DeletePermanently -Confirm:$false -ErrorAction Stop - Write-Host "The vm '$VMName' has been removed" - } - catch - { - Write-Host "##vso[task.LogIssue type=error;]Failed to remove '$VMName'" - } -} -else -{ - Write-Host "VM '$VMName' not found" -} \ No newline at end of file diff --git a/images.CI/macos/helpers.psm1 b/images.CI/macos/helpers.psm1 deleted file mode 100644 index ddb09cd62..000000000 --- a/images.CI/macos/helpers.psm1 +++ /dev/null @@ -1,38 +0,0 @@ -<# -.SYNOPSIS - -Helper functions to use in images.CI scripts -#> - -Function Connect-VCServer -{ - [CmdletBinding()] - param( - [Parameter(Mandatory)] - [System.String]$VIUserName, - - [Parameter(Mandatory)] - [System.String]$VIPassword, - - [Parameter(Mandatory)] - [System.String]$VIServer - ) - - try - { - # Preference - $global:ProgressPreference = 'SilentlyContinue' - $global:WarningPreference = 'SilentlyContinue' - # Ignore SSL - $null = Set-PowerCLIConfiguration -Scope Session -InvalidCertificateAction Ignore -ParticipateInCEIP $false -Confirm:$false -WebOperationTimeoutSeconds 600 - $securePassword = ConvertTo-SecureString -String $VIPassword -AsPlainText -Force - $cred = New-Object System.Management.Automation.PSCredential($VIUserName, $securePassword) - $null = Connect-VIServer -Server $VIServer -Credential $cred -ErrorAction Stop - Write-Host "Connection to the vSphere server has been established" - } - catch - { - Write-Host "##vso[task.LogIssue type=error;]Failed to connect to the vSphere server" - exit 1 - } -} \ No newline at end of file diff --git a/images.CI/macos/move-vm.ps1 b/images.CI/macos/move-vm.ps1 deleted file mode 100644 index d3589299a..000000000 --- a/images.CI/macos/move-vm.ps1 +++ /dev/null @@ -1,86 +0,0 @@ -<# -.SYNOPSIS - -This script migrates given VM to another datastore - -.PARAMETER VMName -VM name to migrate (Example "macOS-10.15_20201012.4") - -.PARAMETER TargetDataStore -Target datastore (Example "ds-image") - -.PARAMETER VIServer -vCenter address (Example "10.0.1.16") - -.PARAMETER VIUserName -vCenter username (Example "Administrator") - -.PARAMETER VIPassword -vCenter password (Example "12345678") -#> - -[CmdletBinding()] -param( - [Parameter(Mandatory)] - [ValidateNotNullOrEmpty()] - [string]$VMName, - - [Parameter(Mandatory)] - [ValidateNotNullOrEmpty()] - [string]$TargetDataStore, - - [Parameter(Mandatory)] - [ValidateNotNullOrEmpty()] - [string]$VIServer, - - [Parameter(Mandatory)] - [ValidateNotNullOrEmpty()] - [string]$VIUserName, - - [Parameter(Mandatory)] - [ValidateNotNullOrEmpty()] - [string]$VIPassword, - - [string]$JobStatus, - - [int32]$CpuCount, - - [int32]$CoresPerSocketCount, - - [int64]$Memory -) - -# Import helpers module -Import-Module $PSScriptRoot\helpers.psm1 -DisableNameChecking - -# Connection to a vCenter Server system -Connect-VCServer -VIServer $VIServer -VIUserName $VIUserName -VIPassword $VIPassword - -# Clear previously assigned tag with VM Name -try { - Remove-Tag $VMName -Confirm:$false -} catch { - Write-Host "Tag with $VMName doesn't exist" -} - -$vm = Get-VM $VMName -if (($env:AGENT_JOBSTATUS -and $env:AGENT_JOBSTATUS -eq 'Failed') -or ($JobStatus -and $JobStatus -eq 'failure')) { - try { - if ($vm.PowerState -ne "PoweredOff") { - Stop-VM -VM $vm -Confirm:$false -ErrorAction Stop | Out-Null - } - Set-VM -VM $vm -Name "${VMName}_failed" -Confirm:$false -ErrorAction Stop | Out-Null - Write-Host "VM has been successfully powered off and renamed to [${VMName}_failed]" - } catch { - Write-Host "##vso[task.LogIssue type=error;]Failed to power off and rename VM '$VMName'" - exit 1 - } -} - -try { - Move-VM -Vm $vm -Datastore $TargetDataStore -ErrorAction Stop | Out-Null - Write-Host "VM has been moved successfully to target datastore '$TargetDataStore'" -} catch { - Write-Host "##vso[task.LogIssue type=error;]Failed to move VM '$VMName' to target datastore '$TargetDataStore'" - exit 1 -} diff --git a/images.CI/macos/select-datastore.ps1 b/images.CI/macos/select-datastore.ps1 deleted file mode 100644 index feec67bc9..000000000 --- a/images.CI/macos/select-datastore.ps1 +++ /dev/null @@ -1,117 +0,0 @@ -<# -.SYNOPSIS - -This script selects local datastore based on the following rules: - -- Name starts with ds-local-Datastore -- Datastore FreespaceGB > 400 Gb -- VM count on the datastore < 2 - -.PARAMETER VIServer -vCenter address (Example "10.0.1.16") - -.PARAMETER VIUserName -vCenter username (Example "Administrator") - -.PARAMETER VIPassword -vCenter password (Example "12345678") -#> - - -[CmdletBinding()] -param( - [Parameter(Mandatory)] - [ValidateNotNullOrEmpty()] - [string]$VMName, - - [Parameter(Mandatory)] - [ValidateNotNullOrEmpty()] - [string]$VIServer, - - [Parameter(Mandatory)] - [ValidateNotNullOrEmpty()] - [string]$VIUserName, - - [Parameter(Mandatory)] - [ValidateNotNullOrEmpty()] - [string]$VIPassword, - - [Parameter(Mandatory)] - [ValidateNotNullOrEmpty()] - [string]$Cluster, - - [string]$TagCategory = "Busy" -) - -# Import helpers module -Import-Module $PSScriptRoot\helpers.psm1 -DisableNameChecking - -function Select-DataStore { - param ( - [string]$VMName, - [string]$TagCategory, - [string]$TemplateDatastore = "ds-local-Datastore-*", - [string]$Cluster, - [int]$ThresholdInGb = 400, - [int]$VMCount = 2, - [int]$Retries = 5 - ) - - # 1. Name starts with ds-local-Datastore - # 2. FreespaceGB > 400 Gb - # 3. Choose a datastore with the minimal VM count < 2 - - Write-Host "Start Datastore selection process..." - $clusterHosts = Get-Cluster -Name $Cluster | Get-VMHost - $availableClusterDatastores = $clusterHosts | Get-Datastore -Name $TemplateDatastore | Where-Object -Property State -eq "Available" - $availableDatastores = $availableClusterDatastores ` - | Where-Object { $_.FreeSpaceGB -ge $thresholdInGb } ` - | Where-Object { - $vmOnDatastore = @((Get-ChildItem -Path $_.DatastoreBrowserPath).Name -notmatch '(^\.|vmkdump)').Count - $vmOnDatastore -lt $vmCount } ` - | Group-Object -Property { $vmOnDatastore } - - $datastore = $availableDatastores | Select-Object @{n="VmCount";e={$_.Name}},@{n="DatastoreName";e={$_.Group | Get-Random}} -First 1 - $buildDatastore = $datastore.DatastoreName - - $tag = Get-Tag -Category $TagCategory -Name $VMName -ErrorAction Ignore - if (-not $tag) - { - $tag = New-Tag -Name $VMName -Category $TagCategory - } - - New-TagAssignment -Tag $tag -Entity $buildDatastore | Out-Null - - # Wait for 60 seconds to check if any other tags are assigned to the same datastore - Start-Sleep -Seconds 60 - # If there are no datastores with 0 VMs, take a datastore with 1 VM (index 1 if datastore has 0 VMs and 2 if 1 VM) - $index = 1 + [int]$datastore.VmCount - $tagAssignments = (Get-TagAssignment -Entity $buildDatastore).Tag.Name | Select-Object -First $index - $isAllow = $tagAssignments -contains $VMName - - if ($isAllow) - { - Write-Host "Datastore selected successfully" - Write-Host "##vso[task.setvariable variable=buildDatastore;issecret=true]$buildDatastore" - return - } - - # Remove the tag if datastore wasn't selected - Remove-Tag $tag -Confirm:$false - - $retries-- - if ($retries -le 0) - { - Write-Host "##vso[task.LogIssue type=error;]No datastores found for the condition" - exit 1 - } - - Write-Host "Datastore select failed, $retries left" - Select-DataStore -VMName $VMName -Cluster $Cluster -TagCategory $TagCategory -Retries $retries -} - -# Connection to a vCenter Server system -Connect-VCServer -VIServer $VIServer -VIUserName $VIUserName -VIPassword $VIPassword - -# Get a target datastore for current deployment -Select-DataStore -VMName $VMName -Cluster $Cluster -TagCategory $TagCategory diff --git a/images.CI/macos/set-vm-size.ps1 b/images.CI/macos/set-vm-size.ps1 deleted file mode 100644 index 68e63363c..000000000 --- a/images.CI/macos/set-vm-size.ps1 +++ /dev/null @@ -1,73 +0,0 @@ -<# -.SYNOPSIS - -This script sets resources for VM - -.PARAMETER VMName -VM name to resize (Example "macOS-10.15_20201012.4") - -.PARAMETER VIServer -vCenter address (Example "10.0.1.16") - -.PARAMETER VIUserName -vCenter username (Example "Administrator") - -.PARAMETER VIPassword -vCenter password (Example "12345678") - -.PARAMETER CpuCount -Target number of CPUs (Example "3") - -.PARAMETER CoresPerSocketCount -Target number of cores per socket (Example "3") - -.PARAMETER Memory -Target amount of memory in MB (Example "14336") - -#> - -[CmdletBinding()] -param( - [Parameter(Mandatory)] - [ValidateNotNullOrEmpty()] - [string]$VMName, - - [Parameter(Mandatory)] - [ValidateNotNullOrEmpty()] - [string]$VIServer, - - [Parameter(Mandatory)] - [ValidateNotNullOrEmpty()] - [string]$VIUserName, - - [Parameter(Mandatory)] - [ValidateNotNullOrEmpty()] - [string]$VIPassword, - - [Parameter(Mandatory)] - [ValidateNotNullOrEmpty()] - [int32]$CpuCount, - - [Parameter(Mandatory)] - [ValidateNotNullOrEmpty()] - [int32]$CoresPerSocketCount, - - [Parameter(Mandatory)] - [ValidateNotNullOrEmpty()] - [int64]$Memory -) - -# Import helpers module -Import-Module $PSScriptRoot\helpers.psm1 -DisableNameChecking - -# Connection to a vCenter Server system -Connect-VCServer -VIServer $VIServer -VIUserName $VIUserName -VIPassword $VIPassword - -$vm = Get-VM $VMName -try { - Write-Host "Change CPU count to $CpuCount, cores count to $CoresPerSocketCount, amount of RAM to $Memory" - $vm | Set-VM -NumCPU $CpuCount -CoresPerSocket $CoresPerSocketCount -MemoryMB $Memory -Confirm:$false -ErrorAction Stop | Out-Null -} catch { - Write-Host "##vso[task.LogIssue type=error;]Failed to change specs for VM '$VMName'" - exit 1 -} diff --git a/images.CI/macos/validate-contributor.ps1 b/images.CI/macos/validate-contributor.ps1 deleted file mode 100644 index 312a9ef7e..000000000 --- a/images.CI/macos/validate-contributor.ps1 +++ /dev/null @@ -1,63 +0,0 @@ -param( - [Parameter(Mandatory)] [string] $RepositoryName, - [Parameter(Mandatory)] [string] $AccessToken, - [Parameter(Mandatory)] [string] $SourceBranch, - [Parameter(Mandatory)] [string] $ContributorAllowList -) - -function Build-AuthHeader { - param( - [Parameter(Mandatory)] [string] $AccessToken - ) - - $base64AuthInfo = [Convert]::ToBase64String([Text.Encoding]::ASCII.GetBytes("'':${AccessToken}")) - return "Basic ${base64AuthInfo}" -} - -function Get-PullRequest { - param( - [Parameter(Mandatory)] [string] $RepositoryName, - [Parameter(Mandatory)] [string] $AccessToken, - [Parameter(Mandatory)] [UInt32] $PullRequestNumber - ) - - $requestUrl = "https://api.github.com/repos/$RepositoryName/pulls/$PullRequestNumber" - $authHeader = Build-AuthHeader -AccessToken $AccessToken - - $params = @{ - Method = "GET" - ContentType = "application/json" - Uri = $requestUrl - Headers = @{ Authorization = $authHeader } - } - - return Invoke-RestMethod @params -} - -function Validate-ContributorPermissions { - param( - [Parameter(Mandatory)] [string] $ContributorAllowList, - [Parameter(Mandatory)] [string] $ContributorName - ) - - $allowedContributors = $ContributorAllowList.Split(",").Trim() - $validСontributor = $allowedContributors | Where-Object { $_ -eq $ContributorName } ` - | Select-Object -First 1 - - if (-not $validСontributor) { - Write-Host "Failed to start this build. '$ContributorName' is an unknown contributor" - Write-Host "Please add '$ContributorName' to the allowed list to run builds" - exit 1 - } -} - -$pullRequestNumber = $SourceBranch.Split("/")[2] - -$pullRequestInfo = Get-PullRequest -RepositoryName $RepositoryName ` - -AccessToken $AccessToken ` - -PullRequestNumber $pullRequestNumber - -$contributorName = $pullRequestInfo.user.login - -Validate-ContributorPermissions -ContributorAllowList $ContributorAllowList ` - -ContributorName $contributorName \ No newline at end of file