mirror of
https://github.com/actions/runner-images.git
synced 2025-12-14 13:17:54 +00:00
[Ubuntu] Merge several toolset provisioners into single Configure-Toolset script (#1121)
* Single toolset * rework conditional logic
This commit is contained in:
committed by
GitHub
parent
fc206bb997
commit
a89f839675
95
images/linux/scripts/installers/Configure-Toolset.ps1
Normal file
95
images/linux/scripts/installers/Configure-Toolset.ps1
Normal file
@@ -0,0 +1,95 @@
|
|||||||
|
################################################################################
|
||||||
|
## File: Configure-Toolset.ps1
|
||||||
|
## Team: CI-Build
|
||||||
|
## Desc: Configure toolset
|
||||||
|
################################################################################
|
||||||
|
|
||||||
|
function Get-ToolsetToolFullPath
|
||||||
|
{
|
||||||
|
param
|
||||||
|
(
|
||||||
|
[Parameter(Mandatory)] [string] $ToolName,
|
||||||
|
[Parameter(Mandatory)] [string] $ToolVersion,
|
||||||
|
[Parameter(Mandatory)] [string] $ToolArchitecture
|
||||||
|
)
|
||||||
|
|
||||||
|
$toolPath = Join-Path -Path $env:AGENT_TOOLSDIRECTORY -ChildPath $toolName
|
||||||
|
$toolPathVersion = Join-Path -Path $toolPath -ChildPath $toolVersion
|
||||||
|
$foundVersion = Get-Item $toolPathVersion | Sort-Object -Property {[version]$_.name} -Descending | Select-Object -First 1
|
||||||
|
$installationDir = Join-Path -Path $foundVersion -ChildPath $toolArchitecture
|
||||||
|
return $installationDir
|
||||||
|
}
|
||||||
|
|
||||||
|
function Add-EnvironmentVariable
|
||||||
|
{
|
||||||
|
param
|
||||||
|
(
|
||||||
|
[Parameter(Mandatory)] [string] $Name,
|
||||||
|
[Parameter(Mandatory)] [string] $Value,
|
||||||
|
[string] $FilePath = "/etc/environment"
|
||||||
|
)
|
||||||
|
|
||||||
|
$envVar = "{0}={1}" -f $name, $value
|
||||||
|
Tee-Object -InputObject $envVar -FilePath $filePath -Append
|
||||||
|
}
|
||||||
|
|
||||||
|
$ErrorActionPreference = "Stop"
|
||||||
|
|
||||||
|
Write-Host "Configure toolset tools environment..."
|
||||||
|
$toolsEnvironment = @{
|
||||||
|
boost = @{
|
||||||
|
variableTemplate = "BOOST_ROOT_{0}_{1}_{2}"
|
||||||
|
}
|
||||||
|
go = @{
|
||||||
|
command = "ln -s {0}/bin/* /usr/bin/"
|
||||||
|
defaultVariable = "GOROOT"
|
||||||
|
variableTemplate = "GOROOT_{0}_{1}_X64"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$toolset = Get-Content -Path "$env:INSTALLER_SCRIPT_FOLDER/toolset.json" -Raw | ConvertFrom-Json
|
||||||
|
|
||||||
|
foreach ($tool in $toolset.toolcache)
|
||||||
|
{
|
||||||
|
$toolName = $tool.name
|
||||||
|
$toolArch = $tool.arch
|
||||||
|
$toolEnvironment = $toolsEnvironment[$toolName]
|
||||||
|
|
||||||
|
if (-not $toolEnvironment)
|
||||||
|
{
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
foreach ($toolVersion in $tool.versions)
|
||||||
|
{
|
||||||
|
Write-Host "Set $toolName $toolVersion environment variable..."
|
||||||
|
$toolPath = Get-ToolsetToolFullPath -ToolName $toolName -ToolVersion $toolVersion -ToolArchitecture $toolArch
|
||||||
|
$envName = $toolEnvironment.variableTemplate -f $toolVersion.split(".")
|
||||||
|
|
||||||
|
# Add environment variable name=value
|
||||||
|
Add-EnvironmentVariable -Name $envName -Value $toolPath
|
||||||
|
}
|
||||||
|
|
||||||
|
# Invoke command and add env variable for the default tool version
|
||||||
|
$toolDefVersion = $tool.default
|
||||||
|
if (-not $toolDefVersion)
|
||||||
|
{
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
$envDefName = $toolEnvironment.defaultVariable
|
||||||
|
$toolPath = Get-ToolsetToolFullPath -ToolName $toolName -ToolVersion $toolDefVersion -ToolArchitecture $toolArch
|
||||||
|
|
||||||
|
if ($envDefName)
|
||||||
|
{
|
||||||
|
Write-Host "Set default $envDefName for $toolName $toolDefVersion environment variable..."
|
||||||
|
Add-EnvironmentVariable -Name $envDefName -Value $toolPath
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($toolEnvironment.command)
|
||||||
|
{
|
||||||
|
$command = $toolEnvironment.command -f $toolPath
|
||||||
|
Write-Host "Invoke $command command for default $toolName $toolDefVersion..."
|
||||||
|
Invoke-Expression -Command $command
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -30,7 +30,7 @@ $ErrorActionPreference = "Stop"
|
|||||||
$toolsetJson = Get-Content -Path "$env:INSTALLER_SCRIPT_FOLDER/toolset.json" -Raw
|
$toolsetJson = Get-Content -Path "$env:INSTALLER_SCRIPT_FOLDER/toolset.json" -Raw
|
||||||
$toolsToInstall = @("Python", "Node", "Boost", "Go")
|
$toolsToInstall = @("Python", "Node", "Boost", "Go")
|
||||||
|
|
||||||
$tools = ConvertFrom-Json -InputObject $toolsetJson | Select-Object -ExpandProperty toolcache | Where {$ToolsToInstall -contains $_.Name}
|
$tools = ConvertFrom-Json -InputObject $toolsetJson | Select-Object -ExpandProperty toolcache | Where-Object {$ToolsToInstall -contains $_.Name}
|
||||||
|
|
||||||
foreach ($tool in $tools) {
|
foreach ($tool in $tools) {
|
||||||
# Get versions manifest for current tool
|
# Get versions manifest for current tool
|
||||||
@@ -44,10 +44,9 @@ foreach ($tool in $tools) {
|
|||||||
| Select-Object -First 1
|
| Select-Object -First 1
|
||||||
|
|
||||||
Write-Host "Installing $($tool.name) $toolVersion $($tool.arch)..."
|
Write-Host "Installing $($tool.name) $toolVersion $($tool.arch)..."
|
||||||
if ($asset -ne $null) {
|
if ($null -ne $asset) {
|
||||||
Install-Asset -ReleaseAsset $asset
|
Install-Asset -ReleaseAsset $asset
|
||||||
}
|
} else {
|
||||||
else {
|
|
||||||
Write-Host "Asset was not found in versions manifest"
|
Write-Host "Asset was not found in versions manifest"
|
||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,19 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
################################################################################
|
|
||||||
## File: boost.sh
|
|
||||||
## Desc: Installs Boost C++ Libraries
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
TOOLSET_PATH="$INSTALLER_SCRIPT_FOLDER/toolset.json"
|
|
||||||
BOOST_LIB="$AGENT_TOOLSDIRECTORY/boost"
|
|
||||||
BOOST_VERSIONS=$(cat $TOOLSET_PATH | jq -r '.toolcache[] | select(.name | contains("boost")) | .versions[]')
|
|
||||||
BOOST_ARCH=$(cat $TOOLSET_PATH | jq -r '.toolcache[] | select(.name | contains("boost")) | .arch')
|
|
||||||
|
|
||||||
# Install Boost
|
|
||||||
for BOOST_VERSION in ${BOOST_VERSIONS}
|
|
||||||
do
|
|
||||||
BOOST_SYMLINK_VER=$(echo "${BOOST_VERSION//[.]/_}")
|
|
||||||
BOOST_ROOT_VERSION="BOOST_ROOT_$BOOST_SYMLINK_VER"
|
|
||||||
|
|
||||||
echo "$BOOST_ROOT_VERSION=$BOOST_LIB/$BOOST_VERSION/$BOOST_ARCH" | tee -a /etc/environment
|
|
||||||
done
|
|
||||||
@@ -1,26 +0,0 @@
|
|||||||
#!/bin/bash
|
|
||||||
################################################################################
|
|
||||||
## File: go.sh
|
|
||||||
## Desc: Installs go, configures GOROOT, and adds go to the path
|
|
||||||
################################################################################
|
|
||||||
|
|
||||||
# Fail out if any setups fail
|
|
||||||
set -e
|
|
||||||
|
|
||||||
toolsetJson="$INSTALLER_SCRIPT_FOLDER/toolset.json"
|
|
||||||
toolsetVersions=(`ls $AGENT_TOOLSDIRECTORY/go`)
|
|
||||||
defaultVersion=$(jq -r '.toolcache[] | select(.name | contains("go")) | .default' $toolsetJson)
|
|
||||||
|
|
||||||
for toolsetVersion in ${toolsetVersions[@]}
|
|
||||||
do
|
|
||||||
major="$(cut -d'.' -f1 <<< "$toolsetVersion")"
|
|
||||||
minor="$(cut -d'.' -f2 <<< "$toolsetVersion")"
|
|
||||||
goFolder="$AGENT_TOOLSDIRECTORY/go/$toolsetVersion/x64"
|
|
||||||
|
|
||||||
echo "GOROOT_${major}_${minor}_X64=$goFolder" | tee -a /etc/environment
|
|
||||||
|
|
||||||
if [[ "$toolsetVersion" =~ $defaultVersion ]]; then
|
|
||||||
ln -s $goFolder/bin/* /usr/bin/
|
|
||||||
echo "GOROOT=$goFolder" | tee -a /etc/environment
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
@@ -247,12 +247,12 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "file",
|
"type": "file",
|
||||||
"source": "{{template_dir}}/toolcache-1604.json",
|
"source": "{{template_dir}}/toolsets/toolcache-1604.json",
|
||||||
"destination": "{{user `installer_script_folder`}}/toolcache.json"
|
"destination": "{{user `installer_script_folder`}}/toolcache.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "file",
|
"type": "file",
|
||||||
"source": "{{template_dir}}/toolset-1604.json",
|
"source": "{{template_dir}}/toolsets/toolset-1604.json",
|
||||||
"destination": "{{user `installer_script_folder`}}/toolset.json"
|
"destination": "{{user `installer_script_folder`}}/toolset.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -278,6 +278,7 @@
|
|||||||
"type": "shell",
|
"type": "shell",
|
||||||
"scripts":[
|
"scripts":[
|
||||||
"{{template_dir}}/scripts/installers/Install-Toolset.ps1",
|
"{{template_dir}}/scripts/installers/Install-Toolset.ps1",
|
||||||
|
"{{template_dir}}/scripts/installers/Configure-Toolset.ps1",
|
||||||
"{{template_dir}}/scripts/installers/Validate-Toolset.ps1"
|
"{{template_dir}}/scripts/installers/Validate-Toolset.ps1"
|
||||||
],
|
],
|
||||||
"environment_vars": [
|
"environment_vars": [
|
||||||
@@ -287,28 +288,6 @@
|
|||||||
],
|
],
|
||||||
"execute_command": "sudo sh -c '{{ .Vars }} pwsh -f {{ .Path }}'"
|
"execute_command": "sudo sh -c '{{ .Vars }} pwsh -f {{ .Path }}'"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"type": "shell",
|
|
||||||
"scripts": [
|
|
||||||
"{{template_dir}}/scripts/installers/go.sh"
|
|
||||||
],
|
|
||||||
"environment_vars": [
|
|
||||||
"INSTALLER_SCRIPT_FOLDER={{user `installer_script_folder`}}"
|
|
||||||
],
|
|
||||||
"execute_command": "sudo sh -c '{{ .Vars }} {{ .Path }}'"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "shell",
|
|
||||||
"scripts":[
|
|
||||||
"{{template_dir}}/scripts/installers/boost.sh"
|
|
||||||
],
|
|
||||||
"environment_vars": [
|
|
||||||
"METADATA_FILE={{user `metadata_file`}}",
|
|
||||||
"HELPER_SCRIPTS={{user `helper_script_folder`}}",
|
|
||||||
"INSTALLER_SCRIPT_FOLDER={{user `installer_script_folder`}}"
|
|
||||||
],
|
|
||||||
"execute_command": "sudo sh -c '{{ .Vars }} {{ .Path }}'"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
"scripts":[
|
"scripts":[
|
||||||
|
|||||||
@@ -251,12 +251,12 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "file",
|
"type": "file",
|
||||||
"source": "{{template_dir}}/toolcache-1804.json",
|
"source": "{{template_dir}}/toolsets/toolcache-1804.json",
|
||||||
"destination": "{{user `installer_script_folder`}}/toolcache.json"
|
"destination": "{{user `installer_script_folder`}}/toolcache.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "file",
|
"type": "file",
|
||||||
"source": "{{template_dir}}/toolset-1804.json",
|
"source": "{{template_dir}}/toolsets/toolset-1804.json",
|
||||||
"destination": "{{user `installer_script_folder`}}/toolset.json"
|
"destination": "{{user `installer_script_folder`}}/toolset.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -282,6 +282,7 @@
|
|||||||
"type": "shell",
|
"type": "shell",
|
||||||
"scripts":[
|
"scripts":[
|
||||||
"{{template_dir}}/scripts/installers/Install-Toolset.ps1",
|
"{{template_dir}}/scripts/installers/Install-Toolset.ps1",
|
||||||
|
"{{template_dir}}/scripts/installers/Configure-Toolset.ps1",
|
||||||
"{{template_dir}}/scripts/installers/Validate-Toolset.ps1"
|
"{{template_dir}}/scripts/installers/Validate-Toolset.ps1"
|
||||||
],
|
],
|
||||||
"environment_vars": [
|
"environment_vars": [
|
||||||
@@ -291,28 +292,6 @@
|
|||||||
],
|
],
|
||||||
"execute_command": "sudo sh -c '{{ .Vars }} pwsh -f {{ .Path }}'"
|
"execute_command": "sudo sh -c '{{ .Vars }} pwsh -f {{ .Path }}'"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"type": "shell",
|
|
||||||
"scripts": [
|
|
||||||
"{{template_dir}}/scripts/installers/go.sh"
|
|
||||||
],
|
|
||||||
"environment_vars": [
|
|
||||||
"INSTALLER_SCRIPT_FOLDER={{user `installer_script_folder`}}"
|
|
||||||
],
|
|
||||||
"execute_command": "sudo sh -c '{{ .Vars }} {{ .Path }}'"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "shell",
|
|
||||||
"scripts":[
|
|
||||||
"{{template_dir}}/scripts/installers/boost.sh"
|
|
||||||
],
|
|
||||||
"environment_vars": [
|
|
||||||
"METADATA_FILE={{user `metadata_file`}}",
|
|
||||||
"HELPER_SCRIPTS={{user `helper_script_folder`}}",
|
|
||||||
"INSTALLER_SCRIPT_FOLDER={{user `installer_script_folder`}}"
|
|
||||||
],
|
|
||||||
"execute_command": "sudo sh -c '{{ .Vars }} {{ .Path }}'"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
"scripts":[
|
"scripts":[
|
||||||
|
|||||||
@@ -252,12 +252,12 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "file",
|
"type": "file",
|
||||||
"source": "{{template_dir}}/toolcache-2004.json",
|
"source": "{{template_dir}}/toolsets/toolcache-2004.json",
|
||||||
"destination": "{{user `installer_script_folder`}}/toolcache.json"
|
"destination": "{{user `installer_script_folder`}}/toolcache.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"type": "file",
|
"type": "file",
|
||||||
"source": "{{template_dir}}/toolset-2004.json",
|
"source": "{{template_dir}}/toolsets/toolset-2004.json",
|
||||||
"destination": "{{user `installer_script_folder`}}/toolset.json"
|
"destination": "{{user `installer_script_folder`}}/toolset.json"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
@@ -283,6 +283,7 @@
|
|||||||
"type": "shell",
|
"type": "shell",
|
||||||
"scripts":[
|
"scripts":[
|
||||||
"{{template_dir}}/scripts/installers/Install-Toolset.ps1",
|
"{{template_dir}}/scripts/installers/Install-Toolset.ps1",
|
||||||
|
"{{template_dir}}/scripts/installers/Configure-Toolset.ps1",
|
||||||
"{{template_dir}}/scripts/installers/Validate-Toolset.ps1"
|
"{{template_dir}}/scripts/installers/Validate-Toolset.ps1"
|
||||||
],
|
],
|
||||||
"environment_vars": [
|
"environment_vars": [
|
||||||
@@ -292,16 +293,6 @@
|
|||||||
],
|
],
|
||||||
"execute_command": "sudo sh -c '{{ .Vars }} pwsh -f {{ .Path }}'"
|
"execute_command": "sudo sh -c '{{ .Vars }} pwsh -f {{ .Path }}'"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"type": "shell",
|
|
||||||
"scripts": [
|
|
||||||
"{{template_dir}}/scripts/installers/go.sh"
|
|
||||||
],
|
|
||||||
"environment_vars": [
|
|
||||||
"INSTALLER_SCRIPT_FOLDER={{user `installer_script_folder`}}"
|
|
||||||
],
|
|
||||||
"execute_command": "sudo sh -c '{{ .Vars }} {{ .Path }}'"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"type": "shell",
|
"type": "shell",
|
||||||
"scripts":[
|
"scripts":[
|
||||||
|
|||||||
Reference in New Issue
Block a user