mirror of
https://github.com/actions/runner-images.git
synced 2025-12-10 19:16:48 +00:00
* [ubuntu] Cleanup bash scripts * Fix ms-repos lsb_release * Fix install-bicep url * Fix install-nvm
94 lines
3.5 KiB
Bash
94 lines
3.5 KiB
Bash
#!/bin/bash -e
|
|
################################################################################
|
|
## File: install-pypy.sh
|
|
## Desc: Install PyPy
|
|
################################################################################
|
|
|
|
# Source the helpers for use with the script
|
|
source $HELPER_SCRIPTS/install.sh
|
|
|
|
# This function installs PyPy using the specified arguments:
|
|
# $1=package_url
|
|
install_pypy() {
|
|
local package_url=$1
|
|
|
|
package_tar_name=$(echo "$package_url" | awk -F/ '{print $NF}')
|
|
package_name=${package_tar_name/.tar.bz2/}
|
|
|
|
echo "Downloading tar archive '$package_name'"
|
|
package_tar_temp_path=$(download_with_retry $package_url)
|
|
|
|
echo "Expand '$package_name' to the /tmp folder"
|
|
tar xf "$package_tar_temp_path" -C /tmp
|
|
|
|
# Get Python version
|
|
major_version=$(echo ${package_name/pypy/} | cut -d. -f1)
|
|
python_major="python$major_version"
|
|
|
|
if [ $major_version != 2 ]; then
|
|
pypy_major="pypy$major_version"
|
|
else
|
|
pypy_major="pypy"
|
|
fi
|
|
|
|
package_temp_folder="/tmp/$package_name"
|
|
python_full_version=$("$package_temp_folder/bin/$pypy_major" -c "import sys;print('{}.{}.{}'.format(sys.version_info[0],sys.version_info[1],sys.version_info[2]))")
|
|
pypy_full_version=$("$package_temp_folder/bin/$pypy_major" -c "import sys;print('{}.{}.{}'.format(*sys.pypy_version_info[0:3]))")
|
|
echo "Put '$pypy_full_version' to PYPY_VERSION file"
|
|
echo $pypy_full_version > "$package_temp_folder/PYPY_VERSION"
|
|
|
|
# PyPy folder structure
|
|
pypy_toolcache_path=$AGENT_TOOLSDIRECTORY/PyPy
|
|
pypy_toolcache_version_path=$pypy_toolcache_path/$python_full_version
|
|
pypy_toolcache_version_arch_path=$pypy_toolcache_version_path/x64
|
|
|
|
echo "Check if PyPy hostedtoolcache folder exist..."
|
|
if [ ! -d $pypy_toolcache_path ]; then
|
|
mkdir -p $pypy_toolcache_path
|
|
fi
|
|
|
|
echo "Create PyPy '$pypy_toolcache_version_path' folder"
|
|
mkdir $pypy_toolcache_version_path
|
|
|
|
echo "Move PyPy '$package_temp_folder' binaries to '$pypy_toolcache_version_arch_path' folder"
|
|
mv $package_temp_folder $pypy_toolcache_version_arch_path
|
|
|
|
echo "Create additional symlinks (Required for UsePythonVersion Azure DevOps task)"
|
|
cd $pypy_toolcache_version_arch_path/bin
|
|
|
|
# Starting from PyPy 7.3.4 these links are already included in the package
|
|
[ -f ./$python_major ] || ln -s $pypy_major $python_major
|
|
[ -f ./python ] || ln -s $python_major python
|
|
|
|
chmod +x ./python ./$python_major
|
|
|
|
echo "Install latest Pip"
|
|
./python -m ensurepip
|
|
./python -m pip install --ignore-installed pip
|
|
|
|
echo "Create complete file"
|
|
touch $pypy_toolcache_version_path/x64.complete
|
|
|
|
echo "Remove '$package_tar_temp_path'"
|
|
rm -f $package_tar_temp_path
|
|
}
|
|
|
|
# Installation PyPy
|
|
pypy_versions_json=$(curl -fsSL https://downloads.python.org/pypy/versions.json)
|
|
toolset_versions=$(get_toolset_value '.toolcache[] | select(.name | contains("PyPy")) | .versions[]')
|
|
|
|
for toolset_version in $toolset_versions; do
|
|
latest_major_pypy_version=$(echo $pypy_versions_json |
|
|
jq -r --arg toolset_version $toolset_version '.[]
|
|
| select((.python_version | startswith($toolset_version)) and .stable == true).files[]
|
|
| select(.arch == "x64" and .platform == "linux").download_url' | head -1)
|
|
if [[ -z "$latest_major_pypy_version" ]]; then
|
|
echo "Failed to get PyPy version '$toolset_version'"
|
|
exit 1
|
|
fi
|
|
|
|
install_pypy $latest_major_pypy_version
|
|
done
|
|
|
|
chown -R "$SUDO_USER:$SUDO_USER" "$AGENT_TOOLSDIRECTORY/PyPy"
|