mirror of
https://github.com/actions/runner-images.git
synced 2025-12-20 06:35:47 +00:00
xcode-tools
This commit is contained in:
@@ -14,6 +14,7 @@ if [ -z $XCODE_INSTALL_USER ] || [ -z $XCODE_INSTALL_PASSWORD ]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
XCODE_COUNT=$(get_toolset_value '.xcode.versions | length')
|
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')
|
DEFAULT_XCODE_VERSION=$(get_toolset_value '.xcode.default')
|
||||||
WORK_DIR="${HOME}/Library/Caches/XcodeInstall"
|
WORK_DIR="${HOME}/Library/Caches/XcodeInstall"
|
||||||
|
|
||||||
@@ -25,64 +26,33 @@ for ((XCODE_INDEX=0; XCODE_INDEX<XCODE_COUNT; XCODE_INDEX++)); do
|
|||||||
XCODE_VERSION=$(get_toolset_value ".xcode.versions[$XCODE_INDEX].version")
|
XCODE_VERSION=$(get_toolset_value ".xcode.versions[$XCODE_INDEX].version")
|
||||||
SYMLINKS=($(get_toolset_value ".xcode.versions[$XCODE_INDEX].symlinks"))
|
SYMLINKS=($(get_toolset_value ".xcode.versions[$XCODE_INDEX].symlinks"))
|
||||||
|
|
||||||
echo "Installing Xcode '$XCVERSION_VERSION' to '$LOCAL_VERSION'"
|
echo "Installing Xcode '$XCODE_VERSION' to '/Applications/Xcode_${LOCAL_VERSION}.app'"
|
||||||
VERSION_TO_INSTALL=$(resolveLatestXcodeVersion "$XCODE_VERSION")
|
downloadXcode $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
|
|
||||||
|
|
||||||
echo "Extracting Xcode.app ($VERSION_TO_INSTALL) to ${WORK_DIR} ..."
|
echo "Extracting Xcode.app ($VERSION_TO_INSTALL) to ${WORK_DIR} ..."
|
||||||
extractXcodeXip $WORK_DIR "$VERSION_TO_INSTALL"
|
extractXcodeXip $WORK_DIR
|
||||||
|
|
||||||
echo "Checking if unpacked Xcode ${XCODE_VERSION} is valid"
|
echo "Validating unpacked Xcode ${XCODE_VERSION}"
|
||||||
validateXcodeIntegrity "$WORK_DIR"
|
validateXcodeIntegrity "$WORK_DIR"
|
||||||
|
|
||||||
echo "Copying Xcode.app to /Applications/Xcode_${LOCAL_VERSION}.app"
|
echo "Copying Xcode.app to /Applications/Xcode_${LOCAL_VERSION}.app"
|
||||||
mv -f "${WORK_DIR}/Xcode.app" "/Applications/Xcode_${LOCAL_VERSION}.app"
|
mv -f "${WORK_DIR}/Xcode.app" "/Applications/Xcode_${LOCAL_VERSION}.app"
|
||||||
|
|
||||||
echo "Accepting license for Xcode ${XCODE_VERSION}..."
|
echo "Accepting license for Xcode ${XCODE_VERSION}..."
|
||||||
approveLicense "$LOCAL_VERSION"
|
approveXcodeLicense "$LOCAL_VERSION"
|
||||||
|
|
||||||
# Creating a symlink for all Xcode 10* and Xcode 9.3, 9.4 to stay backwards compatible with consumers of the Xcode beta version
|
echo "Creating symlinks..."
|
||||||
createBetaSymlink "$LOCAL_VERSION"
|
createXcodeSymlinks $LOCAL_VERSION $SYMLINKS
|
||||||
createXamarinProvisionatorSymlink "$XCODE_VERSION"
|
|
||||||
|
|
||||||
find $WORK_DIR -mindepth 1 -delete
|
find $WORK_DIR -mindepth 1 -delete
|
||||||
done
|
done
|
||||||
|
|
||||||
echo "Configuring 'runFirstLaunch' for all Xcode versions"
|
echo "Running 'runFirstLaunch' for all Xcode versions"
|
||||||
if is_Less_Catalina; then
|
runFirstLaunchXcodeList $XCODE_LOCAL_LIST
|
||||||
##TO-DO
|
|
||||||
LATEST_XCODE_VERSION=$(get_latest_xcode_from_toolset)
|
|
||||||
echo "Install additional packages for Xcode ${LATEST_XCODE_VERSION}"
|
|
||||||
installAdditionalPackages $LATEST_XCODE_VERSION
|
|
||||||
fi
|
|
||||||
|
|
||||||
for XCODE_VERSION in "${XCODE_LIST[@]}"
|
|
||||||
do
|
|
||||||
if [[ $XCODE_VERSION == 8* || $XCODE_VERSION == 9* ]]; then
|
|
||||||
continue
|
|
||||||
fi
|
|
||||||
|
|
||||||
XCODE_VERSION=$(echo $XCODE_VERSION | cut -d"_" -f 1)
|
|
||||||
|
|
||||||
echo "Running 'runFirstLaunch' for Xcode ${XCODE_VERSION}..."
|
|
||||||
runFirstLaunch $XCODE_VERSION
|
|
||||||
done
|
|
||||||
|
|
||||||
echo "Running 'runFirstLaunch' for default Xcode ${DEFAULT_XCODE_VERSION}..."
|
echo "Running 'runFirstLaunch' for default Xcode ${DEFAULT_XCODE_VERSION}..."
|
||||||
runFirstLaunch $DEFAULT_XCODE_VERSION
|
runFirstLaunch $DEFAULT_XCODE_VERSION
|
||||||
|
|
||||||
# Create symlinks for Xcode on Catalina: 11.3 -> 11.3.1, 11.2 -> 11.2.1
|
|
||||||
if is_Catalina; then
|
|
||||||
ln -sf /Applications/Xcode_11.2.1.app /Applications/Xcode_11.2.app
|
|
||||||
ln -sf /Applications/Xcode_11.3.1.app /Applications/Xcode_11.3.app
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Setting Xcode ${DEFAULT_XCODE_VERSION} as default"
|
echo "Setting Xcode ${DEFAULT_XCODE_VERSION} as default"
|
||||||
sudo xcode-select -s "/Applications/Xcode_${DEFAULT_XCODE_VERSION}.app/Contents/Developer"
|
sudo xcode-select -s "/Applications/Xcode_${DEFAULT_XCODE_VERSION}.app/Contents/Developer"
|
||||||
|
|
||||||
@@ -95,6 +65,5 @@ sudo /usr/sbin/DevToolsSecurity --enable
|
|||||||
echo "Setting environment variables 'XCODE_<VERSION>_DEVELOPER_DIR'"
|
echo "Setting environment variables 'XCODE_<VERSION>_DEVELOPER_DIR'"
|
||||||
setXcodeDeveloperDirVariables
|
setXcodeDeveloperDirVariables
|
||||||
|
|
||||||
# Cleanup
|
|
||||||
echo "Doing cleanup. Emptying ${WORK_DIR}..."
|
echo "Doing cleanup. Emptying ${WORK_DIR}..."
|
||||||
rm -rf "$WORK_DIR"
|
rm -rf "$WORK_DIR"
|
||||||
|
|||||||
@@ -1,15 +1,14 @@
|
|||||||
createXamarinProvisionatorSymlink() {
|
downloadXcode() {
|
||||||
local XCODE_VERSION="$1"
|
local XCODE_VERSION="$1"
|
||||||
local FULL_VERSION=$(echo "${XCODE_VERSION}.0.0" | cut -d'.' -f 1,2,3)
|
|
||||||
|
|
||||||
# temporary trick for 12.0.1
|
VERSION_TO_INSTALL=$(resolveLatestXcodeVersion "$XCODE_VERSION")
|
||||||
if [[ $XCODE_VERSION == "12" ]]; then
|
if [[ -z "$VERSION_TO_INSTALL" ]]; then
|
||||||
FULL_VERSION="12.0.1"
|
echo "No versions were found matching $XCODE_VERSION"
|
||||||
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [ $FULL_VERSION != $XCODE_VERSION ]; then
|
echo "Downloading Xcode $VERSION_TO_INSTALL ..."
|
||||||
ln -sf "/Applications/Xcode_${XCODE_VERSION}.app" "/Applications/Xcode_${FULL_VERSION}.app"
|
xcversion install "$VERSION_TO_INSTALL" --no-install
|
||||||
fi
|
|
||||||
}
|
}
|
||||||
|
|
||||||
resolveLatestXcodeVersion() {
|
resolveLatestXcodeVersion() {
|
||||||
@@ -36,7 +35,7 @@ validateXcodeIntegrity() {
|
|||||||
spctl --assess --raw "${WORKING_DIR}/Xcode.app"
|
spctl --assess --raw "${WORKING_DIR}/Xcode.app"
|
||||||
}
|
}
|
||||||
|
|
||||||
approveLicense() {
|
approveXcodeLicense() {
|
||||||
local XCODE_VERSION="$1"
|
local XCODE_VERSION="$1"
|
||||||
sudo "/Applications/Xcode_${XCODE_VERSION}.app/Contents/Developer/usr/bin/xcodebuild" -license accept
|
sudo "/Applications/Xcode_${XCODE_VERSION}.app/Contents/Developer/usr/bin/xcodebuild" -license accept
|
||||||
}
|
}
|
||||||
@@ -52,6 +51,24 @@ runFirstLaunch() {
|
|||||||
sudo "/Applications/Xcode_${XCODE_VERSION}.app/Contents/Developer/usr/bin/xcodebuild" -runFirstLaunch
|
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() {
|
setXcodeDeveloperDirVariables() {
|
||||||
stable_xcode_versions=$(get_xcode_list_from_toolset | tr " " "\n" | grep -v "beta")
|
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))
|
major_versions=($(echo ${stable_xcode_versions[@]} | tr " " "\n" | cut -d '.' -f 1 | uniq))
|
||||||
@@ -65,8 +82,7 @@ setXcodeDeveloperDirVariables() {
|
|||||||
|
|
||||||
extractXcodeXip() {
|
extractXcodeXip() {
|
||||||
local WORKING_DIR="$1"
|
local WORKING_DIR="$1"
|
||||||
local XCODE_VERSION="$2"
|
local XCODE_XIP=$(find "$WORKING_DIR" -name "Xcode_*.xip" | head -n1)
|
||||||
XCODE_XIP="${WORKING_DIR}/Xcode_${XCODE_VERSION// /_}.xip"
|
|
||||||
|
|
||||||
open -W $XCODE_XIP
|
open -W $XCODE_XIP
|
||||||
|
|
||||||
@@ -80,9 +96,21 @@ extractXcodeXip() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
createBetaSymlink() {
|
createXcodeSymlinks() {
|
||||||
local XCODE_VERSION=$1
|
local SOURCE_XCODE=$1 && shift
|
||||||
if [[ $XCODE_VERSION =~ 1[01].* ]] || [[ $XCODE_VERSION == "12.0" ]]; then
|
local SYMLINKS=($@)
|
||||||
ln -sf "/Applications/Xcode_${XCODE_VERSION}.app" "/Applications/Xcode_${XCODE_VERSION}_beta.app"
|
|
||||||
|
|
||||||
|
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
|
fi
|
||||||
}
|
}
|
||||||
@@ -13,6 +13,10 @@ Describe "Xcode" {
|
|||||||
(Get-CommandResult "xcodebuild -version").Output | Should -BeLike "Xcode $DEFAULT_XCODE*"
|
(Get-CommandResult "xcodebuild -version").Output | Should -BeLike "Xcode $DEFAULT_XCODE*"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
It "Xcode.app points to default Xcode" {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
# Cut "_beta" postfix for test cases
|
# Cut "_beta" postfix for test cases
|
||||||
$testCases = $XCODE_VERSIONS | ForEach-Object { @{XcodeVersion = $_.Split("_")[0] } }
|
$testCases = $XCODE_VERSIONS | ForEach-Object { @{XcodeVersion = $_.Split("_")[0] } }
|
||||||
|
|
||||||
|
|||||||
@@ -5,15 +5,15 @@
|
|||||||
{ "localVersion": "12.2", "version": "12.2_beta" },
|
{ "localVersion": "12.2", "version": "12.2_beta" },
|
||||||
{ "localVersion": "12.1", "version": "12.1_GM_seed" },
|
{ "localVersion": "12.1", "version": "12.1_GM_seed" },
|
||||||
{ "localVersion": "12.0", "version": "12.0.1", "symlinks": ["12"] },
|
{ "localVersion": "12.0", "version": "12.0.1", "symlinks": ["12"] },
|
||||||
{ "localVersion": "11.7", "version": "11.7" },
|
{ "localVersion": "11.7", "version": "11.7", "symlinks": ["11.7_beta"] },
|
||||||
{ "localVersion": "11.6", "version": "11.6" },
|
{ "localVersion": "11.6", "version": "11.6", "symlinks": ["11.6_beta"] },
|
||||||
{ "localVersion": "11.5", "version": "11.5" },
|
{ "localVersion": "11.5", "version": "11.5", "symlinks": ["11.5_beta"] },
|
||||||
{ "localVersion": "11.4", "version": "11.4.1" },
|
{ "localVersion": "11.4", "version": "11.4.1", "symlinks": ["11.4_beta"] },
|
||||||
{ "localVersion": "11.3", "version": "11.3.1", "symlinks": ["11.3"] },
|
{ "localVersion": "11.3", "version": "11.3.1", "symlinks": ["11.3", "11.3_beta"] },
|
||||||
{ "localVersion": "11.2", "version": "11.2.1", "symlinks": ["11.2"] },
|
{ "localVersion": "11.2", "version": "11.2.1", "symlinks": ["11.2", "11.2_beta"] },
|
||||||
{ "localVersion": "11.1", "version": "11.1" },
|
{ "localVersion": "11.1", "version": "11.1", "symlinks": ["11.1_beta"] },
|
||||||
{ "localVersion": "11.0", "version": "11", "symlinks": ["11"] },
|
{ "localVersion": "11.0", "version": "11", "symlinks": ["11"] },
|
||||||
{ "localVersion": "10.3", "version": "10.3" }
|
{ "localVersion": "10.3", "version": "10.3", "symlinks": ["10.3_beta"] }
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
"xamarin": {
|
"xamarin": {
|
||||||
|
|||||||
Reference in New Issue
Block a user