#!pwsh #Requires -Version 6.0 <# .SYNOPSIS Sets up the configuration for the vagrant virtual machines. .DESCRIPTION Setup-VagrantMachines.ps1 sets up the virtual machines for vcpkg's macOS CI. It puts the VagrantFile and necessary configuration JSON file into ~/vagrant/vcpkg-eg-mac. .PARAMETER MachineId The number to give the machine; should match [0-9]{2}. .PARAMETER DevopsPat The personal access token which has Read & Manage permissions on the ADO pool. .PARAMETER Date The date on which this pool is being created. Sets the default values for BoxVersion and AgentPool. .PARAMETER BoxVersion The version of the box to use. If -Date is passed, uses that as the version. .PARAMETER AgentPool The agent pool to add the machine to. If -Date is passed, uses "PrOsx-$Date" as the pool. .PARAMETER DevopsUrl The URL of the ADO instance; defaults to vcpkg's, which is https://dev.azure.com/vcpkg. .PARAMETER ArchivesMachine The machine where the archives are located; a URN. .PARAMETER ArchivesPath The path to where the archives are located on the machine. If -Date is passed, uses "/Users/${ArchivesUsername}/share/archives/${Date}". .PARAMETER ArchivesUsername The user to log in to on the archives machine. Defaults to 'fileshare'. .PARAMETER BaseName The base name for the vagrant VM; the machine name is $BaseName-$MachineId. Defaults to 'vcpkg-eg-mac'. .PARAMETER BoxName The name of the box to use. Defaults to 'vcpkg/macos-ci', which is only available internally. .PARAMETER Force Delete any existing vagrant/vcpkg-eg-mac directory. .PARAMETER DiskSize The size to make the temporary disks in gigabytes. Defaults to 350. .INPUTS None .OUTPUTS None #> [CmdletBinding(PositionalBinding=$False, DefaultParameterSetName='DefineDate')] Param( [Parameter(Mandatory=$True)] [String]$MachineId, [Parameter(Mandatory=$True)] [String]$DevopsPat, [Parameter(Mandatory=$True, ParameterSetName='DefineDate')] [String]$Date, [Parameter(Mandatory=$True, ParameterSetName='DefineVersionAndAgentPool')] [String]$BoxVersion, [Parameter(Mandatory=$True, ParameterSetName='DefineVersionAndAgentPool')] [String]$AgentPool, [Parameter(Mandatory=$False)] [String]$DevopsUrl = 'https://dev.azure.com/vcpkg', [Parameter(Mandatory=$True)] [String]$ArchivesMachine, [Parameter(Mandatory=$True, ParameterSetName='DefineVersionAndAgentPool')] [String]$ArchivesPath, [Parameter(Mandatory=$False)] [String]$ArchivesUsername = 'archivesshare', [Parameter()] [String]$BaseName = 'vcpkg-eg-mac', [Parameter()] [String]$BoxName = 'vcpkg/macos-ci', [Parameter()] [Int]$DiskSize = 350, [Parameter()] [Switch]$Force ) Set-StrictMode -Version 2 if (-not $IsMacOS) { throw 'This script should only be run on a macOS host' } if (-not [String]::IsNullOrEmpty($Date)) { $BoxVersion = $Date $AgentPool = "PrOsx-$Date" $ArchivesPath = "/Users/${ArchivesUsername}/share/archives/${Date}" } if (Test-Path '~/vagrant/vcpkg-eg-mac') { if ($Force) { Write-Host 'Deleting existing directories' Remove-Item -Recurse -Force -Path '~/vagrant/vcpkg-eg-mac' | Out-Null } else { throw '~/vagrant/vcpkg-eg-mac already exists; try re-running with -Force' } } Write-Host 'Creating new directories' if (-not (Test-Path -Path '~/vagrant')) { New-Item -ItemType 'Directory' -Path '~/vagrant' | Out-Null } New-Item -ItemType 'Directory' -Path '~/vagrant/vcpkg-eg-mac' | Out-Null Copy-Item ` -Path "$PSScriptRoot/configuration/Vagrantfile" ` -Destination '~/vagrant/vcpkg-eg-mac/Vagrantfile' $configuration = @{ pat = $DevopsPat; agent_pool = $AgentPool; devops_url = $DevopsUrl; machine_name = "${BaseName}-${MachineId}"; box_name = $BoxName; box_version = $BoxVersion; disk_size = $DiskSize; archives = @{ username = $ArchivesUsername; urn = $ArchivesMachine; path = $ArchivesPath; }; } ConvertTo-Json -InputObject $configuration -Depth 5 ` | Set-Content -Path '~/vagrant/vcpkg-eg-mac/vagrant-configuration.json'