linux_extension_dir() { apiv=$1 old_versions_linux="5.[4-5]" if [ "$version" = "5.3" ]; then echo "/home/runner/php/5.3.29/lib/php/extensions/no-debug-non-zts-$apiv" elif [[ "$version" =~ $old_versions_linux ]]; then echo "/usr/lib/php5/$apiv" elif [ "$version" = "8.0" ]; then echo "/home/runner/php/8.0/lib/php/extensions/no-debug-non-zts-$apiv" else echo "/usr/lib/php/$apiv" fi } darwin_extension_dir() { apiv=$1 old_versions_darwin="5.[3-5]" if [[ "$version" =~ $old_versions_darwin ]]; then echo "/usr/local/php5/lib/php/extensions/no-debug-non-zts-$apiv" else echo "/usr/local/lib/php/pecl/$apiv" fi } get_apiv() { case $version in 5.3) echo "20090626" ;; 5.4) echo "20100525" ;; 5.5) echo "20121212" ;; 5.6) echo "20131226" ;; 7.0) echo "20151012" ;; 7.1) echo "20160303" ;; 7.2) echo "20170718" ;; 7.3) echo "20180731" ;; *) if [ "$version" = "8.0" ]; then php_h="https://raw.githubusercontent.com/php/php-src/master/main/php.h" else semver=$(curl -sSL --retry 5 https://github.com/php/php-src/releases | grep "$flags" "(php-$version.[0-9]+)".zip | head -n 1 | grep "$flags" '[0-9]+\.[0-9]+\.[0-9]+') php_h="https://raw.githubusercontent.com/php/php-src/PHP-$semver/main/php.h" fi curl -sSL --retry 5 "$php_h" | grep "PHP_API_VERSION" | cut -d' ' -f 3 ;; esac } extensions=$1 key=$2 version=$3 os=$(uname -s) if [ "$os" = "Linux" ]; then os=$os-$(lsb_release -s -c) flags='-Po' apiv=$(get_apiv) dir=$(linux_extension_dir "$apiv") sudo mkdir -p "$dir" && sudo chown -R "$USER":"$(id -g -n)" "$(dirname "$dir")" debconf_fix="DEBIAN_FRONTEND=noninteractive" apt_install="sudo $debconf_fix apt-fast install -y" IFS=' ' read -r -a extension_array <<< "${extensions//,/ }" for extension in "${extension_array[@]}"; do # shellcheck disable=SC2046 $apt_install $(apt-cache depends php"$version"-"$extension" 2>/dev/null | awk '/Depends:/{print$2}') >/dev/null 2>&1 done elif [ "$os" = "Darwin" ]; then flags='-Eo' apiv=$(get_apiv) dir=$(darwin_extension_dir "$apiv") sudo mkdir -p "$dir" && sudo chown -R "$USER":"$(id -g -n)" "$(dirname "$dir")" else os="Windows" dir='C:\\tools\\php\\ext' fi key="$os"-ext-"$version"-$(echo -n "$extensions-$key" | openssl dgst -sha256 | cut -d ' ' -f 2) echo "::set-output name=dir::$dir" echo "::set-output name=key::$key"