126 lines
3.5 KiB
PowerShell
Executable file
126 lines
3.5 KiB
PowerShell
Executable file
#!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}.
|
|
Defaults to the numbers at the end of the machine name,
|
|
assuming that that machine name matches `VCPKGMM-[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 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.
|
|
|
|
.INPUTS
|
|
None
|
|
|
|
.OUTPUTS
|
|
None
|
|
#>
|
|
[CmdletBinding(PositionalBinding=$False, DefaultParameterSetName='DefineDate')]
|
|
Param(
|
|
[Parameter(Mandatory=$False)]
|
|
[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()]
|
|
[String]$BaseName = 'vcpkg-eg-mac',
|
|
|
|
[Parameter()]
|
|
[String]$BoxName = 'vcpkg/macos-ci'
|
|
)
|
|
|
|
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"
|
|
}
|
|
|
|
if ([String]::IsNullOrEmpty($MachineId)) {
|
|
$hostname = hostname -s
|
|
if ($hostname -match '^VCPKGMM-([0-9]{2})$') {
|
|
$MachineId = $matches[1]
|
|
} else {
|
|
Write-Error "Hostname ($hostname) does not match the expected format (VCPKGMM-NN). Please pass -MachineId in order to give the VM a number."
|
|
}
|
|
}
|
|
|
|
if (Test-Path '~/vagrant/vcpkg-eg-mac') {
|
|
Write-Host 'Deleting existing directories'
|
|
|
|
Push-Location '~/vagrant/vcpkg-eg-mac'
|
|
vagrant destroy -f
|
|
if (-not $?) {
|
|
throw "Failed to destroy vagrant VM."
|
|
}
|
|
Pop-Location
|
|
|
|
Remove-Item -Recurse -Force -LiteralPath '~/vagrant/vcpkg-eg-mac' | Out-Null
|
|
}
|
|
|
|
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-vm.rb" `
|
|
-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
|
|
}
|
|
ConvertTo-Json -InputObject $configuration -Depth 5 `
|
|
| Set-Content -Path '~/vagrant/vcpkg-eg-mac/vagrant-configuration.json'
|