mirror of
https://github.com/actions/runner-images.git
synced 2026-01-08 11:30:49 +08:00
need to test
This commit is contained in:
@@ -8,11 +8,15 @@ echo "Configuring system time to GMT..."
|
||||
rm -f /etc/localtime
|
||||
ln -sf /usr/share/zoneinfo/UTC /etc/localtime
|
||||
|
||||
echo "Enabling safari driver..."
|
||||
# https://developer.apple.com/documentation/webkit/testing_with_webdriver_in_safari
|
||||
# Safari’s executable is located at /usr/bin/safaridriver
|
||||
# Configure Safari to Enable WebDriver Support
|
||||
sudo safaridriver --enable
|
||||
|
||||
echo "Enabling developer mode..."
|
||||
sudo /usr/sbin/DevToolsSecurity --enable
|
||||
|
||||
# Turn off hibernation and get rid of the sleepimage
|
||||
sudo pmset hibernatemode 0
|
||||
sudo rm -f /var/vm/sleepimage
|
||||
|
||||
@@ -1,69 +0,0 @@
|
||||
#!/bin/sh
|
||||
|
||||
# The script currently requires 2 external variables to be set: XCODE_INSTALL_USER
|
||||
# and XCODE_INSTALL_PASSWORD, in order to access the Apple Developer Center
|
||||
|
||||
set -e
|
||||
|
||||
source ~/utils/utils.sh
|
||||
source ~/utils/xcode-utils.sh
|
||||
|
||||
if [ -z $XCODE_INSTALL_USER ] || [ -z $XCODE_INSTALL_PASSWORD ]; then
|
||||
echo "Required environment variables XCODE_INSTALL_USER and XCODE_INSTALL_PASSWORD are not set"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
XCODE_COUNT=$(get_toolset_value '.xcode.versions | length')
|
||||
XCODE_LOCAL_LIST=$(get_toolset_value '.xcode.versions[].localVersion')
|
||||
DEFAULT_XCODE_VERSION=$(get_toolset_value '.xcode.default')
|
||||
WORK_DIR="${HOME}/Library/Caches/XcodeInstall"
|
||||
|
||||
# Update the list of available versions
|
||||
xcversion update
|
||||
|
||||
for ((XCODE_INDEX=0; XCODE_INDEX<XCODE_COUNT; XCODE_INDEX++)); do
|
||||
LOCAL_VERSION=$(get_toolset_value ".xcode.versions[$XCODE_INDEX].localVersion")
|
||||
XCODE_VERSION=$(get_toolset_value ".xcode.versions[$XCODE_INDEX].version")
|
||||
SYMLINKS=($(get_toolset_value ".xcode.versions[$XCODE_INDEX].symlinks"))
|
||||
|
||||
echo "Installing Xcode '$XCODE_VERSION' to '/Applications/Xcode_${LOCAL_VERSION}.app'"
|
||||
downloadXcode $XCODE_VERSION
|
||||
|
||||
echo "Extracting Xcode.app ($VERSION_TO_INSTALL) to ${WORK_DIR} ..."
|
||||
extractXcodeXip $WORK_DIR
|
||||
|
||||
echo "Validating unpacked Xcode ${XCODE_VERSION}"
|
||||
validateXcodeIntegrity "$WORK_DIR"
|
||||
|
||||
echo "Copying Xcode.app to /Applications/Xcode_${LOCAL_VERSION}.app"
|
||||
mv -f "${WORK_DIR}/Xcode.app" "/Applications/Xcode_${LOCAL_VERSION}.app"
|
||||
|
||||
echo "Accepting license for Xcode ${XCODE_VERSION}..."
|
||||
approveXcodeLicense "$LOCAL_VERSION"
|
||||
|
||||
echo "Creating symlinks..."
|
||||
createXcodeSymlinks $LOCAL_VERSION $SYMLINKS
|
||||
|
||||
find $WORK_DIR -mindepth 1 -delete
|
||||
done
|
||||
|
||||
echo "Running 'runFirstLaunch' for all Xcode versions"
|
||||
runFirstLaunchXcodeList $XCODE_LOCAL_LIST
|
||||
|
||||
echo "Running 'runFirstLaunch' for default Xcode ${DEFAULT_XCODE_VERSION}..."
|
||||
runFirstLaunch $DEFAULT_XCODE_VERSION
|
||||
|
||||
echo "Setting Xcode ${DEFAULT_XCODE_VERSION} as default"
|
||||
sudo xcode-select -s "/Applications/Xcode_${DEFAULT_XCODE_VERSION}.app/Contents/Developer"
|
||||
|
||||
echo "Adding symlink '/Applications/Xcode_${DEFAULT_XCODE_VERSION}.app' -> '/Applications/Xcode.app'"
|
||||
ln -s "/Applications/Xcode_${DEFAULT_XCODE_VERSION}.app" "/Applications/Xcode.app"
|
||||
|
||||
echo "Enabling developer mode"
|
||||
sudo /usr/sbin/DevToolsSecurity --enable
|
||||
|
||||
echo "Setting environment variables 'XCODE_<VERSION>_DEVELOPER_DIR'"
|
||||
setXcodeDeveloperDirVariables
|
||||
|
||||
echo "Doing cleanup. Emptying ${WORK_DIR}..."
|
||||
rm -rf "$WORK_DIR"
|
||||
38
images/macos/provision/core/xcode.ps1
Normal file
38
images/macos/provision/core/xcode.ps1
Normal file
@@ -0,0 +1,38 @@
|
||||
# The script currently requires 2 external variables to be set: XCODE_INSTALL_USER
|
||||
# and XCODE_INSTALL_PASSWORD, in order to access the Apple Developer Center
|
||||
|
||||
$ErrorActionPreference = "Stop"
|
||||
|
||||
Import-Module "$PSScriptRoot/../../helpers/Common.Helpers.psm1"
|
||||
Import-Module "$PSScriptRoot/../../helpers/Xcode.Installer.psm1"
|
||||
|
||||
if ([string]::IsNullOrEmpty($env:XCODE_INSTALL_USER) -or [string]::IsNullOrEmpty($env:XCODE_INSTALL_PASSWORD)) {
|
||||
throw "Required environment variables XCODE_INSTALL_USER and XCODE_INSTALL_PASSWORD are not set"
|
||||
}
|
||||
|
||||
$os = Get-OSVersion
|
||||
$xcodeVersions = Get-ToolsetValue "xcode.versions"
|
||||
$defaultXcode = Get-ToolsetValue "xcode.default"
|
||||
|
||||
& xcversion update
|
||||
|
||||
Write-Host "Installing Xcode versions..."
|
||||
foreach ($xcode in $xcodeVersions) {
|
||||
Install-XcodeVersion -Version $xcode.version -LocalLink $xcode.localLink
|
||||
Build-XcodeSymlinks -Version $xcode.localLink -Symlinks $xcode.symlinks
|
||||
Build-ProvisionatorSymlink -Version $xcode.version
|
||||
}
|
||||
|
||||
Write-Host "Configuring Xcode versions..."
|
||||
if ($os.IsLessThanCatalina) {
|
||||
Install-XcodeAdditionalPackages -Version $xcodeVersions[0].localLink
|
||||
}
|
||||
$xcodeVersions | ForEach-Object { Invoke-XcodeRunFirstLaunch -Version $_.localLink }
|
||||
Invoke-XcodeRunFirstLaunch -Version $defaultXcode
|
||||
|
||||
Write-Host "Setting default Xcode to $defaultXcode"
|
||||
Switch-Xcode -Version $defaultXcode
|
||||
New-Item -Path "/Applications/Xcode.app" -ItemType SymbolicLink -Value (Get-XcodeRootPath -Version $defaultXcode)
|
||||
|
||||
Write-Host "Setting environment variables 'XCODE_<VERSION>_DEVELOPER_DIR'"
|
||||
Set-XcodeDeveloperDirEnvironmentVariables
|
||||
@@ -1,118 +0,0 @@
|
||||
downloadXcode() {
|
||||
local XCODE_VERSION="$1"
|
||||
|
||||
VERSION_TO_INSTALL=$(resolveLatestXcodeVersion "$XCODE_VERSION")
|
||||
if [[ -z "$VERSION_TO_INSTALL" ]]; then
|
||||
echo "No versions were found matching $XCODE_VERSION"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Downloading Xcode $VERSION_TO_INSTALL ..."
|
||||
xcversion install "$VERSION_TO_INSTALL" --no-install
|
||||
}
|
||||
|
||||
resolveLatestXcodeVersion() {
|
||||
local XCODE_VERSION="$1"
|
||||
|
||||
if [[ $XCODE_VERSION == "12" ]]; then
|
||||
echo "12.0.1"
|
||||
elif [[ ! $XCODE_VERSION =~ "_beta" ]]; then
|
||||
echo "${XCODE_VERSION//_/ }"
|
||||
else
|
||||
local XCODE_BETA="${XCODE_VERSION/_/ }"
|
||||
echo "$(xcversion list | sort -r | grep -m 1 "$XCODE_BETA")"
|
||||
fi
|
||||
}
|
||||
|
||||
validateXcodeIntegrity() {
|
||||
local WORKING_DIR="$1"
|
||||
local XCODE_VERSION="$2"
|
||||
|
||||
if echo $XCODE_VERSION | grep "beta"; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
spctl --assess --raw "${WORKING_DIR}/Xcode.app"
|
||||
}
|
||||
|
||||
approveXcodeLicense() {
|
||||
local XCODE_VERSION="$1"
|
||||
sudo "/Applications/Xcode_${XCODE_VERSION}.app/Contents/Developer/usr/bin/xcodebuild" -license accept
|
||||
}
|
||||
|
||||
installAdditionalPackages() {
|
||||
# should be called only for old High Sierra and Mojave
|
||||
local XCODE_VERSION="$1"
|
||||
find /Applications/Xcode_${XCODE_VERSION}.app/Contents/Resources/Packages/ -name '*.pkg' | xargs -I '{}' sudo installer -pkg '{}' -target / -allowUntrusted
|
||||
}
|
||||
|
||||
runFirstLaunch() {
|
||||
local XCODE_VERSION="$1"
|
||||
sudo "/Applications/Xcode_${XCODE_VERSION}.app/Contents/Developer/usr/bin/xcodebuild" -runFirstLaunch
|
||||
}
|
||||
|
||||
runFirstLaunchXcodeList() {
|
||||
local XCODE_LIST=("$@")
|
||||
if is_Less_Catalina; then
|
||||
echo "Install additional packages for Xcode ${XCODE_LIST[0]}"
|
||||
installAdditionalPackages ${XCODE_LIST[0]}
|
||||
fi
|
||||
|
||||
for XCODE_VERSION in "${XCODE_LIST[@]}"
|
||||
do
|
||||
if [[ $XCODE_VERSION == 8* || $XCODE_VERSION == 9* ]]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
echo "Running 'runFirstLaunch' for Xcode ${XCODE_VERSION}..."
|
||||
runFirstLaunch $XCODE_VERSION
|
||||
done
|
||||
}
|
||||
|
||||
setXcodeDeveloperDirVariables() {
|
||||
stable_xcode_versions=$(get_xcode_list_from_toolset | tr " " "\n" | grep -v "beta")
|
||||
major_versions=($(echo ${stable_xcode_versions[@]} | tr " " "\n" | cut -d '.' -f 1 | uniq))
|
||||
for MAJOR_VERSION in "${major_versions[@]}"
|
||||
do
|
||||
LATEST_STABLE_VERSION=$(echo "${stable_xcode_versions[*]}" | grep "${MAJOR_VERSION}" | tail -n 1)
|
||||
LATEST_STABLE_VERSION=$(echo $LATEST_STABLE_VERSION | cut -d"_" -f 1)
|
||||
echo "export XCODE_${MAJOR_VERSION}_DEVELOPER_DIR=/Applications/Xcode_${LATEST_STABLE_VERSION}.app/Contents/Developer" >> "$HOME/.bashrc"
|
||||
done
|
||||
}
|
||||
|
||||
extractXcodeXip() {
|
||||
local WORKING_DIR="$1"
|
||||
local XCODE_XIP=$(find "$WORKING_DIR" -name "Xcode_*.xip" | head -n1)
|
||||
|
||||
pushd $WORKING_DIR
|
||||
xip -x "${XCODE_XIP}"
|
||||
popd
|
||||
|
||||
if [[ -d "${WORKING_DIR}/Xcode-beta.app" ]]; then
|
||||
mv -f "${WORKING_DIR}/Xcode-beta.app" "${WORKING_DIR}/Xcode.app"
|
||||
fi
|
||||
|
||||
if [[ ! -d "${WORKING_DIR}/Xcode.app" ]]; then
|
||||
echo "'Xcode.app' doesn't exist after Xcode XIP extraction"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
createXcodeSymlinks() {
|
||||
local SOURCE_XCODE=$1 && shift
|
||||
local SYMLINKS=($@)
|
||||
|
||||
|
||||
for TARGET_XCODE in "${SYMLINKS[@]}"
|
||||
do
|
||||
echo "Creating symlink '/Applications/Xcode_${SOURCE_XCODE}.app' -> '/Applications/Xcode_${TARGET_XCODE}.app'"
|
||||
ln -sf "/Applications/Xcode_${SOURCE_XCODE}.app" "/Applications/Xcode_${TARGET_XCODE}.app"
|
||||
done
|
||||
|
||||
# TO-DO, symlink is not correct
|
||||
local FULL_XCODE_VERSION=$(echo "${XCODE_VERSION}.0.0" | cut -d'.' -f 1,2,3)
|
||||
if [ $FULL_XCODE_VERSION != $SOURCE_XCODE ]; then
|
||||
echo "Creating symlink '/Applications/Xcode_${SOURCE_XCODE}.app' -> '/Applications/Xcode_${FULL_XCODE_VERSION}.app'"
|
||||
ln -sf "/Applications/Xcode_${SOURCE_XCODE}.app" "/Applications/Xcode_${FULL_XCODE_VERSION}.app"
|
||||
fi
|
||||
}
|
||||
Reference in New Issue
Block a user