From 39c4b5ac9209f40202288418764197a63b7c4710 Mon Sep 17 00:00:00 2001 From: Aleksandr Chebotov <47745270+al-cheb@users.noreply.github.com> Date: Mon, 20 Jun 2022 08:32:07 +0200 Subject: [PATCH] [Packer] Add anka macos12 hcl template (#5765) * Add macOS-12 Anka packer template * Fix indenation * Update cpu and memory * Move ] to next line * Add default value --- ...db-macos11.sh => configure-tccdb-macos.sh} | 0 images/macos/templates/macOS-11.anka.pkr.hcl | 108 ++++---- images/macos/templates/macOS-12.anka.pkr.hcl | 243 ++++++++++++++++++ 3 files changed, 302 insertions(+), 49 deletions(-) rename images/macos/provision/configuration/{configure-tccdb-macos11.sh => configure-tccdb-macos.sh} (100%) create mode 100644 images/macos/templates/macOS-12.anka.pkr.hcl diff --git a/images/macos/provision/configuration/configure-tccdb-macos11.sh b/images/macos/provision/configuration/configure-tccdb-macos.sh similarity index 100% rename from images/macos/provision/configuration/configure-tccdb-macos11.sh rename to images/macos/provision/configuration/configure-tccdb-macos.sh diff --git a/images/macos/templates/macOS-11.anka.pkr.hcl b/images/macos/templates/macOS-11.anka.pkr.hcl index cd4db2c0..c3f76512 100644 --- a/images/macos/templates/macOS-11.anka.pkr.hcl +++ b/images/macos/templates/macOS-11.anka.pkr.hcl @@ -20,6 +20,11 @@ variable "vm_password" { sensitive = true } +variable "github_api_pat" { + type = string + default = "" +} + variable "xcode_install_user" { type = string sensitive = true @@ -32,12 +37,12 @@ variable "xcode_install_password" { variable "vcpu_count" { type = string - default = "5" + default = "6" } variable "ram_size" { type = string - default = "12G" + default = "24G" } variable "image_os" { @@ -56,7 +61,7 @@ source "veertu-anka-vm-clone" "template" { build { sources = [ - "source.veertu-anka-vm-clone.template", + "source.veertu-anka-vm-clone.template" ] provisioner "shell" { inline = [ @@ -65,7 +70,12 @@ build { } provisioner "file" { destination = "image-generation/" - sources = [ "./provision/assets", "./tests", "./software-report", "./helpers" ] + sources = [ + "./provision/assets", + "./tests", + "./software-report", + "./helpers" + ] } provisioner "file" { destination = "image-generation/add-certificate.swift" @@ -105,32 +115,25 @@ build { } provisioner "shell" { scripts = [ - "./provision/configuration/configure-tccdb-macos11.sh", + "./provision/configuration/configure-tccdb-macos.sh", "./provision/configuration/add-network-interface-detection.sh", "./provision/configuration/autologin.sh", "./provision/configuration/disable-auto-updates.sh", "./provision/configuration/screensaver-off.sh", "./provision/configuration/ntpconf.sh", "./provision/configuration/max-files.sh", - "./provision/configuration/shell-change.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 = [ + "./provision/configuration/shell-change.sh", "./provision/configuration/preimagedata.sh", "./provision/configuration/configure-ssh.sh", "./provision/configuration/configure-machine.sh" ] environment_vars = [ "IMAGE_VERSION=${var.build_id}", - "IMAGE_OS=${var.image_os}" + "IMAGE_OS=${var.image_os}", + "PASSWORD=${var.vm_password}", + "USERNAME=${var.vm_username}" ] - execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; {{ .Vars }} {{ .Path }}" + execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; sudo {{ .Vars }} {{ .Path }}" } provisioner "shell" { script = "./provision/core/reboot.sh" @@ -149,7 +152,12 @@ build { "./provision/core/ruby.sh", "./provision/core/rubygem.sh", "./provision/core/git.sh", - "./provision/core/node.sh" + "./provision/core/node.sh", + "./provision/core/commonutils.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 }}" } @@ -168,37 +176,39 @@ build { } provisioner "shell" { scripts = [ - "./provision/core/commonutils.sh", - "./provision/core/llvm.sh", - "./provision/core/golang.sh", - "./provision/core/swiftlint.sh", - "./provision/core/openjdk.sh", - "./provision/core/php.sh", - "./provision/core/aws.sh", - "./provision/core/rust.sh", - "./provision/core/gcc.sh", - "./provision/core/haskell.sh", - "./provision/core/stack.sh", - "./provision/core/cocoapods.sh", - "./provision/core/android-toolsets.sh", - "./provision/core/xamarin.sh", - "./provision/core/vsmac.sh", - "./provision/core/nvm.sh", - "./provision/core/apache.sh", - "./provision/core/nginx.sh", - "./provision/core/postgresql.sh", - "./provision/core/mongodb.sh", - "./provision/core/audiodevice.sh", - "./provision/core/vcpkg.sh", - "./provision/core/miniconda.sh", - "./provision/core/safari.sh", - "./provision/core/chrome.sh", - "./provision/core/edge.sh", - "./provision/core/firefox.sh", - "./provision/core/pypy.sh", - "./provision/core/pipx-packages.sh", - "./provision/core/bicep.sh", - "./provision/core/graalvm.sh" + "./provision/core/llvm.sh", + "./provision/core/golang.sh", + "./provision/core/swiftlint.sh", + "./provision/core/openjdk.sh", + "./provision/core/php.sh", + "./provision/core/aws.sh", + "./provision/core/rust.sh", + "./provision/core/gcc.sh", + "./provision/core/haskell.sh", + "./provision/core/stack.sh", + "./provision/core/cocoapods.sh", + "./provision/core/android-toolsets.sh", + "./provision/core/xamarin.sh", + "./provision/core/vsmac.sh", + "./provision/core/nvm.sh", + "./provision/core/apache.sh", + "./provision/core/nginx.sh", + "./provision/core/postgresql.sh", + "./provision/core/mongodb.sh", + "./provision/core/audiodevice.sh", + "./provision/core/vcpkg.sh", + "./provision/core/miniconda.sh", + "./provision/core/safari.sh", + "./provision/core/chrome.sh", + "./provision/core/edge.sh", + "./provision/core/firefox.sh", + "./provision/core/pypy.sh", + "./provision/core/pipx-packages.sh", + "./provision/core/bicep.sh", + "./provision/core/graalvm.sh" + ] + environment_vars = [ + "API_PAT=${var.github_api_pat}" ] execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; {{ .Vars }} {{ .Path }}" } diff --git a/images/macos/templates/macOS-12.anka.pkr.hcl b/images/macos/templates/macOS-12.anka.pkr.hcl new file mode 100644 index 00000000..26dd0693 --- /dev/null +++ b/images/macos/templates/macOS-12.anka.pkr.hcl @@ -0,0 +1,243 @@ +variable "source_vm_name" { + type = string +} + +variable "source_vm_tag" { + type = string +} + +variable "build_id" { + type = string +} + +variable "vm_username" { + type = string + sensitive = true +} + +variable "vm_password" { + type = string + sensitive = true +} + +variable "github_api_pat" { + type = string + default = "" +} + +variable "xcode_install_user" { + type = string + sensitive = true +} + +variable "xcode_install_password" { + type = string + sensitive = true +} + +variable "vcpu_count" { + type = string + default = "6" +} + +variable "ram_size" { + type = string + default = "24G" +} + +variable "image_os" { + type = string + default = "macos12" +} + +source "veertu-anka-vm-clone" "template" { + 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" +} + +build { + sources = [ + "source.veertu-anka-vm-clone.template" + ] + provisioner "shell" { + inline = "mkdir ~/image-generation" + } + provisioner "file" { + destination = "~/image-generation/" + source = [ + "./provision/assets", + "./tests", + "./software-report", + "./helpers" + ] + } + provisioner "file" { + destination = "image-generation/add-certificate.swift" + source = "./provision/configuration/add-certificate.swift" + } + provisioner "file" { + destination = ".bashrc" + source = "./provision/configuration/environment/bashrc" + } + provisioner "file" { + destination = ".bash_profile" + source = "./provision/configuration/environment/bashprofile" + } + provisioner "file" { + destination = "./" + source = "./provision/utils" + } + provisioner "shell" { + inline = [ + "mkdir ~/bootstrap" + ] + } + provisioner "file" { + destination = "bootstrap" + source = "./provision/bootstrap-provisioner" + } + provisioner "file" { + destination = "image-generation/toolset.json" + source = "./toolsets/toolset-12.json" + } + provisioner "shell" { + scripts = [ + "./provision/core/xcode-clt.sh", + "./provision/core/homebrew.sh" + ] + execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; {{ .Vars }} {{ .Path }}" + } + provisioner "shell" { + scripts = [ + "./provision/configuration/configure-tccdb-macos.sh", + "./provision/configuration/add-network-interface-detection.sh", + "./provision/configuration/autologin.sh", + "./provision/configuration/disable-auto-updates.sh", + "./provision/configuration/screensaver-off.sh", + "./provision/configuration/ntpconf.sh", + "./provision/configuration/max-files.sh", + "./provision/configuration/shell-change.sh", + "./provision/configuration/preimagedata.sh", + "./provision/configuration/configure-ssh.sh", + "./provision/configuration/configure-machine.sh" + ] + environment_vars = [ + "IMAGE_VERSION=${var.build_id}", + "IMAGE_OS=${var.image_os}", + "PASSWORD=${var.vm_password}", + "USERNAME=${var.vm_username}" + ] + execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; sudo {{ .Vars }} {{ .Path }}" + } + provisioner "shell" { + script = "./provision/core/reboot.sh" + execute_command = execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; sudo {{ .Vars }} {{ .Path }}" + expect_disconnect = true + } + provisioner "shell" { + pause_before = "30s" + scripts = [ + "./provision/core/open_windows_check.sh", + "./provision/core/powershell.sh", + "./provision/core/dotnet.sh", + "./provision/core/python.sh", + "./provision/core/azcopy.sh", + "./provision/core/openssl.sh", + "./provision/core/ruby.sh", + "./provision/core/rubygem.sh", + "./provision/core/git.sh", + "./provision/core/node.sh", + "./provision/core/commonutils.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 = "./provision/core/xcode.ps1" + environment_vars = [ + "XCODE_INSTALL_USER=${var.xcode_install_user}", + "XCODE_INSTALL_PASSWORD=${var.xcode_install_password}" + ] + execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; {{ .Vars }} pwsh -f {{ .Path }}" + } + provisioner "shell" { + script = "./provision/core/reboot.sh" + execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; sudo {{ .Vars }} {{ .Path }}" + expect_disconnect = true + } + provisioner "shell" { + scripts = [ + "./provision/core/llvm.sh", + "./provision/core/golang.sh", + "./provision/core/swiftlint.sh", + "./provision/core/openjdk.sh", + "./provision/core/php.sh", + "./provision/core/aws.sh", + "./provision/core/rust.sh", + "./provision/core/gcc.sh", + "./provision/core/haskell.sh", + "./provision/core/stack.sh", + "./provision/core/cocoapods.sh", + "./provision/core/android-toolsets.sh", + "./provision/core/xamarin.sh", + "./provision/core/vsmac.sh", + "./provision/core/nvm.sh", + "./provision/core/apache.sh", + "./provision/core/nginx.sh", + "./provision/core/postgresql.sh", + "./provision/core/mongodb.sh", + "./provision/core/audiodevice.sh", + "./provision/core/vcpkg.sh", + "./provision/core/miniconda.sh", + "./provision/core/safari.sh", + "./provision/core/chrome.sh", + "./provision/core/edge.sh", + "./provision/core/firefox.sh", + "./provision/core/pypy.sh", + "./provision/core/pipx-packages.sh", + "./provision/core/bicep.sh", + "./provision/core/graalvm.sh" + ] + environment_vars = [ + "API_PAT=${var.github_api_pat}" + ] + execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; {{ .Vars }} {{ .Path }}" + } + provisioner "shell" { + scripts = [ + "./provision/core/toolset.ps1", + "./provision/core/configure-toolset.ps1" + ] + execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; {{ .Vars }} pwsh -f {{ .Path }}" + } + provisioner "shell" { + scripts = "./provision/core/delete-duplicate-sims.rb" + execute_command = "source $HOME/.bash_profile; ruby {{ .Path }}" + } + provisioner "shell" { + inline = [ + "pwsh -File \"$HOME/image-generation/software-report/SoftwareReport.Generator.ps1\" -OutputDirectory \"$HOME/image-generation/output/software-report\" -ImageName ${var.build_id}", + "pwsh -File \"$HOME/image-generation/tests/RunAll-Tests.ps1\"" + ] + execute_command = "source $HOME/.bash_profile; {{ .Vars }} {{ .Path }}" + } + provisioner "file" { + destination = "../image-output/" + direction = "download" + source = "./image-generation/output/*" + } + provisioner "shell" { + scripts = [ + "./provision/configuration/configure-hostname.sh", + "./provision/configuration/finalize-vm.sh" + ] + execute_command = "chmod +x {{ .Path }}; source $HOME/.bash_profile; {{ .Vars }} {{ .Path }}" + } +}