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
108 lines
3.7 KiB
Bash
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
|
|
}
|