vcpkg/scripts/azure-pipelines/osx/configuration/VagrantFile

119 lines
3.5 KiB
Plaintext
Raw Normal View History

require 'json'
require "erb"
include ERB::Util
configuration = JSON.parse(File.read('./vagrant-configuration.json'))
servers = configuration['machine_identifiers'].map do |id|
{
:hostname => "#{configuration['base_name']}-#{id}",
:box => 'ramsey/macos-catalina',
:ram => 12000,
:cpu => 5
}
end
brew_formulas = [
'autoconf',
'automake',
'libtool',
'bison' ]
brew_cask_formulas = [
'powershell',
'gfortran' ]
azure_agent_url = 'https://vstsagentpackage.azureedge.net/agent/2.171.1/vsts-agent-osx-x64-2.171.1.tar.gz'
devops_url = 'https://dev.azure.com/vcpkg'
agent_pool = 'vcpkgAgentPool'
pat = configuration['pat']
archives = configuration['archives']
archives_url = "//#{archives['username']}:#{url_encode(archives['access_key'])}@#{archives['url']}/#{archives['share']}"
Vagrant.configure('2') do |config|
# give them extra time to boot up
config.vm.boot_timeout = 600
servers.each do |machine|
config.vm.define machine[:hostname] do |node|
node.vm.box = machine[:box]
node.vm.hostname = machine[:hostname]
node.vm.synced_folder '.', '/vagrant', disabled: true
node.vm.disk :disk, name: "#{machine[:hostname]}-data", size: "#{config['disk_size']}GB"
node.vm.provision 'shell',
run: 'once',
name: 'Format and mount the data filesystem',
inline: 'diskutil partitionDisk /dev/disk0 1 GPT jhfs+ data 0',
privileged: true
node.vm.provision 'shell',
run: 'once',
name: 'Link the data filesystem to the home directory',
inline: "ln -s /Volumes/data ~/Data",
privileged: false
node.vm.provision 'shell',
run: 'once',
name: 'Download azure agent',
inline: "curl -s -o ~/Downloads/azure-agent.tar.gz #{azure_agent_url}",
privileged: false
node.vm.provision 'shell',
run: 'once',
name: 'Unpack azure agent',
inline: 'mkdir myagent; cd myagent; tar xf ~/Downloads/azure-agent.tar.gz',
privileged: false
node.vm.provision 'shell',
run: 'once',
name: 'Install brew and xcode command line tools',
inline: '/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"',
privileged: false
node.vm.provision 'shell',
run: 'once',
name: 'Install brew applications',
inline: "brew install #{brew_formulas.join(' ')} && brew cask install #{brew_cask_formulas.join(' ')}",
privileged: false
node.vm.provision 'shell',
run: 'once',
name: 'Create archives mountpoint',
inline: 'mkdir ~/Data/archives',
privileged: false
node.vm.provision "shell",
run: 'once',
name: 'Mount archives directory',
inline: "mount_smbfs -d 777 -f 777 #{archives_url} ~/Data/archives",
privileged: false
node.vm.provision 'shell',
run: 'once',
name: 'Add VM to azure agent pool',
inline: "cd ~/myagent;\
./config.sh --unattended \
--url #{devops_url} \
--work ~/Data/work \
--auth pat --token #{pat} \
--pool #{agent_pool} \
--agent `hostname` \
--replace \
--acceptTeeEula",
privileged: false
# Start listening for jobs
node.vm.provision 'shell',
run: 'always',
name: 'Start running azure pipelines',
inline: 'cd /Users/vagrant/myagent;\
nohup ./run.sh&',
privileged: false
end
end
end