mirror of
https://github.com/actions/runner-images.git
synced 2025-12-19 00:06:57 +00:00
[MacOS] Add Adoptium to Java installer (#4116)
This commit is contained in:
87
images/macos/provision/core/openjdk.sh
Normal file → Executable file
87
images/macos/provision/core/openjdk.sh
Normal file → Executable file
@@ -1,53 +1,90 @@
|
|||||||
#!/bin/bash -e -o pipefail
|
#!/bin/bash -e -o pipefail
|
||||||
source ~/utils/utils.sh
|
source ~/utils/utils.sh
|
||||||
|
|
||||||
JAVA_TOOLCACHE_PATH=$AGENT_TOOLSDIRECTORY/Java_Adopt_jdk
|
|
||||||
|
|
||||||
createEnvironmentVariable() {
|
createEnvironmentVariable() {
|
||||||
local JAVA_VERSION=$1
|
local JAVA_VERSION=$1
|
||||||
local JAVA_PATH=$2
|
local VENDOR_NAME=$2
|
||||||
|
local DEFAULT=$3
|
||||||
|
|
||||||
local JAVA_HOME_PATH=$JAVA_PATH/Contents/Home
|
INSTALL_PATH_PATTERN=$(echo ${AGENT_TOOLSDIRECTORY}/Java_${VENDOR_NAME}_jdk/${JAVA_VERSION}*/x64/Contents/Home/)
|
||||||
if [[ $JAVA_VERSION == $JAVA_DEFAULT ]]; then
|
|
||||||
echo "export JAVA_HOME=${JAVA_HOME_PATH}" >> "${HOME}/.bashrc"
|
if [[ ${DEFAULT} == "True" ]]; then
|
||||||
|
echo "Setting up JAVA_HOME variable to ${INSTALL_PATH_PATTERN}"
|
||||||
|
echo "export JAVA_HOME=${INSTALL_PATH_PATTERN}" >> "${HOME}/.bashrc"
|
||||||
fi
|
fi
|
||||||
echo "export JAVA_HOME_${JAVA_VERSION}_X64=${JAVA_HOME_PATH}" >> "${HOME}/.bashrc"
|
|
||||||
|
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"
|
||||||
}
|
}
|
||||||
|
|
||||||
installJavaFromAdoptOpenJDK() {
|
installOpenJDK() {
|
||||||
local JAVA_VERSION=$1
|
local JAVA_VERSION=$1
|
||||||
|
local VENDOR_NAME=$2
|
||||||
|
|
||||||
# Get link for Java binaries and Java version
|
# Get link for Java binaries and Java version
|
||||||
|
if [[ ${VENDOR_NAME} == "Temurin-Hotspot" ]]; then
|
||||||
|
assetUrl=$(curl -s "https://api.adoptium.net/v3/assets/latest/${JAVA_VERSION}/hotspot")
|
||||||
|
elif [[ ${VENDOR_NAME} == "Adopt" ]]; then
|
||||||
assetUrl=$(curl -s "https://api.adoptopenjdk.net/v3/assets/latest/${JAVA_VERSION}/hotspot")
|
assetUrl=$(curl -s "https://api.adoptopenjdk.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")')
|
else
|
||||||
archivePath=$(echo $asset | jq -r '.binary.package.link')
|
echo "${VENDOR_NAME} is invalid, valid names are: Temurin-Hotspot and Adopt"
|
||||||
fullVersion=$(echo $asset | jq -r '.version.semver' | tr '+' '-')
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
javaToolcacheVersionPath=$JAVA_TOOLCACHE_PATH/$fullVersion
|
asset=$(echo ${assetUrl} | jq -r '.[] | select(.binary.os=="mac" and .binary.image_type=="jdk" and .binary.architecture=="x64")')
|
||||||
javaToolcacheVersionArchPath=$javaToolcacheVersionPath/x64
|
archivePath=$(echo ${asset} | jq -r '.binary.package.link')
|
||||||
|
fullVersion=$(echo ${asset} | jq -r '.version.semver' | tr '+' '-')
|
||||||
|
|
||||||
|
JAVA_TOOLCACHE_PATH=${AGENT_TOOLSDIRECTORY}/Java_${VENDOR_NAME}_jdk
|
||||||
|
|
||||||
|
javaToolcacheVersionPath=$JAVA_TOOLCACHE_PATH/${fullVersion}
|
||||||
|
javaToolcacheVersionArchPath=${javaToolcacheVersionPath}/x64
|
||||||
|
|
||||||
# Download and extract Java binaries
|
# Download and extract Java binaries
|
||||||
download_with_retries $archivePath /tmp OpenJDK${JAVA_VERSION}.tar.gz
|
download_with_retries ${archivePath} /tmp OpenJDK-${VENDOR_NAME}-${fullVersion}.tar.gz
|
||||||
mkdir -p $javaToolcacheVersionArchPath
|
|
||||||
tar -xzf /tmp/OpenJDK${JAVA_VERSION}.tar.gz -C $javaToolcacheVersionArchPath --strip-components=1
|
|
||||||
# Create complete file
|
|
||||||
touch $javaToolcacheVersionPath/x64.complete
|
|
||||||
|
|
||||||
createEnvironmentVariable $JAVA_VERSION $javaToolcacheVersionArchPath
|
echo "Creating ${javaToolcacheVersionArchPath} directory"
|
||||||
|
mkdir -p ${javaToolcacheVersionArchPath}
|
||||||
|
|
||||||
|
tar -xf /tmp/OpenJDK-${VENDOR_NAME}-${fullVersion}.tar.gz -C ${javaToolcacheVersionArchPath} --strip-components=1
|
||||||
|
# Create complete file
|
||||||
|
touch ${javaToolcacheVersionPath}/x64.complete
|
||||||
|
|
||||||
# Create a symlink to '/Library/Java/JavaVirtualMachines'
|
# Create a symlink to '/Library/Java/JavaVirtualMachines'
|
||||||
# so '/usr/libexec/java_home' will be able to find Java
|
# so '/usr/libexec/java_home' will be able to find Java
|
||||||
sudo ln -sf $javaToolcacheVersionArchPath /Library/Java/JavaVirtualMachines/adoptopenjdk-${JAVA_VERSION}.jdk
|
sudo ln -sf ${javaToolcacheVersionArchPath} /Library/Java/JavaVirtualMachines/${VENDOR_NAME}-${JAVA_VERSION}.jdk
|
||||||
}
|
}
|
||||||
|
|
||||||
JAVA_VERSIONS_LIST=($(get_toolset_value '.java.versions | .[]'))
|
defaultVersion=$(get_toolset_value '.java.default')
|
||||||
JAVA_DEFAULT=$(get_toolset_value '.java.default')
|
defaultVendor=$(get_toolset_value '.java.default_vendor')
|
||||||
|
jdkVendors=($(get_toolset_value '.java.vendors[].name'))
|
||||||
|
|
||||||
for JAVA_VERSION in "${JAVA_VERSIONS_LIST[@]}"
|
for jdkVendor in ${jdkVendors[@]}; do
|
||||||
do
|
|
||||||
installJavaFromAdoptOpenJDK $JAVA_VERSION
|
# get vendor-specific versions
|
||||||
|
jdkVersionsToInstall=($(get_toolset_value ".java.vendors[] | select (.name==\"${jdkVendor}\") | .versions[]"))
|
||||||
|
|
||||||
|
for jdkVersionToInstall in ${jdkVersionsToInstall[@]}; do
|
||||||
|
|
||||||
|
installOpenJDK ${jdkVersionToInstall} ${jdkVendor}
|
||||||
|
|
||||||
|
isDefaultVersion=False; [[ ${jdkVersionToInstall} == ${defaultVersion} ]] && isDefaultVersion=True
|
||||||
|
|
||||||
|
if [[ ${jdkVendor} == ${defaultVendor} ]]; then
|
||||||
|
createEnvironmentVariable ${jdkVersionToInstall} ${jdkVendor} ${isDefaultVersion}
|
||||||
|
fi
|
||||||
|
|
||||||
|
done
|
||||||
done
|
done
|
||||||
|
|
||||||
|
# Big Sur or newer does not have these versions of Adopt.
|
||||||
|
# Also hardcode these versions as they only exist for Adopt
|
||||||
|
if is_Less_BigSur; then
|
||||||
|
for adoptVersionToInstall in 12 13 14; do
|
||||||
|
createEnvironmentVariable ${adoptVersionToInstall} "Adopt"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
echo Installing Maven...
|
echo Installing Maven...
|
||||||
brew_smart_install "maven"
|
brew_smart_install "maven"
|
||||||
|
|
||||||
|
|||||||
@@ -12,10 +12,11 @@ function Get-JavaVersions {
|
|||||||
$version = $javaPath.split('/')[5]
|
$version = $javaPath.split('/')[5]
|
||||||
$fullVersion = $version.Replace('-', '+')
|
$fullVersion = $version.Replace('-', '+')
|
||||||
$defaultPostfix = ($javaPath -eq $defaultJavaPath) ? " (default)" : ""
|
$defaultPostfix = ($javaPath -eq $defaultJavaPath) ? " (default)" : ""
|
||||||
|
$vendorName = ($javaPath -like '*Java_Adopt_jdk*') ? "Adopt OpenJDK" : "Eclipse Temurin"
|
||||||
|
|
||||||
[PSCustomObject] @{
|
[PSCustomObject] @{
|
||||||
"Version" = $fullVersion + $defaultPostfix
|
"Version" = $fullVersion + $defaultPostfix
|
||||||
"Vendor" = "Adopt OpenJDK"
|
"Vendor" = $vendorName
|
||||||
"Environment Variable" = $_.Name
|
"Environment Variable" = $_.Name
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -23,11 +23,17 @@ Describe "Java" {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$versionsList = Get-ToolsetValue "java.versions"
|
$toolsetJava = Get-ToolsetValue "java"
|
||||||
$defaultJava = Get-ToolsetValue "java.default"
|
$defaultVersion = $toolsetJava.default
|
||||||
|
$defaultVendor = $toolsetJava.default_vendor
|
||||||
|
$javaVendors = $toolsetJava.vendors
|
||||||
|
|
||||||
$testCases = $versionsList | ForEach-Object { @{ Title = $_; Version = (Get-NativeVersionFormat $_); EnvVariable = "JAVA_HOME_${_}_X64" } }
|
[array]$jdkVersions = ($javaVendors | Where-Object {$_.name -eq $defaultVendor}).versions
|
||||||
$testCases += @{ Title = "Default"; Version = (Get-NativeVersionFormat $defaultJava); EnvVariable = "JAVA_HOME" }
|
[array]$adoptJdkVersions = ($javaVendors | Where-Object {$_.name -eq "Adopt"}).versions
|
||||||
|
|
||||||
|
$adoptCases = $adoptJdkVersions | ForEach-Object { @{Version = $_} }
|
||||||
|
$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 {
|
$testCases | ForEach-Object {
|
||||||
Context $_.Title {
|
Context $_.Title {
|
||||||
@@ -49,6 +55,17 @@ Describe "Java" {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Context "Java Adopt" {
|
||||||
|
Describe "Java Adopt" {
|
||||||
|
It "Java Adopt <Version>" -TestCases $adoptCases {
|
||||||
|
$adoptPath = Join-Path (Get-ChildItem ${env:AGENT_TOOLSDIRECTORY}\Java_Adopt_jdk\${Version}*) "x64\Contents\Home\bin\java"
|
||||||
|
|
||||||
|
$result = Get-CommandResult "`"$adoptPath`" -version"
|
||||||
|
$result.ExitCode | Should -Be 0
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Context "Maven" {
|
Context "Maven" {
|
||||||
Describe "Maven" {
|
Describe "Maven" {
|
||||||
It "Maven" {
|
It "Maven" {
|
||||||
|
|||||||
@@ -197,8 +197,16 @@
|
|||||||
},
|
},
|
||||||
"java": {
|
"java": {
|
||||||
"default": "8",
|
"default": "8",
|
||||||
"versions": [
|
"default_vendor": "Temurin-Hotspot",
|
||||||
"8", "11", "12", "13", "14"
|
"vendors": [
|
||||||
|
{
|
||||||
|
"name": "Temurin-Hotspot",
|
||||||
|
"versions": [ "8", "11" ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Adopt",
|
||||||
|
"versions": [ "8", "11", "12", "13", "14" ]
|
||||||
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"android": {
|
"android": {
|
||||||
|
|||||||
@@ -149,8 +149,16 @@
|
|||||||
},
|
},
|
||||||
"java": {
|
"java": {
|
||||||
"default": "8",
|
"default": "8",
|
||||||
"versions": [
|
"default_vendor": "Temurin-Hotspot",
|
||||||
"8", "11", "12", "13", "14"
|
"vendors": [
|
||||||
|
{
|
||||||
|
"name": "Temurin-Hotspot",
|
||||||
|
"versions": [ "8", "11" ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Adopt",
|
||||||
|
"versions": [ "8", "11", "12", "13", "14" ]
|
||||||
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"android": {
|
"android": {
|
||||||
|
|||||||
@@ -100,8 +100,16 @@
|
|||||||
},
|
},
|
||||||
"java": {
|
"java": {
|
||||||
"default": "8",
|
"default": "8",
|
||||||
"versions": [
|
"default_vendor": "Temurin-Hotspot",
|
||||||
"8", "11"
|
"vendors": [
|
||||||
|
{
|
||||||
|
"name": "Temurin-Hotspot",
|
||||||
|
"versions": [ "8", "11" ]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "Adopt",
|
||||||
|
"versions": [ "8", "11" ]
|
||||||
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"android": {
|
"android": {
|
||||||
|
|||||||
Reference in New Issue
Block a user