From bf1cae6dcf2db1909c7535198c938a881a6e31c8 Mon Sep 17 00:00:00 2001 From: Dmitry Shibanov Date: Fri, 24 Sep 2021 13:56:16 +0300 Subject: [PATCH] Add macOS 12 image templates (#4062) --- images.CI/macos/azure-pipelines/macos12.yml | 23 ++ images/macos/helpers/Common.Helpers.psm1 | 6 + .../configuration/environment/bashrc | 4 - images/macos/provision/core/commonutils.sh | 3 + images/macos/provision/core/homebrew.sh | 2 +- images/macos/provision/core/miniconda.sh | 2 + images/macos/provision/core/ruby.sh | 4 + images/macos/provision/core/xcode-clt.sh | 4 + images/macos/provision/utils/utils.sh | 18 ++ .../SoftwareReport.Generator.ps1 | 62 +++-- .../software-report/SoftwareReport.Xcode.psm1 | 11 +- images/macos/templates/macOS-12.json | 227 ++++++++++++++++++ images/macos/tests/Android.Tests.ps1 | 2 +- images/macos/tests/BasicTools.Tests.ps1 | 20 +- images/macos/tests/Common.Tests.ps1 | 6 +- images/macos/tests/PHP.Tests.ps1 | 4 +- images/macos/tests/RubyGem.Tests.ps1 | 4 +- images/macos/tests/System.Tests.ps1 | 4 +- images/macos/tests/XamarinNDK.Tests.ps1 | 4 +- images/macos/toolsets/toolset-12.json | 166 +++++++++++++ 20 files changed, 530 insertions(+), 46 deletions(-) create mode 100644 images.CI/macos/azure-pipelines/macos12.yml create mode 100644 images/macos/templates/macOS-12.json create mode 100644 images/macos/toolsets/toolset-12.json diff --git a/images.CI/macos/azure-pipelines/macos12.yml b/images.CI/macos/azure-pipelines/macos12.yml new file mode 100644 index 000000000..090de9af9 --- /dev/null +++ b/images.CI/macos/azure-pipelines/macos12.yml @@ -0,0 +1,23 @@ +name: macOS-12_$(date:yyyyMMdd)$(rev:.r)_unstable +# schedules: +# - cron: "0 0 * * *" +# displayName: Daily +# branches: +# include: +# - main +# always: true + +trigger: none +pr: + autoCancel: true + branches: + include: + - main + +jobs: +- template: image-generation.yml + parameters: + image_label: 'macOS Monterey' + base_image_name: 'clean-macOS-12-380Gb-runner' + template_path: 'templates/macOS-12.json' + target_datastore: 'ds-image' diff --git a/images/macos/helpers/Common.Helpers.psm1 b/images/macos/helpers/Common.Helpers.psm1 index 66edb8789..50ed849d7 100644 --- a/images/macos/helpers/Common.Helpers.psm1 +++ b/images/macos/helpers/Common.Helpers.psm1 @@ -28,6 +28,9 @@ function Get-EnvironmentVariable($variable) { function Get-OSVersion { $osVersion = [Environment]::OSVersion $osVersionMajorMinor = $osVersion.Version.ToString(2) + # Monterey needs future review: + # [Environment]::OSVersion returns 11.0 for Monterey preview. + [SemVer]$osMontereyVersion = sw_vers -productVersion return [PSCustomObject]@{ Version = $osVersion.Version Platform = $osVersion.Platform @@ -35,9 +38,12 @@ function Get-OSVersion { IsMojave = $osVersionMajorMinor -eq "10.14" IsCatalina = $osVersionMajorMinor -eq "10.15" IsBigSur = $osVersionMajorMinor -eq "11.0" + IsMonterey = $osMontereyVersion.Major -eq "12" IsLessThanCatalina = [SemVer]$osVersion.Version -lt "10.15" IsLessThanBigSur = [SemVer]$osVersion.Version -lt "11.0" + IsLessThanMonterey = $osMontereyVersion -lt "12.0" IsHigherThanMojave = [SemVer]$osVersion.Version -ge "10.15" + IsHigherThanCatalina = [SemVer]$osVersion.Version -ge "11.0" } } diff --git a/images/macos/provision/configuration/environment/bashrc b/images/macos/provision/configuration/environment/bashrc index 224f000cd..2ffdeb0bc 100644 --- a/images/macos/provision/configuration/environment/bashrc +++ b/images/macos/provision/configuration/environment/bashrc @@ -12,7 +12,6 @@ export VM_ASSETS=/usr/local/opt/$USER/scripts export NUNIT_BASE_PATH=/Library/Developer/nunit export NUNIT3_PATH=/Library/Developer/nunit/3.6.0 -export CONDA=/usr/local/miniconda export AGENT_TOOLSDIRECTORY=$HOME/hostedtoolcache export RUNNER_TOOL_CACHE=$HOME/hostedtoolcache @@ -20,9 +19,6 @@ export PATH=/Library/Frameworks/Mono.framework/Versions/Current/Commands:$PATH export PATH=$ANDROID_HOME/tools:$ANDROID_HOME/platform-tools:$ANDROID_NDK_HOME:$PATH export PATH=/usr/local/bin:/usr/local/sbin:~/bin:~/.yarn/bin:$PATH export PATH="/usr/local/opt/curl/bin:$PATH" -export PATH="/usr/local/opt/ruby@2.7/bin:$PATH" -GEM_PATH=`gem env|awk '/EXECUTABLE DIRECTORY/ {print $4}'` -export PATH="$GEM_PATH:$PATH" export PATH=$HOME/.cargo/bin:$PATH export RCT_NO_LAUNCH_PACKAGER=1 diff --git a/images/macos/provision/core/commonutils.sh b/images/macos/provision/core/commonutils.sh index a13f6a7d1..0f046e699 100644 --- a/images/macos/provision/core/commonutils.sh +++ b/images/macos/provision/core/commonutils.sh @@ -1,6 +1,9 @@ #!/bin/bash -e -o pipefail source ~/utils/utils.sh +# Monterey needs future review: +# Llvm, aliyun-cli, gnupg, helm have issues with building from the source code. +# Added gmp for now, because toolcache ruby needs its libs. Remove it when php starts to build from source code. common_packages=$(get_toolset_value '.brew.common_packages[]') for package in $common_packages; do echo "Installing $package..." diff --git a/images/macos/provision/core/homebrew.sh b/images/macos/provision/core/homebrew.sh index 57f876447..c5380226a 100755 --- a/images/macos/provision/core/homebrew.sh +++ b/images/macos/provision/core/homebrew.sh @@ -14,7 +14,7 @@ echo "Installing jq..." brew install jq echo "Installing curl..." -brew_smart_install "curl" +brew install curl echo "Installing wget..." brew_smart_install "wget" diff --git a/images/macos/provision/core/miniconda.sh b/images/macos/provision/core/miniconda.sh index a225b55b3..86f1c90dd 100644 --- a/images/macos/provision/core/miniconda.sh +++ b/images/macos/provision/core/miniconda.sh @@ -11,4 +11,6 @@ if [ -d "$HOME/.conda" ]; then sudo chown -R $USER "$HOME/.conda" fi +echo "export CONDA=/usr/local/miniconda" >> $HOME/.bashrc + invoke_tests "Common" "Miniconda" diff --git a/images/macos/provision/core/ruby.sh b/images/macos/provision/core/ruby.sh index 900eb92e6..53b21938d 100755 --- a/images/macos/provision/core/ruby.sh +++ b/images/macos/provision/core/ruby.sh @@ -4,6 +4,10 @@ source ~/utils/utils.sh DEFAULT_RUBY_VERSION=$(get_toolset_value '.ruby.default') echo Installing Ruby... brew_smart_install "ruby@${DEFAULT_RUBY_VERSION}" +export PATH=/usr/local/opt/ruby@${DEFAULT_RUBY_VERSION}/bin:$PATH +GEM_PATH=`gem env|awk '/EXECUTABLE DIRECTORY/ {print $4}'` +echo "GEM_PATH=$GEM_PATH" >> "$HOME/.bashrc" +echo 'export PATH="$GEM_PATH:/usr/local/opt/ruby@'${DEFAULT_RUBY_VERSION}'/bin:$PATH"' >> "$HOME/.bashrc" #if High Sierra - skip installation from toolset if is_HighSierra; then diff --git a/images/macos/provision/core/xcode-clt.sh b/images/macos/provision/core/xcode-clt.sh index aecba8e83..bb6cffaac 100644 --- a/images/macos/provision/core/xcode-clt.sh +++ b/images/macos/provision/core/xcode-clt.sh @@ -12,6 +12,10 @@ install_clt() { clt_placeholder="/tmp/.com.apple.dt.CommandLineTools.installondemand.in-progress" sudo touch $clt_placeholder cltPattern="Command Line Tools" + # Command Line Tools for Xcode 13.0 does not support macOS 12 + if is_Monterey; then + cltPattern="Command Line Tools beta" + fi clt_label_command="/usr/sbin/softwareupdate -l | grep -B 1 -E '${cltPattern}' | diff --git a/images/macos/provision/utils/utils.sh b/images/macos/provision/utils/utils.sh index 97ee2bf09..c4acb551d 100755 --- a/images/macos/provision/utils/utils.sh +++ b/images/macos/provision/utils/utils.sh @@ -39,6 +39,14 @@ download_with_retries() { return 1 } +is_Monterey() { + if [ "$OSTYPE" = "darwin21" ]; then + true + else + false + fi +} + is_BigSur() { if [ "$OSTYPE" = "darwin20" ]; then true @@ -87,6 +95,14 @@ is_Less_BigSur() { fi } +is_Less_Monterey() { + if is_HighSierra || is_Mojave || is_Catalina || is_BigSur; then + true + else + false + fi +} + get_toolset_path() { echo "$HOME/image-generation/toolset.json" } @@ -124,6 +140,8 @@ get_brew_os_keyword() { echo "catalina" elif is_BigSur; then echo "big_sur" + elif is_Monterey; then + echo "monterey" else echo "null" fi diff --git a/images/macos/software-report/SoftwareReport.Generator.ps1 b/images/macos/software-report/SoftwareReport.Generator.ps1 index e9d196f7e..e4686f05b 100644 --- a/images/macos/software-report/SoftwareReport.Generator.ps1 +++ b/images/macos/software-report/SoftwareReport.Generator.ps1 @@ -42,12 +42,17 @@ $languageAndRuntimeList = @( (Get-RubyVersion), (Get-DotnetVersionList), (Get-GoVersion), - (Get-PHPVersion), (Get-JuliaVersion), (Get-KotlinVersion) ) -if ( -not $os.IsHighSierra) { +if ($os.IsLessThanMonterey) { + $languageAndRuntimeList += @( + (Get-PHPVersion) + ) +} + +if ( -not $os.IsHighSierra -and $os.IsLessThanMonterey) { $languageAndRuntimeList += @( (Get-GccVersion) (Get-FortranVersion) @@ -72,28 +77,34 @@ $packageManagementList = @( (Get-PipVersion -Version 3), (Get-PipxVersion), (Get-BundlerVersion), - (Get-CarthageVersion), (Get-CocoaPodsVersion), (Get-HomebrewVersion), (Get-NPMVersion), (Get-YarnVersion), (Get-NuGetVersion), - (Get-CondaVersion), (Get-RubyGemsVersion), (Get-ComposerVersion) ) -if ($os.IsHigherThanMojave) { +if ($os.IsLessThanMonterey) { + $packageManagementList += @( + (Get-CarthageVersion), + (Get-CondaVersion) + ) +} + +if ($os.IsHigherThanMojave -and $os.IsLessThanMonterey) { $packageManagementList += @( (Get-VcpkgVersion) ) } $markdown += New-MDList -Style Unordered -Lines ($packageManagementList | Sort-Object) -$markdown += New-MDHeader "Environment variables" -Level 4 -$markdown += Build-PackageManagementEnvironmentTable | New-MDTable -$markdown += New-MDNewLine - +if ($os.IsLessThanMonterey) { + $markdown += New-MDHeader "Environment variables" -Level 4 + $markdown += Build-PackageManagementEnvironmentTable | New-MDTable + $markdown += New-MDNewLine +} # Project Management $markdown += New-MDHeader "Project Management" -Level 3 $markdown += New-MDList -Style Unordered -Lines (@( @@ -117,7 +128,6 @@ $utilitiesList = @( (Get-PackerVersion), (Get-OpenSSLVersion), (Get-JqVersion), - (Get-GPGVersion), (Get-PostgresClientVersion), (Get-PostgresServerVersion), (Get-Aria2Version), @@ -125,7 +135,6 @@ $utilitiesList = @( (Get-ZstdVersion), (Get-BazelVersion), (Get-BazeliskVersion), - (Get-HelmVersion), (Get-MongoVersion), (Get-MongodVersion), (Get-7zipVersion), @@ -133,7 +142,14 @@ $utilitiesList = @( (Get-GnuTarVersion) ) -if ($os.IsHigherThanMojave) { +if ($os.IsLessThanMonterey) { + $utilitiesList += @( + (Get-GPGVersion), + (Get-HelmVersion) + ) +} + +if ($os.IsHigherThanMojave -and $os.IsLessThanMonterey) { $utilitiesList += @( (Get-NewmanVersion) ) @@ -147,7 +163,7 @@ if ($os.IsLessThanBigSur) { ) } -if (-not $os.IsHighSierra) { +if (-not $os.IsHighSierra -and $os.IsLessThanMonterey) { $utilitiesList += @( (Get-SwitchAudioOsxVersion), (Get-SoxVersion) @@ -166,8 +182,16 @@ $toolsList = @( (Get-AzureCLIVersion), (Get-AWSCLIVersion), (Get-AWSSAMCLIVersion), - (Get-AWSSessionManagerCLIVersion), - (Get-AliyunCLIVersion), + (Get-AWSSessionManagerCLIVersion) +) + +if ($os.IsLessThanMonterey) { + $toolsList += @( + (Get-AliyunCLIVersion) + ) +} + +$toolsList += @( (Get-XcodeCommandLineToolsVersion), (Get-SwigVersion), (Get-BicepVersion) @@ -178,9 +202,13 @@ if( -not $os.IsHighSierra) { (Get-GHCupVersion), (Get-GHCVersion), (Get-CabalVersion), - (Get-StackVersion), - (Get-SwiftFormatVersion) + (Get-StackVersion) ) + if($os.IsLessThanMonterey) { + $toolsList += @( + (Get-SwiftFormatVersion) + ) + } } $markdown += New-MDList -Style Unordered -Lines ($toolsList | Sort-Object) diff --git a/images/macos/software-report/SoftwareReport.Xcode.psm1 b/images/macos/software-report/SoftwareReport.Xcode.psm1 index b679d0ed0..fba70458d 100644 --- a/images/macos/software-report/SoftwareReport.Xcode.psm1 +++ b/images/macos/software-report/SoftwareReport.Xcode.psm1 @@ -238,10 +238,13 @@ function Build-XcodeSupportToolsSection { $nomadCLI = [regex]::matches($nomadOutput, "(\d+.){2}\d+").Value $nomadShenzhenOutput = Run-Command "ipa -version" $nomadShenzhen = [regex]::matches($nomadShenzhenOutput, "(\d+.){2}\d+").Value - $toolList += @( - "Nomad CLI $nomadCLI", - "Nomad shenzhen CLI $nomadShenzhen" - ) + + if ($os.IsLessThanMonterey) { + $toolList += @( + "Nomad CLI $nomadCLI", + "Nomad shenzhen CLI $nomadShenzhen" + ) + } if ($os.IsLessThanBigSur) { $xctool = Run-Command "xctool --version" diff --git a/images/macos/templates/macOS-12.json b/images/macos/templates/macOS-12.json new file mode 100644 index 000000000..3b6ae1835 --- /dev/null +++ b/images/macos/templates/macOS-12.json @@ -0,0 +1,227 @@ +{ + "variables": { + "vcenter_server": null, + "vcenter_username": null, + "vcenter_password": null, + "vcenter_datacenter": null, + "cluster_or_esxi_host": null, + "esxi_datastore": null, + "build_id": null, + "baseimage_name": null, + "output_folder": null, + "vm_username": null, + "vm_password": null, + "xcode_install_user": null, + "xcode_install_password": null, + "image_os": "macos12" + }, + "builders": [ + { + "type": "vsphere-clone", + "vcenter_server": "{{user `vcenter_server`}}", + "username": "{{user `vcenter_username`}}", + "password": "{{user `vcenter_password`}}", + "insecure_connection": true, + "datacenter": "{{ user `vcenter_datacenter` }}", + "template": "{{ user `baseimage_name` }}", + "folder": "{{user `output_folder` }}", + "host": "{{user `cluster_or_esxi_host`}}", + "datastore": "{{user `esxi_datastore`}}", + "vm_name": "{{user `build_id`}}", + "ssh_username": "{{user `vm_username`}}", + "ssh_password": "{{user `vm_password`}}", + "CPUs": "10", + "RAM": "24576", + "NestedHV": "true", + "shutdown_timeout": "15m" + } + ], + "provisioners": [ + { + "type": "shell", + "inline": "mkdir ~/image-generation" + }, + { + "type": "file", + "source": "./provision/assets", + "destination": "~/image-generation/" + }, + { + "type": "file", + "source": "./tests", + "destination": "~/image-generation/" + }, + { + "type": "file", + "source": "./software-report", + "destination": "~/image-generation/" + }, + { + "type": "file", + "source": "./helpers", + "destination": "~/image-generation/" + }, + { + "type": "file", + "source": "./provision/configuration/add-certificate.swift", + "destination": "~/image-generation/add-certificate.swift" + }, + { + "type": "file", + "source": "./provision/configuration/environment/bashrc", + "destination": "~/.bashrc" + }, + { + "type": "file", + "source": "./provision/configuration/environment/bashprofile", + "destination": "~/.bash_profile" + }, + { + "type": "file", + "source": "./provision/utils", + "destination": "~/" + }, + { + "type": "file", + "source": "./provision/bootstrap-provisioner", + "destination": "~/bootstrap" + }, + { + "type": "file", + "source": "./toolsets/toolset-12.json", + "destination": "~/image-generation/toolset.json" + }, + { + "type": "shell", + "execute_command": "chmod +x {{ .Path }}; sudo {{ .Vars }} {{ .Path }}", + "scripts": [ + "./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={{user `vm_password`}}", + "USERNAME={{user `vm_username`}}" + ] + }, + { + "type": "shell", + "execute_command": "chmod +x {{ .Path }}; {{ .Vars }} {{ .Path }}", + "scripts": [ + "./provision/configuration/preimagedata.sh", + "./provision/configuration/configure-ssh.sh", + "./provision/core/xcode-clt.sh", + "./provision/configuration/configure-machine.sh" + ], + "environment_vars": [ + "IMAGE_VERSION={{user `build_id`}}", + "IMAGE_OS={{user `image_os`}}" + ] + }, + { + "type": "shell", + "execute_command": "chmod +x {{ .Path }}; sudo {{ .Vars }} {{ .Path }}", + "script": "./provision/core/reboot.sh", + "expect_disconnect": true + }, + { + "type": "shell", + "execute_command": "chmod +x {{ .Path }}; {{ .Vars }} {{ .Path }}", + "pause_before": "30s", + "scripts": [ + "./provision/core/homebrew.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" + ] + }, + { + "type": "shell", + "execute_command": "chmod +x {{ .Path }}; {{ .Vars }} pwsh -f {{ .Path }}", + "script": "./provision/core/xcode.ps1", + "environment_vars": [ + "XCODE_INSTALL_USER={{user `xcode_install_user`}}", + "XCODE_INSTALL_PASSWORD={{user `xcode_install_password`}}" + ] + }, + { + "type": "shell", + "execute_command": "chmod +x {{ .Path }}; sudo {{ .Vars }} {{ .Path }}", + "script": "./provision/core/reboot.sh", + "expect_disconnect": true + }, + { + "type": "shell", + "execute_command": "chmod +x {{ .Path }}; {{ .Vars }} {{ .Path }}", + "scripts": [ + "./provision/core/commonutils.sh", + "./provision/core/golang.sh", + "./provision/core/swiftlint.sh", + "./provision/core/openjdk.sh", + "./provision/core/aws.sh", + "./provision/core/rust.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/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" + ] + }, + { + "type": "shell", + "execute_command": "chmod +x {{ .Path }}; {{ .Vars }} pwsh -f {{ .Path }}", + "scripts": "./provision/core/toolset.ps1" + }, + { + "type": "shell", + "execute_command": "ruby {{ .Path }}", + "scripts": [ + "./provision/core/delete-duplicate-sims.rb" + ] + }, + { + "type": "shell", + "inline": [ + "pwsh -File \"$HOME/image-generation/software-report/SoftwareReport.Generator.ps1\" -OutputDirectory \"$HOME/image-generation/output/software-report\" -ImageName {{user `build_id`}}", + "pwsh -File \"$HOME/image-generation/tests/RunAll-Tests.ps1\"" + ] + }, + { + "type": "file", + "direction": "download", + "source": "~/image-generation/output/*", + "destination": "../image-output/" + }, + { + "type": "shell", + "execute_command": "chmod +x {{ .Path }}; {{ .Vars }} {{ .Path }}", + "scripts": [ + "./provision/configuration/configure-hostname.sh", + "./provision/configuration/finalize-vm.sh" + ] + } + ] +} diff --git a/images/macos/tests/Android.Tests.ps1 b/images/macos/tests/Android.Tests.ps1 index 2550d5492..0edfe2e7c 100644 --- a/images/macos/tests/Android.Tests.ps1 +++ b/images/macos/tests/Android.Tests.ps1 @@ -89,7 +89,7 @@ Describe "Android" { } } - It "HAXM is installed" -Skip:($os.IsBigSur) { + It "HAXM is installed" -Skip:($os.IsHigherThanCatalina) { "kextstat | grep 'com.intel.kext.intelhaxm'" | Should -ReturnZeroExitCode } } \ No newline at end of file diff --git a/images/macos/tests/BasicTools.Tests.ps1 b/images/macos/tests/BasicTools.Tests.ps1 index 7696845d2..8fdd2bdb2 100644 --- a/images/macos/tests/BasicTools.Tests.ps1 +++ b/images/macos/tests/BasicTools.Tests.ps1 @@ -6,7 +6,7 @@ Describe "Azure CLI" { } } -Describe "Carthage" { +Describe "Carthage" -Skip:($os.IsMonterey) { It "Carthage" { "carthage version" | Should -ReturnZeroExitCode } @@ -24,20 +24,20 @@ Describe "Subversion" { } } -Describe "SwiftFormat" { +Describe "SwiftFormat" -Skip:($os.IsMonterey) { It "SwiftFormat" { "swiftformat --version" | Should -ReturnZeroExitCode } } -Describe "GnuPG" { +Describe "GnuPG" -Skip:($os.IsMonterey) { It "GnuPG" { "gpg --version" | Should -ReturnZeroExitCode } } -Describe "Clang/LLVM" { +Describe "Clang/LLVM" -Skip:($os.IsMonterey) { It "Clang/LLVM is installed" { "$(brew --prefix llvm)/bin/clang --version" | Should -ReturnZeroExitCode } @@ -61,7 +61,7 @@ Describe "Perl" { } } -Describe "Helm" { +Describe "Helm" -Skip:($os.IsMonterey) { It "Helm" { "helm version --short" | Should -ReturnZeroExitCode } @@ -109,7 +109,7 @@ Describe "bazel" { } } -Describe "Aliyun CLI" { +Describe "Aliyun CLI" -Skip:($os.IsMonterey) { It "Aliyun CLI" { "aliyun --version" | Should -ReturnZeroExitCode } @@ -139,25 +139,25 @@ Describe "wget" { } } -Describe "vagrant" -Skip:($os.IsBigSur) { +Describe "vagrant" -Skip:($os.IsHigherThanCatalina) { It "vagrant" { "vagrant --version" | Should -ReturnZeroExitCode } } -Describe "virtualbox" -Skip:($os.IsBigSur) { +Describe "virtualbox" -Skip:($os.IsHigherThanCatalina) { It "virtualbox" { "vboxmanage -v" | Should -ReturnZeroExitCode } } -Describe "xctool" -Skip:($os.IsBigSur) { +Describe "xctool" -Skip:($os.IsHigherThanCatalina) { It "xctool" { "xctool --version" | Should -ReturnZeroExitCode } } -Describe "R" -Skip:($os.IsBigSur) { +Describe "R" -Skip:($os.IsHigherThanCatalina) { It "R" { "R --version" | Should -ReturnZeroExitCode } diff --git a/images/macos/tests/Common.Tests.ps1 b/images/macos/tests/Common.Tests.ps1 index 382605e9b..5b3c4730b 100644 --- a/images/macos/tests/Common.Tests.ps1 +++ b/images/macos/tests/Common.Tests.ps1 @@ -9,7 +9,7 @@ Describe ".NET" { } } -Describe "GCC" -Skip:($os.IsHighSierra) { +Describe "GCC" -Skip:($os.IsHighSierra -or $os.IsMonterey) { $testCases = Get-ToolsetValue -KeyPath gcc.versions | ForEach-Object { @{Version = $_} } It "GCC " -TestCases $testCases { @@ -33,7 +33,7 @@ Describe "GCC" -Skip:($os.IsHighSierra) { } } -Describe "vcpkg" -Skip:($os.IsHighSierra -or $os.IsMojave) { +Describe "vcpkg" -Skip:($os.IsHighSierra -or $os.IsMojave -or $os.IsMonterey) { It "vcpkg" { "vcpkg version" | Should -ReturnZeroExitCode } @@ -58,7 +58,7 @@ Describe "AzCopy" { } } -Describe "Miniconda" { +Describe "Miniconda" -Skip:($os.IsMonterey) { It "Conda" { Get-EnvironmentVariable "CONDA" | Should -Not -BeNullOrEmpty $condaBinPath = Join-Path $env:CONDA "bin" "conda" diff --git a/images/macos/tests/PHP.Tests.ps1 b/images/macos/tests/PHP.Tests.ps1 index a7c9f3806..937c87464 100644 --- a/images/macos/tests/PHP.Tests.ps1 +++ b/images/macos/tests/PHP.Tests.ps1 @@ -1,4 +1,6 @@ -Describe "PHP" { +$os = Get-OSVersion + +Describe "PHP" -Skip:($os.IsMonterey) { Context "PHP" { It "PHP Path" { Get-WhichTool "php" | Should -Not -BeLike "/usr/bin/php*" diff --git a/images/macos/tests/RubyGem.Tests.ps1 b/images/macos/tests/RubyGem.Tests.ps1 index 0dee6064c..d8f43e7c3 100644 --- a/images/macos/tests/RubyGem.Tests.ps1 +++ b/images/macos/tests/RubyGem.Tests.ps1 @@ -1,3 +1,5 @@ +$os = Get-OSVersion + Describe "RubyGems" { $gemTestCases = Get-ToolsetValue -KeyPath "ruby.rubygems" | ForEach-Object { @{gemName = $_} @@ -17,7 +19,7 @@ Describe "Bundler" { } } -Describe "Nomad shenzhen CLI" { +Describe "Nomad shenzhen CLI" -Skip:($os.IsMonterey) { It "Nomad shenzhen CLI" { "ipa --version" | Should -ReturnZeroExitCode } diff --git a/images/macos/tests/System.Tests.ps1 b/images/macos/tests/System.Tests.ps1 index 0aa40c395..e2b243723 100644 --- a/images/macos/tests/System.Tests.ps1 +++ b/images/macos/tests/System.Tests.ps1 @@ -17,7 +17,7 @@ Describe "Certificate" { } } -Describe "Audio device" -Skip:($os.IsHighSierra) { +Describe "Audio device" -Skip:($os.IsHighSierra -or $os.IsMonterey) { It "Sox is installed" { "sox --version" | Should -ReturnZeroExitCode } @@ -26,7 +26,7 @@ Describe "Audio device" -Skip:($os.IsHighSierra) { "SwitchAudioSource -c" | Should -ReturnZeroExitCode } - It "Audio channel Soundflower (2ch)" -Skip:($os.IsBigSur) { + It "Audio channel Soundflower (2ch)" -Skip:($os.IsHigherThanCatalina) { SwitchAudioSource -c | Should -BeLikeExactly "Soundflower (2ch)" } diff --git a/images/macos/tests/XamarinNDK.Tests.ps1 b/images/macos/tests/XamarinNDK.Tests.ps1 index 62d45c377..05e87af52 100644 --- a/images/macos/tests/XamarinNDK.Tests.ps1 +++ b/images/macos/tests/XamarinNDK.Tests.ps1 @@ -11,7 +11,7 @@ Describe "Xamarin NDK" { $ANDROID_SDK_DIR = Join-Path $env:HOME "Library" "Android" "sdk" } - Context "Xamarin NDK toolchains" -Skip:($os.IsBigSur) { + Context "Xamarin NDK toolchains" -Skip:($os.IsHigherThanCatalina) { $testCases = $androidNdkToolchains | ForEach-Object { @{AndroidNdkToolchain = $_} } It "" -TestCases $testCases { @@ -22,7 +22,7 @@ Describe "Xamarin NDK" { } } - Context "Xamarin Legacy NDK versions" -Skip:($os.IsBigSur) { + Context "Xamarin Legacy NDK versions" -Skip:($os.IsHigherThanCatalina) { It "Android NDK version r18b is installed" { $ndk18BundlePath = Join-Path $ANDROID_SDK_DIR "ndk" "18.1.5063045" "source.properties" $rawContent = Get-Content $ndk18BundlePath -Raw diff --git a/images/macos/toolsets/toolset-12.json b/images/macos/toolsets/toolset-12.json new file mode 100644 index 000000000..9025ba010 --- /dev/null +++ b/images/macos/toolsets/toolset-12.json @@ -0,0 +1,166 @@ +{ + "xcode": { + "default": "13.0", + "versions": [ + { "link": "13.0", "version": "13.0.0"} + ] + }, + "xamarin": { + "vsmac": "latest", + "mono-versions": [ + "6.12.0.125" + ], + "ios-versions": [ + "14.20.0.24" + ], + "mac-versions": [ + "7.14.0.24" + ], + "android-versions": [ + "11.3.0.4" + ], + "bundle-default": "6_12_9", + "bundles": [ + { + "symlink": "6_12_9", + "mono":"6.12", + "ios": "14.20", + "mac": "7.14", + "android": "11.3" + } + ] + }, + "java": { + "default": "8", + "versions": [ + "8", "11" + ] + }, + "android": { + "platform_min_version": "27", + "build_tools_min_version": "27.0.0", + "extra-list": [ + "android;m2repository", "google;m2repository", "google;google_play_services", "intel;Hardware_Accelerated_Execution_Manager" + ], + "addon-list": [], + "additional-tools": [ + "cmake;3.18.1" + ], + "ndk": { + "default": "21", + "versions": [ + "21", "22", "23" + ] + } + }, + "powershellModules": [ + { "name": "Az" }, + { "name": "MarkdownPS" }, + { "name": "Pester" }, + { "name": "PSScriptAnalyzer" } + ], + "npm": { + "global_packages": [] + }, + "brew": { + "common_packages": [ + "ant", + "aria2", + "azure-cli", + "bazelisk", + "cmake", + "gh", + "gnu-tar", + "kotlin", + "libpq", + "p7zip", + "packer", + "perl", + "sbt", + "subversion", + "swig", + "zstd", + "gmp" + ], + "cask_packages": [ + "julia" + ] + }, + "toolcache": [ + { + "name": "Python", + "url" : "https://raw.githubusercontent.com/actions/python-versions/main/versions-manifest.json", + "arch": "x64", + "platform" : "darwin", + "versions": [ + "3.7.*", + "3.8.*", + "3.9.*" + ] + }, + { + "name": "PyPy", + "arch": "x64", + "platform" : "darwin", + "versions": [ + "2.7", + "3.7" + ] + }, + { + "name": "Node", + "url" : "https://raw.githubusercontent.com/actions/node-versions/main/versions-manifest.json", + "platform" : "darwin", + "arch": "x64", + "versions": [ + "10.*", + "12.*", + "14.*" + ] + }, + { + "name": "Go", + "url" : "https://raw.githubusercontent.com/actions/go-versions/main/versions-manifest.json", + "arch": "x64", + "platform" : "darwin", + "versions": [ + "1.15.*", + "1.16.*", + "1.17.*" + ] + }, + { + "name": "Ruby", + "arch": "x64", + "versions": [ + "2.7.*", + "3.0.*" + ] + } + ], + "pipx": [ + { + "package": "yamllint", + "cmd": "yamllint --version" + } + ], + "dotnet": { + "versions": [ + "3.1", + "5.0" + ] + }, + "ruby": { + "default": "3.0", + "rubygems": [ + "xcode-install", + "cocoapods", + "xcpretty", + "bundler", + "fastlane" + ] + }, + "go": { + "default": "1.17" + } +}