mirror of
https://github.com/actions/runner-images.git
synced 2025-12-11 19:46:46 +00:00
135 lines
5.0 KiB
PowerShell
135 lines
5.0 KiB
PowerShell
################################################################################
|
|
## File: Install-JavaTools.ps1
|
|
## Desc: Install various JDKs and java tools
|
|
################################################################################
|
|
|
|
function Set-JavaPath {
|
|
param (
|
|
[string] $Version,
|
|
[string] $Architecture = "x64",
|
|
[switch] $Default
|
|
)
|
|
|
|
$javaPathPattern = Join-Path -Path $env:AGENT_TOOLSDIRECTORY -ChildPath "Java_Adopt_jdk/${Version}*/${Architecture}"
|
|
$javaPath = (Get-Item -Path $javaPathPattern).FullName
|
|
|
|
if ([string]::IsNullOrEmpty($javaPath)) {
|
|
Write-Host "Not found path to Java '${Version}'"
|
|
exit 1
|
|
}
|
|
|
|
Write-Host "Set 'JAVA_HOME_${Version}_X64' environmental variable as $javaPath"
|
|
setx JAVA_HOME_${Version}_X64 $javaPath /M
|
|
|
|
if ($Default)
|
|
{
|
|
$currentPath = Get-MachinePath
|
|
|
|
$pathSegments = $currentPath.Split(';')
|
|
$newPathSegments = @()
|
|
|
|
foreach ($pathSegment in $pathSegments)
|
|
{
|
|
if ($pathSegment -notlike '*java*')
|
|
{
|
|
$newPathSegments += $pathSegment
|
|
}
|
|
}
|
|
|
|
$newPath = [string]::Join(';', $newPathSegments)
|
|
$newPath = $javaPath + '\bin;' + $newPath
|
|
|
|
Write-Host "Add $javaPath\bin to PATH"
|
|
Set-MachinePath -NewPath $newPath
|
|
|
|
Write-Host "Set JAVA_HOME environmental variable as $javaPath"
|
|
setx JAVA_HOME $javaPath /M
|
|
}
|
|
}
|
|
|
|
function Install-JavaFromAdoptOpenJDK {
|
|
param(
|
|
[string] $JDKVersion,
|
|
[string] $Architecture = "x64"
|
|
)
|
|
|
|
# Get Java version from adopt openjdk api
|
|
$assetUrl = Invoke-RestMethod -Uri "https://api.adoptopenjdk.net/v3/assets/latest/${JDKVersion}/hotspot"
|
|
$asset = $assetUrl | Where-Object {
|
|
$_.binary.os -eq "windows" `
|
|
-and $_.binary.architecture -eq $Architecture `
|
|
-and $_.binary.image_type -eq "jdk"
|
|
}
|
|
$downloadUrl = $asset.binary.package.link
|
|
# We have to replace '+' sign in the version to '-' due to the issue with incorrect path in Android builds https://github.com/actions/virtual-environments/issues/3014
|
|
$fullJavaVersion = $asset.version.semver -replace '\+', '-'
|
|
|
|
# Download and extract java binaries to temporary folder
|
|
$archivePath = Start-DownloadWithRetry -Url $downloadUrl -Name $([IO.Path]::GetFileName($downloadUrl))
|
|
$javaTempPath = Join-Path -Path $env:TEMP -ChildPath "Java_$fullJavaVersion"
|
|
Extract-7Zip -Path $archivePath -DestinationPath $javaTempPath
|
|
$javaTempBinariesPath = Join-Path -Path $javaTempPath -ChildPath "\jdk*\"
|
|
|
|
# Create directories in toolcache path
|
|
$javaToolcachePath = Join-Path -Path $env:AGENT_TOOLSDIRECTORY -ChildPath "Java_Adopt_jdk"
|
|
$javaVersionPath = Join-Path -Path $javaToolcachePath -ChildPath $fullJavaVersion
|
|
$javaArchPath = Join-Path -Path $javaVersionPath -ChildPath $Architecture
|
|
|
|
if (-not (Test-Path $javaToolcachePath))
|
|
{
|
|
Write-Host "Creating Adopt openjdk toolcache folder"
|
|
New-Item -ItemType Directory -Path $javaToolcachePath | Out-Null
|
|
}
|
|
|
|
Write-Host "Creating Java '${fullJavaVersion}' folder in '${javaVersionPath}'"
|
|
New-Item -ItemType Directory -Path $javaVersionPath -Force | Out-Null
|
|
|
|
# Complete the installation by moving Java binaries from temporary directory to toolcache and creating the complete file
|
|
Move-Item -Path $javaTempBinariesPath -Destination $javaArchPath
|
|
New-Item -ItemType File -Path $javaVersionPath -Name "$Architecture.complete" | Out-Null
|
|
}
|
|
|
|
$jdkVersions = (Get-ToolsetContent).java.versions
|
|
$defaultVersion = (Get-ToolsetContent).java.default
|
|
|
|
foreach ($jdkVersion in $jdkVersions) {
|
|
Install-JavaFromAdoptOpenJDK -JDKVersion $jdkVersion
|
|
|
|
if ($jdkVersion -eq $defaultVersion) {
|
|
Set-JavaPath -Version $jdkVersion -Default
|
|
} else {
|
|
Set-JavaPath -Version $jdkVersion
|
|
}
|
|
}
|
|
|
|
# Install Java tools
|
|
# Force chocolatey to ignore dependencies on Ant and Maven or else they will download the Oracle JDK
|
|
Choco-Install -PackageName ant -ArgumentList "-i"
|
|
Choco-Install -PackageName maven -ArgumentList "-i", "--version=3.6.3"
|
|
Choco-Install -PackageName gradle
|
|
|
|
# Move maven variables to Machine. They may not be in the environment for this script so we need to read them from the registry.
|
|
$userEnvironmentKey = 'Registry::HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\Environment'
|
|
|
|
$m2_home = (Get-ItemProperty -Path $userEnvironmentKey -Name M2_HOME).M2_HOME
|
|
$m2 = $m2_home + '\bin'
|
|
$maven_opts = '-Xms256m'
|
|
|
|
$m2_repo = 'C:\ProgramData\m2'
|
|
New-Item -Path $m2_repo -ItemType Directory -Force
|
|
|
|
setx M2 $m2 /M
|
|
setx M2_REPO $m2_repo /M
|
|
setx MAVEN_OPTS $maven_opts /M
|
|
|
|
# Download cobertura jars
|
|
$uri = 'https://downloads.sourceforge.net/project/cobertura/cobertura/2.1.1/cobertura-2.1.1-bin.zip'
|
|
$coberturaPath = "C:\cobertura-2.1.1"
|
|
|
|
$archivePath = Start-DownloadWithRetry -Url $uri -Name "cobertura.zip"
|
|
Extract-7Zip -Path $archivePath -DestinationPath "C:\"
|
|
|
|
setx COBERTURA_HOME $coberturaPath /M
|
|
|
|
Invoke-PesterTests -TestFile "Java"
|