aboutsummaryrefslogtreecommitdiff
path: root/scripts/azure-pipelines/osx/configuration/Vagrantfile
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/azure-pipelines/osx/configuration/Vagrantfile')
-rw-r--r--scripts/azure-pipelines/osx/configuration/Vagrantfile129
1 files changed, 129 insertions, 0 deletions
diff --git a/scripts/azure-pipelines/osx/configuration/Vagrantfile b/scripts/azure-pipelines/osx/configuration/Vagrantfile
new file mode 100644
index 000000000..91a59860c
--- /dev/null
+++ b/scripts/azure-pipelines/osx/configuration/Vagrantfile
@@ -0,0 +1,129 @@
+require 'json'
+
+require "erb"
+include ERB::Util
+
+configuration = JSON.parse(File.read('./vagrant-configuration.json'))
+
+server = {
+ :hostname => configuration['machine_name'],
+ :box => configuration['box_name'],
+ :box_version => configuration['box_version'],
+ :disk_size => configuration['disk_size'],
+ :ram => 12000,
+ :cpu => 5
+}
+
+brew_formulas = [
+ 'autoconf',
+ 'automake',
+ 'bison',
+ 'libtool',
+ 'mono',
+ 'pkg-config',
+ 'yasm' ]
+
+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 = configuration['devops_url']
+agent_pool = configuration['agent_pool']
+pat = configuration['pat']
+archives = configuration['archives']
+archives_url = "//#{archives['username']}:#{url_encode(archives['access_key'])}@#{archives['urn']}/#{archives['share']}"
+
+Vagrant.configure('2') do |config|
+ # give them extra time to boot up
+ config.vm.boot_timeout = 600
+
+ config.vm.box = server[:box]
+ config.vm.box_version = server[:box_version]
+ config.vm.hostname = server[:hostname]
+ config.vm.synced_folder '.', '/vagrant', disabled: true
+
+ diskname = "#{server[:hostname]}-data.vmdk"
+
+ # I don't like this, but as far as I can tell, it's the only way
+ # to do this. When vagrant finishes the `disk` feature, switch
+ # over to that -- Nicole Mazzuca
+ if (not File.exists? diskname) then
+ system "VBoxManage createmedium --filename #{diskname} --size #{1024 * server[:disk_size]}"
+ end
+
+ config.vm.provider 'virtualbox' do |vb|
+ vb.memory = server[:ram]
+ vb.cpus = server[:cpu]
+ vb.customize ['modifyvm', :id, '--ioapic', 'on']
+ vb.customize ['storageattach', :id,
+ '--storagectl', 'SATA Controller',
+ '--port', '1', '--device', '0', '--type', 'hdd',
+ '--medium', "#{diskname}"
+ ]
+ end
+
+ config.vm.provision 'shell',
+ run: 'once',
+ name: 'Format and mount the data filesystem',
+ inline: 'diskutil partitionDisk /dev/disk0 1 GPT jhfs+ data 0',
+ privileged: true
+
+ config.vm.provision 'shell',
+ run: 'once',
+ name: 'Link the data filesystem to the home directory',
+ inline: "ln -s /Volumes/data ~/Data",
+ privileged: false
+
+ config.vm.provision 'shell',
+ run: 'once',
+ name: 'Download azure agent',
+ inline: "curl -s -o ~/Downloads/azure-agent.tar.gz #{azure_agent_url}",
+ privileged: false
+
+ config.vm.provision 'shell',
+ run: 'once',
+ name: 'Unpack azure agent',
+ inline: 'mkdir myagent; cd myagent; tar xf ~/Downloads/azure-agent.tar.gz',
+ privileged: false
+
+ config.vm.provision 'shell',
+ run: 'once',
+ name: 'Install brew applications',
+ inline: "brew install #{brew_formulas.join(' ')} && brew cask install #{brew_cask_formulas.join(' ')}",
+ privileged: false
+
+ config.vm.provision 'shell',
+ run: 'once',
+ name: 'Create archives mountpoint',
+ inline: 'mkdir ~/Data/archives',
+ privileged: false
+
+ config.vm.provision "shell",
+ run: 'once',
+ name: 'Mount archives directory',
+ inline: "mount_smbfs -d 777 -f 777 #{archives_url} ~/Data/archives",
+ privileged: false
+
+ config.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
+ config.vm.provision 'shell',
+ run: 'always',
+ name: 'Start running azure pipelines',
+ inline: 'cd /Users/vagrant/myagent;\
+ nohup ./run.sh&',
+ privileged: false
+end