mirror of
https://github.com/shivammathur/setup-php.git
synced 2026-09-25 03:15:25 +07:00
88 lines
3.9 KiB
Bash
88 lines
3.9 KiB
Bash
# Optional macOS extension archives. Downloads overlap PHP installation; the
|
|
# PHP-only path never sources this file or contacts the extension cache.
|
|
start_extension_cache_downloads() {
|
|
extension_cache_dir=$(mktemp -d "${RUNNER_TEMP:-/tmp}/setup-php-extensions.XXXXXX") || return 0
|
|
(
|
|
cache_installer="$extension_cache_dir/install-extensions.cjs"
|
|
cache_primary="https://github.com/shivammathur/php-darwin/releases/download/extensions"
|
|
cache_mirror="https://artifacts.php-darwin.setup-php.com/extensions"
|
|
curl -fsSL --retry 0 --connect-timeout 3 --max-time 3 --max-filesize 2000000 \
|
|
"$cache_primary/install-extensions.cjs" -o "$cache_installer" ||
|
|
curl -fsSL --retry 0 --connect-timeout 3 --max-time 10 --max-filesize 2000000 \
|
|
"$cache_mirror/install-extensions.cjs" -o "$cache_installer" || exit 0
|
|
IFS=' ' read -r -a cache_extensions <<< "$SETUP_PHP_EXTENSION_PACKS"
|
|
"$SETUP_PHP_NODE" "$cache_installer" prefetch "$extension_cache_dir" \
|
|
"$version" "$debug" "$ts" "$(uname -m)" "${cache_extensions[@]}"
|
|
) > "$extension_cache_dir/download.log" 2>&1 &
|
|
extension_cache_pid=$!
|
|
}
|
|
|
|
finish_extension_cache_downloads() {
|
|
[ -n "${extension_cache_pid:-}" ] || return 0
|
|
wait "$extension_cache_pid" || true
|
|
extension_cache_pid=
|
|
if [[ "${verbose:-${VERBOSE:-}}" =~ ^(true|v{1,3})$ ]]; then
|
|
cat "$extension_cache_dir/download.log"
|
|
fi
|
|
if [ ! -s "$extension_cache_dir/install-extensions.cjs" ]; then
|
|
rm -rf "$extension_cache_dir"
|
|
extension_cache_dir=
|
|
return 0
|
|
fi
|
|
local extension variable value index
|
|
local cache_install_names=() cache_install_pids=() cache_enable_names=()
|
|
for extension in $SETUP_PHP_EXTENSION_PACKS; do
|
|
[ -s "$extension_cache_dir/$extension.json" ] || continue
|
|
# Packs own separate directories and module names. Extract and validate them
|
|
# concurrently, then import their environments only after each one succeeds.
|
|
"$SETUP_PHP_NODE" "$extension_cache_dir/install-extensions.cjs" install "$extension_cache_dir" "$extension" \
|
|
> "$extension_cache_dir/$extension.install.log" 2>&1 &
|
|
cache_install_names+=("$extension")
|
|
cache_install_pids+=("$!")
|
|
done
|
|
for index in "${!cache_install_pids[@]}"; do
|
|
extension=${cache_install_names[$index]}
|
|
if wait "${cache_install_pids[$index]}"; then
|
|
cat "$extension_cache_dir/$extension.install.log"
|
|
while IFS='=' read -r variable value; do
|
|
case "$variable" in
|
|
MAGICK_CONFIGURE_PATH|MAGICK_CODER_MODULE_PATH|MAGICK_FILTER_MODULE_PATH|SASL_PATH)
|
|
add_env "$variable" "$value"
|
|
;;
|
|
esac
|
|
done < "$extension_cache_dir/$extension.env"
|
|
# Store the dependency names in shell variables; the download directory
|
|
# can be removed before the action enables its requested extensions.
|
|
if [ "$extension" = memcached ]; then
|
|
extension_cache_memcached_dependencies='igbinary msgpack'
|
|
cache_enable_names+=(igbinary msgpack)
|
|
else
|
|
cache_enable_names+=("$extension")
|
|
fi
|
|
else
|
|
cat "$extension_cache_dir/$extension.install.log"
|
|
printf 'setup-php: %s cache unavailable for this PHP; using the existing installer\n' "$extension"
|
|
fi
|
|
done
|
|
rm -rf "$extension_cache_dir"
|
|
extension_cache_dir=
|
|
# Use the normal enabling rules, but overlap independent modules and refresh
|
|
# the loaded-module list once so later extension checks do not repeat php -m.
|
|
if [ "${#cache_enable_names[@]}" -gt 0 ]; then
|
|
enable_extensions "${cache_enable_names[@]}"
|
|
if [ -n "${extension_cache_memcached_dependencies:-}" ]; then
|
|
enable_extension memcached extension
|
|
fi
|
|
php -m > "/tmp/php${version}_extensions"
|
|
fi
|
|
}
|
|
|
|
enable_extension_cache_dependencies() {
|
|
if [ "$1" = memcached ] && [ -n "${extension_cache_memcached_dependencies:-}" ]; then
|
|
local dependency
|
|
for dependency in $extension_cache_memcached_dependencies; do
|
|
enable_extension "$dependency" extension
|
|
done
|
|
fi
|
|
}
|