[macos] Add path variables to packer templates (#9155)

* Update macos-12.pkr.hcl template

* Update remaining macos templates

* Update Get-ToolsetContent and get_toolset_value functions

* Fix ~ symbol expansion issues

* Fix bad path in macOS-14.arm64.anka.pkr.hcl
This commit is contained in:
Shamil Mubarakshin
2024-01-15 12:21:24 +01:00
committed by GitHub
parent 2a7ca2e6a2
commit ba2e955e0b
9 changed files with 904 additions and 855 deletions

View File

@@ -2,11 +2,15 @@ packer {
required_plugins {
veertu-anka = {
version = ">= v3.2.0"
source = "github.com/veertuinc/veertu-anka"
source = "github.com/veertuinc/veertu-anka"
}
}
}
locals {
image_folder = "/Users/${var.vm_username}/image-generation"
}
variable "source_vm_name" {
type = string
}
@@ -20,234 +24,236 @@ variable "build_id" {
}
variable "vm_username" {
type = string
type = string
sensitive = true
}
variable "vm_password" {
type = string
type = string
sensitive = true
}
variable "github_api_pat" {
type = string
type = string
default = ""
}
variable "xcode_install_storage_url" {
type = string
type = string
sensitive = true
}
variable "xcode_install_sas" {
type = string
type = string
sensitive = true
}
variable "vcpu_count" {
type = string
type = string
default = "6"
}
variable "ram_size" {
type = string
type = string
default = "8G"
}
variable "image_os" {
type = string
type = string
default = "macos13"
}
source "veertu-anka-vm-clone" "template" {
vm_name = "${var.build_id}"
vm_name = "${var.build_id}"
source_vm_name = "${var.source_vm_name}"
source_vm_tag = "${var.source_vm_tag}"
vcpu_count = "${var.vcpu_count}"
ram_size = "${var.ram_size}"
stop_vm = "true"
log_level = "debug"
source_vm_tag = "${var.source_vm_tag}"
vcpu_count = "${var.vcpu_count}"
ram_size = "${var.ram_size}"
stop_vm = "true"
log_level = "debug"
}
build {
sources = [
"source.veertu-anka-vm-clone.template"
]
sources = ["source.veertu-anka-vm-clone.template"]
provisioner "shell" {
inline = [
"mkdir ~/image-generation"
inline = ["mkdir ${local.image_folder}"]
}
provisioner "file" {
destination = "${local.image_folder}/"
sources = [
"${path.root}/../assets/xamarin-selector",
"${path.root}/../scripts/tests",
"${path.root}/../scripts/docs-gen",
"${path.root}/../scripts/helpers"
]
}
provisioner "file" {
destination = "image-generation/"
sources = [
"./assets/xamarin-selector",
"./scripts/tests",
"./scripts/docs-gen",
"./scripts/helpers"
]
destination = "${local.image_folder}/docs-gen/"
source = "${path.root}/../../../helpers/software-report-base"
}
provisioner "file" {
destination = "image-generation/docs-gen/"
source = "../../helpers/software-report-base"
}
provisioner "file" {
destination = "image-generation/add-certificate.swift"
source = "./assets/add-certificate.swift"
destination = "${local.image_folder}/add-certificate.swift"
source = "${path.root}/../assets/add-certificate.swift"
}
provisioner "file" {
destination = ".bashrc"
source = "./assets/bashrc"
source = "${path.root}/../assets/bashrc"
}
provisioner "file" {
destination = ".bash_profile"
source = "./assets/bashprofile"
source = "${path.root}/../assets/bashprofile"
}
provisioner "shell" {
inline = [
"mkdir ~/bootstrap"
]
inline = ["mkdir ~/bootstrap"]
}
provisioner "file" {
destination = "bootstrap"
source = "./assets/bootstrap-provisioner/"
source = "${path.root}/../assets/bootstrap-provisioner/"
}
provisioner "file" {
destination = "image-generation/toolset.json"
source = "./toolsets/toolset-13.json"
destination = "${local.image_folder}/toolset.json"
source = "${path.root}/../toolsets/toolset-13.json"
}
provisioner "shell" {
execute_command = "sudo sh -c '{{ .Vars }} {{ .Path }}'"
inline = [
"mv ~/image-generation/docs-gen ~/image-generation/software-report",
"mv ~/image-generation/xamarin-selector ~/image-generation/assets",
"mv ${local.image_folder}/docs-gen ${local.image_folder}/software-report",
"mv ${local.image_folder}/xamarin-selector ${local.image_folder}/assets",
"mkdir ~/utils",
"mv ~/image-generation/helpers/confirm-identified-developers.scpt ~/utils",
"mv ~/image-generation/helpers/invoke-tests.sh ~/utils",
"mv ~/image-generation/helpers/utils.sh ~/utils",
"mv ~/image-generation/helpers/xamarin-utils.sh ~/utils"
"mv ${local.image_folder}/helpers/confirm-identified-developers.scpt ~/utils",
"mv ${local.image_folder}/helpers/invoke-tests.sh ~/utils",
"mv ${local.image_folder}/helpers/utils.sh ~/utils",
"mv ${local.image_folder}/helpers/xamarin-utils.sh ~/utils"
]
}
provisioner "shell" {
scripts = [
"./scripts/build/install-xcode-clt.sh",
"./scripts/build/install-homebrew.sh"
]
execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; {{ .Vars }} {{ .Path }}"
scripts = [
"${path.root}/../scripts/build/install-xcode-clt.sh",
"${path.root}/../scripts/build/install-homebrew.sh"
]
}
provisioner "shell" {
scripts = [
"./scripts/build/configure-tccdb-macos.sh",
"./scripts/build/configure-auto-updates.sh",
"./scripts/build/configure-ntpconf.sh",
"./scripts/build/configure-shell.sh"
environment_vars = ["PASSWORD=${var.vm_password}", "USERNAME=${var.vm_username}"]
execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; sudo {{ .Vars }} {{ .Path }}"
scripts = [
"${path.root}/../scripts/build/configure-tccdb-macos.sh",
"${path.root}/../scripts/build/configure-auto-updates.sh",
"${path.root}/../scripts/build/configure-ntpconf.sh",
"${path.root}/../scripts/build/configure-shell.sh"
]
environment_vars = [
"PASSWORD=${var.vm_password}",
"USERNAME=${var.vm_username}"
]
execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; sudo {{ .Vars }} {{ .Path }}"
}
provisioner "shell" {
scripts = [
"./scripts/build/configure-preimagedata.sh",
"./scripts/build/configure-ssh.sh",
"./scripts/build/configure-machine.sh"
environment_vars = ["IMAGE_VERSION=${var.build_id}", "IMAGE_OS=${var.image_os}", "PASSWORD=${var.vm_password}"]
execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; {{ .Vars }} {{ .Path }}"
scripts = [
"${path.root}/../scripts/build/configure-preimagedata.sh",
"${path.root}/../scripts/build/configure-ssh.sh",
"${path.root}/../scripts/build/configure-machine.sh"
]
environment_vars = [
"IMAGE_VERSION=${var.build_id}",
"IMAGE_OS=${var.image_os}",
"PASSWORD=${var.vm_password}"
]
execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; {{ .Vars }} {{ .Path }}"
}
provisioner "shell" {
execute_command = "source $HOME/.bash_profile; sudo {{ .Vars }} {{ .Path }}"
expect_disconnect = true
inline = ["echo 'Reboot VM'", "shutdown -r now"]
}
provisioner "shell" {
pause_before = "30s"
scripts = [
"./scripts/build/install-rosetta.sh",
"./scripts/build/configure-windows.sh",
"./scripts/build/install-powershell.sh",
"./scripts/build/install-mono.sh",
"./scripts/build/install-dotnet.sh",
"./scripts/build/install-azcopy.sh",
"./scripts/build/install-openssl.sh",
"./scripts/build/install-ruby.sh",
"./scripts/build/install-rubygems.sh",
"./scripts/build/install-git.sh",
"./scripts/build/install-node.sh",
"./scripts/build/install-common-utils.sh"
environment_vars = ["API_PAT=${var.github_api_pat}", "USER_PASSWORD=${var.vm_password}", "IMAGE_FOLDER=${local.image_folder}"]
execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; {{ .Vars }} {{ .Path }}"
pause_before = "30s"
scripts = [
"${path.root}/../scripts/build/install-rosetta.sh",
"${path.root}/../scripts/build/configure-windows.sh",
"${path.root}/../scripts/build/install-powershell.sh",
"${path.root}/../scripts/build/install-mono.sh",
"${path.root}/../scripts/build/install-dotnet.sh",
"${path.root}/../scripts/build/install-azcopy.sh",
"${path.root}/../scripts/build/install-openssl.sh",
"${path.root}/../scripts/build/install-ruby.sh",
"${path.root}/../scripts/build/install-rubygems.sh",
"${path.root}/../scripts/build/install-git.sh",
"${path.root}/../scripts/build/install-node.sh",
"${path.root}/../scripts/build/install-common-utils.sh"
]
environment_vars = [
"API_PAT=${var.github_api_pat}",
"USER_PASSWORD=${var.vm_password}"
]
execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; {{ .Vars }} {{ .Path }}"
}
provisioner "shell" {
script = "./scripts/build/Install-Xcode.ps1"
environment_vars = [
"XCODE_INSTALL_STORAGE_URL=${var.xcode_install_storage_url}",
"XCODE_INSTALL_SAS=${var.xcode_install_sas}"
]
execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; {{ .Vars }} pwsh -f {{ .Path }}"
environment_vars = ["XCODE_INSTALL_STORAGE_URL=${var.xcode_install_storage_url}", "XCODE_INSTALL_SAS=${var.xcode_install_sas}", "IMAGE_FOLDER=${local.image_folder}"]
execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; {{ .Vars }} pwsh -f {{ .Path }}"
script = "${path.root}/../scripts/build/Install-Xcode.ps1"
}
provisioner "shell" {
execute_command = "source $HOME/.bash_profile; sudo {{ .Vars }} {{ .Path }}"
expect_disconnect = true
inline = ["echo 'Reboot VM'", "shutdown -r now"]
}
provisioner "shell" {
scripts = [
"./scripts/build/install-actions-cache.sh",
"./scripts/build/install-llvm.sh",
"./scripts/build/install-openjdk.sh",
"./scripts/build/install-aws-tools.sh",
"./scripts/build/install-rust.sh",
"./scripts/build/install-gcc.sh",
"./scripts/build/install-cocoapods.sh",
"./scripts/build/install-android-sdk.sh",
"./scripts/build/install-safari.sh",
"./scripts/build/install-chrome.sh",
"./scripts/build/install-bicep.sh",
"./scripts/build/install-codeql-bundle.sh"
environment_vars = ["API_PAT=${var.github_api_pat}", "IMAGE_FOLDER=${local.image_folder}"]
execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; {{ .Vars }} {{ .Path }}"
scripts = [
"${path.root}/../scripts/build/install-actions-cache.sh",
"${path.root}/../scripts/build/install-llvm.sh",
"${path.root}/../scripts/build/install-openjdk.sh",
"${path.root}/../scripts/build/install-aws-tools.sh",
"${path.root}/../scripts/build/install-rust.sh",
"${path.root}/../scripts/build/install-gcc.sh",
"${path.root}/../scripts/build/install-cocoapods.sh",
"${path.root}/../scripts/build/install-android-sdk.sh",
"${path.root}/../scripts/build/install-safari.sh",
"${path.root}/../scripts/build/install-chrome.sh",
"${path.root}/../scripts/build/install-bicep.sh",
"${path.root}/../scripts/build/install-codeql-bundle.sh"
]
environment_vars = [
"API_PAT=${var.github_api_pat}"
]
execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; {{ .Vars }} {{ .Path }}"
}
provisioner "shell" {
scripts = [
"./scripts/build/Install-Toolset.ps1",
"./scripts/build/Configure-Toolset.ps1"
environment_vars = ["IMAGE_FOLDER=${local.image_folder}"]
execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; {{ .Vars }} pwsh -f {{ .Path }}"
scripts = [
"${path.root}/../scripts/build/Install-Toolset.ps1",
"${path.root}/../scripts/build/Configure-Toolset.ps1"
]
execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; {{ .Vars }} pwsh -f {{ .Path }}"
}
provisioner "shell" {
script = "./scripts/build/configure-xcode-simulators.rb"
execute_command = "source $HOME/.bash_profile; ruby {{ .Path }}"
script = "${path.root}/../scripts/build/configure-xcode-simulators.rb"
}
provisioner "shell" {
inline = [
"pwsh -File \"$HOME/image-generation/software-report/Generate-SoftwareReport.ps1\" -OutputDirectory \"$HOME/image-generation/output/software-report\" -ImageName ${var.build_id}",
"pwsh -File \"$HOME/image-generation/tests/RunAll-Tests.ps1\""
environment_vars = ["IMAGE_FOLDER=${local.image_folder}"]
execute_command = "source $HOME/.bash_profile; {{ .Vars }} {{ .Path }}"
inline = [
"pwsh -File \"${local.image_folder}/software-report/Generate-SoftwareReport.ps1\" -OutputDirectory \"${local.image_folder}/output/software-report\" -ImageName ${var.build_id}",
"pwsh -File \"${local.image_folder}/tests/RunAll-Tests.ps1\""
]
execute_command = "source $HOME/.bash_profile; {{ .Vars }} {{ .Path }}"
}
provisioner "file" {
destination = "../image-output/"
direction = "download"
source = "./image-generation/output/"
destination = "${path.root}/../../image-output/"
direction = "download"
source = "${local.image_folder}/output/"
}
provisioner "shell" {
scripts = [
"./scripts/build/configure-hostname.sh"
]
execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; {{ .Vars }} {{ .Path }}"
scripts = ["${path.root}/../scripts/build/configure-hostname.sh"]
}
}