2020-05-27 16:23:52 +05:30
# Function to setup environment for self-hosted runners.
2020-11-08 13:06:21 +05:30
self_hosted_helper( ) {
if ! command -v brew >/dev/null; then
2020-07-26 15:48:19 +05:30
step_log "Setup Brew"
2020-11-11 02:23:45 +05:30
get -q -e "/tmp/install.sh" "https://raw.githubusercontent.com/Homebrew/install/master/install.sh" && /tmp/install.sh >/dev/null 2>& 1
2020-11-08 13:06:21 +05:30
add_log " ${ tick : ? } " "Brew" "Installed Homebrew"
2020-05-27 16:23:52 +05:30
fi
}
2021-08-24 16:14:52 +05:30
# Helper function to disable an extension.
disable_extension_helper( ) {
2021-08-25 19:00:52 +05:30
local extension = $1
local disable_dependents = ${ 2 :- false }
if [ " $disable_dependents " = "true" ] ; then
disable_extension_dependents " $extension "
fi
2021-04-03 05:13:18 +05:30
sudo sed -Ei '' " /=(.*\/)?\"? $extension (.so)? $/d " " ${ ini_file : ? } "
2021-08-24 16:14:52 +05:30
sudo rm -rf " $scan_dir " /*" $extension " *
2020-01-30 12:03:30 +05:30
}
2021-05-27 20:45:47 +05:30
# Function to fetch a brew tap.
2020-12-23 13:59:22 +05:30
fetch_brew_tap( ) {
tap = $1
tap_user = $( dirname " $tap " )
tap_name = $( basename " $tap " )
mkdir -p " $tap_dir / $tap_user "
get -s -n "" " https://github.com/ $tap /archive/master.tar.gz " | sudo tar -xzf - -C " $tap_dir / $tap_user "
if [ -d " $tap_dir / $tap_user / $tap_name -master " ] ; then
sudo mv " $tap_dir / $tap_user / $tap_name -master " " $tap_dir / $tap_user / $tap_name "
fi
}
2020-11-25 22:46:59 +05:30
# Function to add a brew tap.
add_brew_tap( ) {
tap = $1
if ! [ -d " $tap_dir / $tap " ] ; then
2020-12-23 13:59:22 +05:30
if [ " ${ runner : ? } " = "self-hosted" ] ; then
2021-08-18 05:48:04 +05:30
brew tap " $tap " >/dev/null 2>& 1
2020-12-23 13:59:22 +05:30
else
fetch_brew_tap " $tap " >/dev/null 2>& 1
if ! [ -d " $tap_dir / $tap " ] ; then
2021-08-18 05:48:04 +05:30
brew tap " $tap " >/dev/null 2>& 1
2020-12-23 13:59:22 +05:30
fi
2020-12-14 16:42:15 +05:30
fi
2020-11-25 22:46:59 +05:30
fi
}
2020-06-19 04:09:13 +05:30
# Function to install a php extension from shivammathur/extensions tap.
add_brew_extension( ) {
2020-12-24 18:20:42 +05:30
formula = $1
2020-11-08 13:06:21 +05:30
prefix = $2
2021-02-10 05:12:37 +05:30
extension = " $( echo " $formula " | sed -E "s/pecl_|[0-9]//g" ) "
2020-11-08 13:06:21 +05:30
enable_extension " $extension " " $prefix "
if check_extension " $extension " ; then
add_log " ${ tick : ? } " " $extension " "Enabled"
else
2020-12-23 13:59:22 +05:30
add_brew_tap shivammathur/homebrew-php
2020-11-25 22:46:59 +05:30
add_brew_tap shivammathur/homebrew-extensions
2021-02-10 05:12:37 +05:30
sudo mv " $tap_dir " /shivammathur/homebrew-extensions/.github/deps/" $formula " /* " $tap_dir /homebrew/homebrew-core/Formula/ " 2>/dev/null || true
2021-05-15 18:27:18 +05:30
update_dependencies >/dev/null 2>& 1
2021-03-08 18:33:43 +05:30
brew install -f " $formula @ $version " >/dev/null 2>& 1
2020-12-24 18:20:42 +05:30
sudo cp " $brew_prefix /opt/ $formula @ $version / $extension .so " " $ext_dir "
2020-11-08 13:06:21 +05:30
add_extension_log " $extension " "Installed and enabled"
2020-06-19 04:09:13 +05:30
fi
}
2021-05-27 20:45:47 +05:30
# Function to setup extensions.
2020-02-23 19:00:40 +05:30
add_extension( ) {
extension = $1
2020-11-08 13:06:21 +05:30
prefix = $2
enable_extension " $extension " " $prefix "
if check_extension " $extension " ; then
add_log " ${ tick : ? } " " $extension " "Enabled"
2020-02-23 09:44:33 +05:30
else
2021-07-10 00:50:50 +05:30
if [ [ " $version " = ~ ${ old_versions : ? } ] ] && [ " $extension " = "imagick" ] ; then
run_script "php5-darwin" " ${ version /./ } " " $extension " >/dev/null 2>& 1
else
pecl_install " $extension " >/dev/null 2>& 1 &&
2020-11-08 13:06:21 +05:30
if [ [ " $version " = ~ ${ old_versions : ? } ] ] ; then echo " $prefix = $ext_dir / $extension .so " >>" $ini_file " ; fi
2021-07-10 00:50:50 +05:30
fi
2020-11-08 13:06:21 +05:30
add_extension_log " $extension " "Installed and enabled"
2020-10-23 20:34:56 +05:30
fi
2019-12-27 06:56:49 +05:30
}
2020-09-28 10:58:02 +05:30
# Function to handle request to add phpize and php-config.
add_devtools( ) {
tool = $1
2020-11-08 13:06:21 +05:30
add_log " ${ tick : ? } " " $tool " " Added $tool $semver "
2020-01-30 12:03:30 +05:30
}
2020-05-27 16:23:52 +05:30
# Function to handle request to add PECL.
2019-12-27 06:56:49 +05:30
add_pecl( ) {
2021-04-03 05:13:18 +05:30
configure_pecl >/dev/null 2>& 1
2020-09-28 10:58:02 +05:30
pecl_version = $( get_tool_version "pecl" "version" )
2020-11-08 13:06:21 +05:30
add_log " ${ tick : ? } " "PECL" " Found PECL $pecl_version "
2019-12-27 06:56:49 +05:30
}
2021-05-27 20:45:47 +05:30
# Function to link all libraries of a formula.
2021-02-28 19:20:28 +05:30
link_libraries( ) {
formula = $1
formula_prefix = " $( brew --prefix " $formula " ) "
sudo mkdir -p " $formula_prefix " /lib
2021-03-08 19:13:00 +05:30
for lib in " $formula_prefix " /lib/*.dylib; do
lib_name = $( basename " $lib " )
2021-05-27 20:12:50 +05:30
sudo cp -a " $lib " " $brew_prefix /lib/ $lib_name " 2>/dev/null || true
2021-03-08 19:13:00 +05:30
done
2021-02-28 19:20:28 +05:30
}
2021-05-27 20:45:47 +05:30
# Patch brew to overwrite packages.
2021-05-27 20:12:50 +05:30
patch_brew( ) {
2021-05-27 22:00:47 +05:30
formula_installer = " $brew_repo " /Library/Homebrew/formula_installer.rb
code = " keg.link(verbose: verbose?"
sudo sed -i '' " s/ $code )/ $code , overwrite: true)/ " " $formula_installer "
2021-05-27 20:12:50 +05:30
# shellcheck disable=SC2064
2021-05-27 22:00:47 +05:30
trap " sudo sed -i '' 's/ $code , overwrite: true)/ $code )/' $formula_installer " exit
2021-05-27 20:12:50 +05:30
}
2021-05-27 20:45:47 +05:30
# Helper function to update the dependencies.
2021-02-28 19:20:28 +05:30
update_dependencies_helper( ) {
2021-05-15 18:27:18 +05:30
dependency = $1
get -q -n " $tap_dir /homebrew/homebrew-core/Formula/ $dependency .rb " " https://raw.githubusercontent.com/Homebrew/homebrew-core/master/Formula/ $dependency .rb "
link_libraries " $dependency "
2021-02-28 19:20:28 +05:30
}
2020-10-23 07:11:23 +05:30
# Function to update dependencies.
update_dependencies( ) {
2021-05-15 18:27:18 +05:30
if ! [ -e /tmp/update_dependencies ] && [ " ${ runner : ? } " != "self-hosted" ] && [ " ${ ImageOS :- } " != "" ] && [ " ${ ImageVersion :- } " != "" ] ; then
2021-05-27 20:12:50 +05:30
patch_brew
2021-05-15 18:27:18 +05:30
while read -r dependency; do
update_dependencies_helper " $dependency " &
2020-11-08 13:06:21 +05:30
to_wait += ( $! )
done <" $tap_dir /shivammathur/homebrew-php/.github/deps/ ${ ImageOS : ? } _ ${ ImageVersion : ? } "
2020-10-23 07:11:23 +05:30
wait " ${ to_wait [@] } "
2021-05-15 18:27:18 +05:30
echo '' | sudo tee /tmp/update_dependencies >/dev/null 2>& 1
fi
}
2021-05-27 20:45:47 +05:30
# Function to fix dependencies on install PHP version.
2021-05-15 18:27:18 +05:30
fix_dependencies( ) {
broken_deps_paths = $( php -v 2>& 1 | grep -Eo '/opt/[a-zA-Z0-9@\.]+' )
if [ " x $broken_deps_paths " != "x" ] ; then
update_dependencies
IFS = " " read -r -a formulae <<< " $( echo " $broken_deps_paths " | tr '\n' ' ' | sed 's|/opt/||g' 2>& 1) $php_formula "
brew reinstall " ${ formulae [@] } "
brew link --force --overwrite " $php_formula " || true
2020-10-23 07:11:23 +05:30
fi
}
2021-05-04 23:15:13 +05:30
# Function to get PHP version if it is already installed using Homebrew.
get_brewed_php( ) {
php_cellar = " $brew_prefix " /Cellar/php
if [ -d " $php_cellar " ] && ! [ [ " $( find " $php_cellar " -maxdepth 1 -name " $version * " | wc -l 2>/dev/null) " -eq 0 ] ] ; then
php-config --version 2>/dev/null | cut -c 1-3
else
echo 'false' ;
fi
}
2020-11-08 13:06:21 +05:30
# Function to setup PHP 5.6 and newer using Homebrew.
add_php( ) {
2020-02-21 07:58:19 +05:30
action = $1
2021-05-04 23:15:13 +05:30
existing_version = $2
2020-11-25 22:46:59 +05:30
add_brew_tap shivammathur/homebrew-php
2020-10-23 07:11:23 +05:30
update_dependencies
2021-05-04 23:15:13 +05:30
if [ " $existing_version " != "false" ] ; then
( [ " $action " = "upgrade" ] && brew upgrade -f " $php_formula " ) || brew unlink " $php_formula "
2020-05-06 06:53:25 +05:30
else
2021-05-04 23:15:13 +05:30
brew install -f " $php_formula "
2020-04-30 17:02:17 +05:30
fi
2021-05-04 23:15:13 +05:30
brew link --force --overwrite " $php_formula "
2020-02-21 07:58:19 +05:30
}
2021-07-12 17:00:40 +05:30
# Function to get extra version.
php_extra_version( ) {
if [ [ ${ version : ? } = ~ ${ nightly_versions : ? } ] ] ; then
echo " ( $( brew cat " $php_formula " | grep -Eo "commit=[0-9a-zA-Z]+" | cut -d'=' -f 2) ) "
fi
}
2021-05-27 20:45:47 +05:30
# Function to Setup PHP.
2020-11-08 13:06:21 +05:30
setup_php( ) {
step_log "Setup PHP"
2021-05-04 23:15:13 +05:30
existing_version = $( get_brewed_php)
2020-11-08 13:06:21 +05:30
if [ [ " $version " = ~ ${ old_versions : ? } ] ] ; then
2020-11-11 02:23:45 +05:30
run_script "php5-darwin" " ${ version /./ } " >/dev/null 2>& 1
2020-11-08 13:06:21 +05:30
status = "Installed"
elif [ " $existing_version " != " $version " ] ; then
2021-05-04 23:15:13 +05:30
add_php "install" " $existing_version " >/dev/null 2>& 1
2020-11-08 13:06:21 +05:30
status = "Installed"
elif [ " $existing_version " = " $version " ] && [ " ${ update : ? } " = "true" ] ; then
2021-05-04 23:15:13 +05:30
add_php "upgrade" " $existing_version " >/dev/null 2>& 1
2020-11-08 13:06:21 +05:30
status = "Updated to"
else
status = "Found"
2021-05-15 18:27:18 +05:30
fix_dependencies >/dev/null 2>& 1
2020-11-08 13:06:21 +05:30
fi
ini_file = $( php -d "date.timezone=UTC" --ini | grep "Loaded Configuration" | sed -e "s|.*:s*||" | sed "s/ //g" )
sudo chmod 777 " $ini_file " " ${ tool_path_dir : ? } "
2020-12-17 20:49:20 +05:30
configure_php
2020-11-08 13:06:21 +05:30
ext_dir = $( php -i | grep -Ei "extension_dir => /" | sed -e "s|.*=> s*||" )
scan_dir = $( php --ini | grep additional | sed -e "s|.*: s*||" )
sudo mkdir -m 777 -p " $ext_dir " " $HOME /.composer "
2021-07-12 17:00:40 +05:30
semver = $( php_semver)
extra_version = $( php_extra_version)
2020-12-23 13:59:22 +05:30
if [ " ${ semver %.* } " != " $version " ] ; then
2021-08-24 16:14:52 +05:30
add_log " ${ cross : ? } " "PHP" " Could not setup PHP $version "
2020-12-17 04:20:39 +05:30
exit 1
fi
2021-07-12 17:00:40 +05:30
2020-11-08 13:06:21 +05:30
sudo cp " $dist " /../src/configs/*.json " $RUNNER_TOOL_CACHE / "
2021-07-12 17:00:40 +05:30
echo " ::set-output name=php-version:: $semver "
add_log " $tick " "PHP" " $status PHP $semver $extra_version "
2020-11-08 13:06:21 +05:30
}
2019-12-20 18:29:05 +05:30
# Variables
version = $1
2020-10-05 06:15:50 +05:30
dist = $2
2021-05-15 18:27:18 +05:30
php_formula = shivammathur/php/php@" $version "
2020-11-25 22:46:59 +05:30
brew_prefix = " $( brew --prefix) "
2020-12-25 21:59:40 +05:30
brew_repo = " $( brew --repository) "
tap_dir = " $brew_repo " /Library/Taps
2021-02-20 10:15:25 +05:30
scripts = " ${ dist } " /../src/scripts
2020-12-25 21:59:40 +05:30
export HOMEBREW_CHANGE_ARCH_TO_ARM = 1
2021-08-15 10:29:12 +05:30
export HOMEBREW_DEVELOPER = 1
2020-11-08 13:06:21 +05:30
export HOMEBREW_NO_INSTALL_CLEANUP = 1
export HOMEBREW_NO_AUTO_UPDATE = 1
2021-02-28 19:20:28 +05:30
export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK = 1
2020-05-06 06:53:25 +05:30
2020-11-08 13:06:21 +05:30
# shellcheck source=.
2021-03-17 08:46:13 +05:30
. " ${ scripts : ? } " /ext/source.sh
2021-02-20 10:15:25 +05:30
. " ${ scripts : ? } " /tools/add_tools.sh
. " ${ scripts : ? } " /common.sh
2020-05-27 16:23:52 +05:30
read_env
2020-11-08 13:06:21 +05:30
self_hosted_setup
setup_php