Files
cache-extensions/src/scripts/linux.sh
Shivam Mathur 65ea75914e Add extension dependency support for Darwin
Refactor extension.sh to 3 scripts

Update dependencies

Minor fixes in cache.ts and tests

Improve get_api_version in cache.sh

Improve logs

Use @actions/cache to cache dependencies

Refactor linux.sh

Refactor Node.js code

Do not setup dependencies for old PHP

Remove duplicate dependency extensions in linux

Bump version to 1.6.0
2021-07-03 16:12:27 +05:30

108 lines
3.7 KiB
Bash

link_apt_fast() {
if ! command -v apt-fast >/dev/null; then
sudo ln -sf /usr/bin/apt-get /usr/bin/apt-fast
fi
}
fetch_package() {
if ! [ -e /tmp/Packages ]; then
. /etc/lsb-release
deb_build_arch=$(dpkg-architecture -q DEB_BUILD_ARCH)
curl -o /tmp/Packages.gz -sL "http://ppa.launchpad.net/ondrej/php/ubuntu/dists/$DISTRIB_CODENAME/main/binary-$deb_build_arch/Packages.gz"
gzip -df /tmp/Packages.gz
fi
}
get_dependencies() {
package=$1
prefix=$2
sed -e '/Package:\s'"$package$"'/,/^\s*$/!d' /tmp/Packages | grep -Eo "^Depends.*" | tr ',' '\n' | awk -v ORS='' '/^\s'"$prefix"'/{print$0}' | sed -e 's/([^()]*)//g' | sort | uniq | xargs echo -n
}
get_package_link() {
package=$1
trunk="http://ppa.launchpad.net/ondrej/php/ubuntu"
file=$(sed -e '/Package:\s'"$package$"'/,/^\s*$/!d' /tmp/Packages | grep -Eo "^Filename.*" | cut -d' ' -f 2 | tr -d '\r')
echo "$trunk/$file"
}
setup_extensions_helper() {
dependency_extension=$1
extension_dir=$2
cached_extension="${deps_cache_directory:?}/$dependency_extension.so"
if ! [ -e "$extension_dir/$dependency_extension.so" ]; then
if ! [ -e "$cached_extension" ]; then
extension_package_link="$(get_package_link "php${version:?}-$dependency_extension")"
sudo curl -H "User-Agent: Debian APT-HTTP/GHA(ce)" -o "/tmp/$dependency_extension".deb -sL "$extension_package_link"
sudo dpkg-deb -x "/tmp/$dependency_extension".deb /
sudo cp "$extension_dir/$dependency_extension.so" "$cached_extension"
fix_ownership "$extension_dir"
else
sudo cp "$cached_extension" "$extension_dir/"
fi
fi
}
setup_extensions() {
extension_dir=$1
IFS=' ' read -r -a dependency_extension_array <<<"$(echo "$2" | xargs -n1 | sort | uniq | xargs)"
to_wait=()
for dependency_extension in "${dependency_extension_array[@]}"; do
setup_extensions_helper "$dependency_extension" "$extension_dir" &
to_wait+=($!)
done
wait "${to_wait[@]}"
add_log "${tick:?}" "${dependency_extension_array[@]}"
}
filter_libraries() {
libraries="$(echo "$1" | xargs -n1 | sort | uniq | xargs)"
for library in $libraries; do
if grep -i -q -w "$library" "${script_dir:?}"/../lists/"$DISTRIB_CODENAME"-libs; then
libraries=${libraries//$library/}
fi
done
echo "$libraries"
}
setup_libraries() {
libraries=$1
if [[ -n "${libraries// /}" ]]; then
libraries=$(filter_libraries "$libraries")
if [[ -n "${libraries// /}" ]]; then
step_log "Setup libraries"
IFS=' ' read -r -a libraries_array <<<"$libraries"
link_apt_fast
echo "::group::Logs to set up required libraries"
sudo DEBIAN_FRONTEND=noninteractive apt-fast install --no-install-recommends --no-upgrade -y "${libraries_array[@]}"
ec="$?"
echo "::endgroup::"
if [ "$ec" -eq "0" ]; then mark="${tick:?}"; else mark="${cross:?}"; fi
add_log "$mark" "${libraries_array[@]}"
fi
fi
}
setup_dependencies() {
extensions=$1
extension_dir=$2
[[ -z "${extensions// }" ]] && return
IFS=' ' read -r -a extensions_array <<<"$(echo "$extensions" | sed -e "s/pdo[_-]//g" -Ee "s/^|,\s*/ php$version-/g")"
. /etc/lsb-release
sudo rm -rf "${ext_config_directory:?}" || true
libraries=""
extension_packages=""
for extension_package in "${extensions_array[@]}"; do
fetch_package
libraries="$libraries $(get_dependencies "$extension_package" "lib")"
extension_packages="$extension_packages $(get_dependencies "$extension_package" "php$version-")"
extension_packages="${extension_packages//php$version-common/}"
done
if [[ -n "${libraries// /}" ]]; then
setup_libraries "$libraries"
fi
if [[ -n "${extension_packages// /}" ]]; then
setup_extensions "$extension_dir" "${extension_packages//php$version-/}"
fi
}