From 60963fb52e25c7e731d0c7a16290c03bdf3feb15 Mon Sep 17 00:00:00 2001 From: Alexey-Ayupov <116575425+Alexey-Ayupov@users.noreply.github.com> Date: Thu, 5 Oct 2023 12:42:16 +0200 Subject: [PATCH] [macOS] Add java to the macOS 13 arm64 (#8395) --- images/macos/provision/core/openjdk.sh | 47 ++++++++++++++----- .../SoftwareReport.Generator.ps1 | 4 +- .../templates/macOS-13.arm64.anka.pkr.hcl | 1 + images/macos/tests/Java.Tests.ps1 | 25 ++++++---- images/macos/tests/Xamarin.Tests.ps1 | 2 +- images/macos/toolsets/toolset-13.json | 10 +++- 6 files changed, 65 insertions(+), 24 deletions(-) diff --git a/images/macos/provision/core/openjdk.sh b/images/macos/provision/core/openjdk.sh index 2803cb179..cc9208e72 100755 --- a/images/macos/provision/core/openjdk.sh +++ b/images/macos/provision/core/openjdk.sh @@ -5,15 +5,24 @@ createEnvironmentVariable() { local JAVA_VERSION=$1 local DEFAULT=$2 - INSTALL_PATH_PATTERN=$(echo ${AGENT_TOOLSDIRECTORY}/Java_Temurin-Hotspot_jdk/${JAVA_VERSION}*/x64/Contents/Home/) + if [[ $arch == "arm64" ]]; then + INSTALL_PATH_PATTERN=$(echo ${AGENT_TOOLSDIRECTORY}/Java_Temurin-Hotspot_jdk/${JAVA_VERSION}*/arm64/Contents/Home/) + else + INSTALL_PATH_PATTERN=$(echo ${AGENT_TOOLSDIRECTORY}/Java_Temurin-Hotspot_jdk/${JAVA_VERSION}*/x64/Contents/Home/) + fi if [[ ${DEFAULT} == "True" ]]; then echo "Setting up JAVA_HOME variable to ${INSTALL_PATH_PATTERN}" echo "export JAVA_HOME=${INSTALL_PATH_PATTERN}" >> "${HOME}/.bashrc" fi - echo "Setting up JAVA_HOME_${JAVA_VERSION}_X64 variable to ${INSTALL_PATH_PATTERN}" - echo "export JAVA_HOME_${JAVA_VERSION}_X64=${INSTALL_PATH_PATTERN}" >> "${HOME}/.bashrc" + if [[ $arch == "arm64" ]]; then + echo "Setting up JAVA_HOME_${JAVA_VERSION}_arm64 variable to ${INSTALL_PATH_PATTERN}" + echo "export JAVA_HOME_${JAVA_VERSION}_arm64=${INSTALL_PATH_PATTERN}" >> "${HOME}/.bashrc" + else + echo "Setting up JAVA_HOME_${JAVA_VERSION}_X64 variable to ${INSTALL_PATH_PATTERN}" + echo "export JAVA_HOME_${JAVA_VERSION}_X64=${INSTALL_PATH_PATTERN}" >> "${HOME}/.bashrc" + fi } installOpenJDK() { @@ -22,36 +31,52 @@ installOpenJDK() { # Get link for Java binaries and Java version assetUrl=$(curl -fsSL "https://api.adoptium.net/v3/assets/latest/${JAVA_VERSION}/hotspot") - asset=$(echo ${assetUrl} | jq -r '.[] | select(.binary.os=="mac" and .binary.image_type=="jdk" and .binary.architecture=="x64")') + if [[ $arch == "arm64" ]]; then + asset=$(echo ${assetUrl} | jq -r '.[] | select(.binary.os=="mac" and .binary.image_type=="jdk" and .binary.architecture=="aarch64")') + else + asset=$(echo ${assetUrl} | jq -r '.[] | select(.binary.os=="mac" and .binary.image_type=="jdk" and .binary.architecture=="x64")') + fi + archivePath=$(echo ${asset} | jq -r '.binary.package.link') fullVersion=$(echo ${asset} | jq -r '.version.semver' | tr '+' '-') JAVA_TOOLCACHE_PATH=${AGENT_TOOLSDIRECTORY}/Java_Temurin-Hotspot_jdk - javaToolcacheVersionPath=$JAVA_TOOLCACHE_PATH/${fullVersion} - javaToolcacheVersionArchPath=${javaToolcacheVersionPath}/x64 + + if [[ $arch == "arm64" ]]; then + javaToolcacheVersionArchPath=${javaToolcacheVersionPath}/arm64 + else + javaToolcacheVersionArchPath=${javaToolcacheVersionPath}/x64 + fi # Download and extract Java binaries download_with_retries ${archivePath} /tmp OpenJDK-${fullVersion}.tar.gz - + echo "Creating ${javaToolcacheVersionArchPath} directory" mkdir -p ${javaToolcacheVersionArchPath} tar -xf /tmp/OpenJDK-${fullVersion}.tar.gz -C ${javaToolcacheVersionArchPath} --strip-components=1 + # Create complete file - touch ${javaToolcacheVersionPath}/x64.complete + if [[ $arch == "arm64" ]]; then + touch ${javaToolcacheVersionPath}/arm64.complete + else + touch ${javaToolcacheVersionPath}/x64.complete + fi # Create a symlink to '/Library/Java/JavaVirtualMachines' # so '/usr/libexec/java_home' will be able to find Java sudo ln -sf ${javaToolcacheVersionArchPath} /Library/Java/JavaVirtualMachines/Temurin-Hotspot-${JAVA_VERSION}.jdk } -defaultVersion=$(get_toolset_value '.java.default') -jdkVersionsToInstall=($(get_toolset_value ".java.versions[]")) +arch=$(get_arch) +echo $arch +defaultVersion=$(get_toolset_value '.java.'$arch'.default') +jdkVersionsToInstall=($(get_toolset_value ".java.${arch}.versions[]")) for jdkVersionToInstall in ${jdkVersionsToInstall[@]}; do installOpenJDK ${jdkVersionToInstall} - + if [[ ${jdkVersionToInstall} == ${defaultVersion} ]] then createEnvironmentVariable ${jdkVersionToInstall} True diff --git a/images/macos/software-report/SoftwareReport.Generator.ps1 b/images/macos/software-report/SoftwareReport.Generator.ps1 index 479da6641..428f9be74 100644 --- a/images/macos/software-report/SoftwareReport.Generator.ps1 +++ b/images/macos/software-report/SoftwareReport.Generator.ps1 @@ -100,9 +100,9 @@ if ((-not $os.IsVentura) -and (-not $os.IsVenturaArm64)) { # Project Management $projectManagement = $installedSoftware.AddHeader("Project Management") $projectManagement.AddToolVersion("Apache Ant", $(Get-ApacheAntVersion)) +$projectManagement.AddToolVersion("Apache Maven", $(Get-MavenVersion)) +$projectManagement.AddToolVersion("Gradle", $(Get-GradleVersion)) if ((-not $os.IsVentura) -and (-not $os.IsVenturaArm64)) { - $projectManagement.AddToolVersion("Apache Maven", $(Get-MavenVersion)) - $projectManagement.AddToolVersion("Gradle", $(Get-GradleVersion)) $projectManagement.AddToolVersion("Sbt", $(Get-SbtVersion)) } diff --git a/images/macos/templates/macOS-13.arm64.anka.pkr.hcl b/images/macos/templates/macOS-13.arm64.anka.pkr.hcl index 78d7450e2..d022109df 100644 --- a/images/macos/templates/macOS-13.arm64.anka.pkr.hcl +++ b/images/macos/templates/macOS-13.arm64.anka.pkr.hcl @@ -195,6 +195,7 @@ build { provisioner "shell" { scripts = [ "./provision/core/llvm.sh", + "./provision/core/openjdk.sh", "./provision/core/rust.sh", "./provision/core/gcc.sh", "./provision/core/cocoapods.sh", diff --git a/images/macos/tests/Java.Tests.ps1 b/images/macos/tests/Java.Tests.ps1 index 70e06599f..ef73eb96d 100644 --- a/images/macos/tests/Java.Tests.ps1 +++ b/images/macos/tests/Java.Tests.ps1 @@ -2,6 +2,7 @@ Import-Module "$PSScriptRoot/../helpers/Common.Helpers.psm1" Import-Module "$PSScriptRoot/../helpers/Tests.Helpers.psm1" -DisableNameChecking $os = Get-OSVersion +$arch = Get-Architecture function Get-NativeVersionFormat { param($Version) @@ -11,7 +12,7 @@ function Get-NativeVersionFormat { return $Version } -Describe "Java" -Skip:($os.IsVenturaArm64) { +Describe "Java" { BeforeAll { function Validate-JavaVersion { param($JavaCommand, $ExpectedVersion) @@ -26,10 +27,14 @@ Describe "Java" -Skip:($os.IsVenturaArm64) { } $toolsetJava = Get-ToolsetValue "java" - $defaultVersion = $toolsetJava.default - $jdkVersions = $toolsetJava.versions + $defaultVersion = $toolsetJava.$arch.default + $jdkVersions = $toolsetJava.$arch.versions - $testCases = $jdkVersions | ForEach-Object { @{ Title = $_; Version = (Get-NativeVersionFormat $_); EnvVariable = "JAVA_HOME_${_}_X64" } } + if ($os.IsVenturaArm64) { + $testCases = $jdkVersions | ForEach-Object { @{ Title = $_; Version = (Get-NativeVersionFormat $_); EnvVariable = "JAVA_HOME_${_}_arm64" } } + } else { + $testCases = $jdkVersions | ForEach-Object { @{ Title = $_; Version = (Get-NativeVersionFormat $_); EnvVariable = "JAVA_HOME_${_}_X64" } } + } $testCases += @{ Title = "Default"; Version = (Get-NativeVersionFormat $defaultVersion); EnvVariable = "JAVA_HOME" } $testCases | ForEach-Object { @@ -59,16 +64,20 @@ Describe "Java" -Skip:($os.IsVenturaArm64) { } } } - + Context "Gradle" { Describe "Gradle" { It "Gradle is installed" { "gradle --version" | Should -ReturnZeroExitCode } - - It "Gradle is installed to /usr/local/bin" { + + It "Gradle is installed to /usr/local/bin" -Skip:($os.IsVenturaArm64) { (Get-Command "gradle").Path | Should -BeExactly "/usr/local/bin/gradle" } + + It "Gradle is installed to /opt/homebrew/bin/gradle" -Skip:($os.IsVentura) { + (Get-Command "gradle").Path | Should -BeExactly "/opt/homebrew/bin/gradle" + } } } -} \ No newline at end of file +} diff --git a/images/macos/tests/Xamarin.Tests.ps1 b/images/macos/tests/Xamarin.Tests.ps1 index 789aa656d..5e00ff48a 100644 --- a/images/macos/tests/Xamarin.Tests.ps1 +++ b/images/macos/tests/Xamarin.Tests.ps1 @@ -2,7 +2,7 @@ Import-Module "$PSScriptRoot/../helpers/Common.Helpers.psm1" Import-Module "$PSScriptRoot/../helpers/Tests.Helpers.psm1" -DisableNameChecking $os = Get-OSVersion -if ($os.IsVentura -or $os.IsVenturaArm64) { +if ($os.IsVentura -or $os.IsVenturaArm64) { $MONO_VERSIONS = @(Get-ToolsetValue "mono.framework.version") $XAMARIN_IOS_VERSIONS = @() $XAMARIN_MAC_VERSIONS = @() diff --git a/images/macos/toolsets/toolset-13.json b/images/macos/toolsets/toolset-13.json index c0b80dd82..69eac0bd6 100644 --- a/images/macos/toolsets/toolset-13.json +++ b/images/macos/toolsets/toolset-13.json @@ -19,8 +19,14 @@ } }, "java": { - "default": "17", - "versions": [ "8", "11", "17" ] + "x64": { + "default": "17", + "versions": [ "8", "11", "17" ] + }, + "arm64": { + "default": "17", + "versions": [ "11", "17" ] + } }, "android": { "platform_min_version": "27",