setup-php 2.16.0 → 2.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +154 -141
- package/lib/config.d.ts +3 -0
- package/lib/config.js +72 -0
- package/lib/config.js.map +1 -0
- package/lib/coverage.d.ts +5 -0
- package/lib/coverage.js +98 -0
- package/lib/coverage.js.map +1 -0
- package/lib/extensions.d.ts +4 -0
- package/lib/extensions.js +215 -0
- package/lib/extensions.js.map +1 -0
- package/lib/fetch.d.ts +1 -0
- package/lib/fetch.js +63 -0
- package/lib/fetch.js.map +1 -0
- package/lib/install.d.ts +2 -0
- package/lib/install.js +76 -0
- package/lib/install.js.map +1 -0
- package/lib/tools.d.ts +23 -0
- package/lib/tools.js +368 -0
- package/lib/tools.js.map +1 -0
- package/lib/utils.d.ts +21 -0
- package/lib/utils.js +262 -0
- package/lib/utils.js.map +1 -0
- package/package.json +18 -17
- package/src/config.ts +8 -8
- package/src/configs/brew_extensions +1 -0
- package/src/configs/composer.env +2 -0
- package/src/configs/ini/jit.ini +3 -0
- package/src/configs/ini/php.ini +2 -0
- package/src/configs/ini/xdebug.ini +1 -0
- package/src/configs/os_releases.csv +2 -0
- package/src/configs/php_packages +12 -0
- package/src/configs/tools.json +48 -26
- package/src/configs/tools_schema.json +11 -0
- package/src/coverage.ts +24 -49
- package/src/extensions.ts +23 -19
- package/src/fetch.ts +54 -0
- package/src/install.ts +27 -40
- package/src/scripts/darwin.sh +58 -30
- package/src/scripts/extensions/add_extensions.ps1 +194 -0
- package/src/scripts/extensions/add_extensions.sh +184 -0
- package/src/scripts/{ext → extensions}/blackfire.ps1 +0 -0
- package/src/scripts/{ext → extensions}/blackfire.sh +0 -0
- package/src/scripts/{ext → extensions}/couchbase.sh +0 -0
- package/src/scripts/{ext → extensions}/cubrid.sh +3 -3
- package/src/scripts/{ext → extensions}/extension_map.php +36 -13
- package/src/scripts/{ext → extensions}/firebird.ps1 +0 -0
- package/src/scripts/{ext → extensions}/firebird.sh +0 -0
- package/src/scripts/{ext → extensions}/gearman.sh +0 -0
- package/src/scripts/{ext → extensions}/geos.sh +0 -0
- package/src/scripts/{ext → extensions}/http.ps1 +0 -0
- package/src/scripts/{ext → extensions}/http.sh +4 -15
- package/src/scripts/{ext → extensions}/intl.sh +0 -0
- package/src/scripts/{ext → extensions}/ioncube.ps1 +2 -2
- package/src/scripts/{ext → extensions}/ioncube.sh +2 -2
- package/src/scripts/{ext → extensions}/oci.ps1 +39 -14
- package/src/scripts/{ext → extensions}/oci.sh +3 -3
- package/src/scripts/{ext → extensions}/patches/firebird.sh +0 -0
- package/src/scripts/{ext → extensions}/patches/geos.sh +0 -0
- package/src/scripts/{ext → extensions}/patches/http.sh +0 -0
- package/src/scripts/{ext → extensions}/patches/pdo_oci.sh +0 -0
- package/src/scripts/{ext → extensions}/patches/phpize.sh +0 -0
- package/src/scripts/{ext → extensions}/patches/protobuf.sh +0 -0
- package/src/scripts/{ext → extensions}/phalcon.ps1 +0 -0
- package/src/scripts/{ext → extensions}/phalcon.sh +4 -5
- package/src/scripts/{ext → extensions}/source.sh +23 -22
- package/src/scripts/extensions/sqlsrv.sh +15 -0
- package/src/scripts/linux.sh +63 -33
- package/src/scripts/tools/add_tools.ps1 +220 -10
- package/src/scripts/tools/add_tools.sh +164 -17
- package/src/scripts/tools/grpc_php_plugin.ps1 +4 -4
- package/src/scripts/tools/grpc_php_plugin.sh +3 -3
- package/src/scripts/tools/ppa.sh +12 -9
- package/src/scripts/tools/protoc.ps1 +2 -2
- package/src/scripts/tools/protoc.sh +2 -2
- package/src/scripts/tools/symfony.ps1 +14 -0
- package/src/scripts/tools/symfony.sh +13 -0
- package/src/scripts/unix.sh +186 -0
- package/src/scripts/win32.ps1 +126 -340
- package/src/tools.ts +56 -82
- package/src/utils.ts +57 -145
- package/src/scripts/common.sh +0 -366
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
# Function to log result of a operation.
|
|
2
2
|
add_license_log() {
|
|
3
|
-
printf "
|
|
3
|
+
printf "$GROUP\033[34;1m%s \033[0m\033[90;1m%s \033[0m\n" "$ext" "Click to read the $ext related license information"
|
|
4
4
|
printf "Oracle Instant Client package is required for %s extension.\n" "$ext"
|
|
5
5
|
printf "It is provided under the Oracle Technology Network Development and Distribution License.\n"
|
|
6
6
|
printf "Refer to: \033[35;1m%s \033[0m\n" "https://www.oracle.com/downloads/licenses/instant-client-lic.html"
|
|
7
|
-
echo "
|
|
7
|
+
echo "$END_GROUP"
|
|
8
8
|
}
|
|
9
9
|
|
|
10
10
|
# Function to install instantclient and SDK.
|
|
@@ -62,4 +62,4 @@ add_oci() {
|
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
# shellcheck source=.
|
|
65
|
-
. "${scripts:?}"/
|
|
65
|
+
. "${scripts:?}"/extensions/patches/phpize.sh
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -4,11 +4,10 @@ add_phalcon_helper() {
|
|
|
4
4
|
if [ "$(uname -s)" = "Darwin" ]; then
|
|
5
5
|
add_brew_extension "$extension" extension
|
|
6
6
|
else
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
fi
|
|
7
|
+
packages=("php${version:?}-$extension")
|
|
8
|
+
[ "$extension" = "phalcon4" ] && packages+=("php${version:?}-psr")
|
|
9
|
+
add_ppa ondrej/php >/dev/null 2>&1 || update_ppa ondrej/php
|
|
10
|
+
check_package "${packages[0]}" && install_packages "${packages[@]}"
|
|
12
11
|
fi
|
|
13
12
|
}
|
|
14
13
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Function to parse extension environment variables
|
|
2
2
|
parse_args() {
|
|
3
|
-
extension=$1
|
|
3
|
+
local extension=$1
|
|
4
4
|
suffix=$(echo "$2" | tr '[:lower:]' '[:upper:]')
|
|
5
5
|
up_ext_name=$(echo "$extension" | tr '[:lower:]' '[:upper:]')
|
|
6
6
|
var="${extension}_${suffix}"
|
|
@@ -12,7 +12,7 @@ parse_args() {
|
|
|
12
12
|
|
|
13
13
|
# Function to log if a library is installed
|
|
14
14
|
add_lib_log() {
|
|
15
|
-
lib=$1
|
|
15
|
+
local lib=$1
|
|
16
16
|
if check_lib "$lib"; then
|
|
17
17
|
add_log "${tick:?}" "$lib" "Installed"
|
|
18
18
|
else
|
|
@@ -22,7 +22,7 @@ add_lib_log() {
|
|
|
22
22
|
|
|
23
23
|
# Function to check if a library is installed
|
|
24
24
|
check_lib() {
|
|
25
|
-
lib=$1
|
|
25
|
+
local lib=$1
|
|
26
26
|
if [ "$(uname -s)" = "Linux" ]; then
|
|
27
27
|
[ "x$(dpkg -s "$lib" 2>/dev/null | grep Status)" != "x" ]
|
|
28
28
|
else
|
|
@@ -32,7 +32,7 @@ check_lib() {
|
|
|
32
32
|
|
|
33
33
|
# Function to add a library on linux
|
|
34
34
|
add_linux_libs() {
|
|
35
|
-
lib=$1
|
|
35
|
+
local lib=$1
|
|
36
36
|
if ! check_lib "$lib"; then
|
|
37
37
|
install_packages "$lib" >/dev/null 2>&1 || true
|
|
38
38
|
fi
|
|
@@ -41,7 +41,7 @@ add_linux_libs() {
|
|
|
41
41
|
|
|
42
42
|
# Function to add a library on macOS
|
|
43
43
|
add_darwin_libs() {
|
|
44
|
-
lib=$1
|
|
44
|
+
local lib=$1
|
|
45
45
|
if ! check_lib "$lib"; then
|
|
46
46
|
brew install "$lib" >/dev/null 2>&1 || true
|
|
47
47
|
if [[ "$lib" = *@* ]]; then
|
|
@@ -53,7 +53,7 @@ add_darwin_libs() {
|
|
|
53
53
|
|
|
54
54
|
# Function to add required libraries
|
|
55
55
|
add_libs() {
|
|
56
|
-
all_libs=("$@")
|
|
56
|
+
local all_libs=("$@")
|
|
57
57
|
for lib in "${all_libs[@]}"; do
|
|
58
58
|
if [ "$(uname -s)" = "Linux" ]; then
|
|
59
59
|
add_linux_libs "$lib"
|
|
@@ -65,26 +65,27 @@ add_libs() {
|
|
|
65
65
|
|
|
66
66
|
# Function to run command in a group
|
|
67
67
|
run_group() {
|
|
68
|
-
command=$1
|
|
69
|
-
log=$2
|
|
68
|
+
local command=$1
|
|
69
|
+
local log=$2
|
|
70
70
|
echo "$command" | sudo tee ./run_group.sh >/dev/null 2>&1
|
|
71
|
-
echo "
|
|
71
|
+
echo "$GROUP$log"
|
|
72
72
|
. ./run_group.sh
|
|
73
73
|
rm ./run_group.sh
|
|
74
|
-
echo "
|
|
74
|
+
echo "$END_GROUP"
|
|
75
75
|
}
|
|
76
76
|
|
|
77
77
|
patch_extension() {
|
|
78
|
-
extension=$1
|
|
79
|
-
if [ -e "${scripts:?}"/
|
|
78
|
+
local extension=$1
|
|
79
|
+
if [ -e "${scripts:?}"/extensions/patches/"$extension".sh ]; then
|
|
80
80
|
# shellcheck source=.
|
|
81
|
-
. "${scripts:?}"/
|
|
81
|
+
. "${scripts:?}"/extensions/patches/"$extension".sh
|
|
82
82
|
patch_"${extension}"
|
|
83
83
|
fi
|
|
84
84
|
}
|
|
85
85
|
|
|
86
86
|
fetch_extension() {
|
|
87
|
-
|
|
87
|
+
local extension=$1
|
|
88
|
+
local fetch=$2
|
|
88
89
|
if [ "$fetch" = "clone" ]; then
|
|
89
90
|
run_group "git clone -nv $url/$org/$repo /tmp/$repo-$release" "git clone"
|
|
90
91
|
cd /tmp/"$repo-$release" || exit 1
|
|
@@ -109,13 +110,13 @@ fetch_extension() {
|
|
|
109
110
|
|
|
110
111
|
# Function to install extension from a git repository
|
|
111
112
|
add_extension_from_source() {
|
|
112
|
-
extension="${1/pecl_/}"
|
|
113
|
-
url=$2
|
|
114
|
-
org=$3
|
|
115
|
-
repo=$4
|
|
116
|
-
release=$5
|
|
117
|
-
prefix=$6
|
|
118
|
-
fetch=${7:-clone}
|
|
113
|
+
local extension="${1/pecl_/}"
|
|
114
|
+
local url=$2
|
|
115
|
+
local org=$3
|
|
116
|
+
local repo=$4
|
|
117
|
+
local release=$5
|
|
118
|
+
local prefix=$6
|
|
119
|
+
local fetch=${7:-clone}
|
|
119
120
|
slug="$extension-$release"
|
|
120
121
|
source="$url/$org/$repo"
|
|
121
122
|
libraries="$(parse_args "$extension" LIBS) $(parse_args "$extension" "$(uname -s)"_LIBS)"
|
|
@@ -127,7 +128,7 @@ add_extension_from_source() {
|
|
|
127
128
|
(
|
|
128
129
|
add_devtools phpize >/dev/null 2>&1
|
|
129
130
|
disable_extension_helper "$extension"
|
|
130
|
-
fetch_extension "$fetch"
|
|
131
|
+
fetch_extension "$extension" "$fetch"
|
|
131
132
|
if ! [ "$(find . -maxdepth 1 -name '*.m4' -exec grep -H 'PHP_NEW_EXTENSION' {} \; | wc -l)" != "0" ]; then
|
|
132
133
|
add_log "${cross:?}" "$source" "$source does not have a PHP extension"
|
|
133
134
|
else
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Function to get sqlsrv and pdo_sqlsrv version.
|
|
2
|
+
get_sqlsrv_version() {
|
|
3
|
+
if [[ "${version:?}" =~ 7.[0-2] ]]; then
|
|
4
|
+
echo '5.9.0'
|
|
5
|
+
else
|
|
6
|
+
echo '5.10.0beta2'
|
|
7
|
+
fi
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
# Function to install sqlsrv and pdo_sqlsrv.
|
|
11
|
+
add_sqlsrv() {
|
|
12
|
+
ext=$1
|
|
13
|
+
ext_version=$(get_sqlsrv_version)
|
|
14
|
+
add_pecl_extension "$ext" "$ext_version" extension
|
|
15
|
+
}
|
package/src/scripts/linux.sh
CHANGED
|
@@ -1,9 +1,13 @@
|
|
|
1
|
-
# Function to
|
|
2
|
-
|
|
1
|
+
# Function to add sudo
|
|
2
|
+
add_sudo() {
|
|
3
3
|
if ! command -v sudo >/dev/null; then
|
|
4
|
-
apt-get update
|
|
5
|
-
apt-get install -y sudo
|
|
4
|
+
check_package sudo || apt-get update
|
|
5
|
+
apt-get install -y sudo
|
|
6
6
|
fi
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
# Function to setup environment for self-hosted runners.
|
|
10
|
+
self_hosted_helper() {
|
|
7
11
|
if ! command -v apt-fast >/dev/null; then
|
|
8
12
|
sudo ln -sf /usr/bin/apt-get /usr/bin/apt-fast
|
|
9
13
|
trap "sudo rm -f /usr/bin/apt-fast 2>/dev/null" exit
|
|
@@ -21,11 +25,14 @@ install_packages() {
|
|
|
21
25
|
disable_extension_helper() {
|
|
22
26
|
local extension=$1
|
|
23
27
|
local disable_dependents=${2:-false}
|
|
28
|
+
get_extension_map
|
|
24
29
|
if [ "$disable_dependents" = "true" ]; then
|
|
25
30
|
disable_extension_dependents "$extension"
|
|
26
31
|
fi
|
|
27
32
|
sudo sed -Ei "/=(.*\/)?\"?$extension(.so)?$/d" "${ini_file[@]}" "$pecl_file"
|
|
28
|
-
sudo find "$ini_dir"/.. -name "*$extension.ini" -not -path "*mods-available*" -delete >/dev/null 2>&1 || true
|
|
33
|
+
sudo find "$ini_dir"/.. -name "*$extension.ini" -not -path "*phar.ini" -not -path "*pecl.ini" -not -path "*mods-available*" -delete >/dev/null 2>&1 || true
|
|
34
|
+
mkdir -p /tmp/extdisabled/"$version"
|
|
35
|
+
echo '' | sudo tee /tmp/extdisabled/"$version"/"$extension" >/dev/null 2>&1
|
|
29
36
|
}
|
|
30
37
|
|
|
31
38
|
# Function to add PDO extension.
|
|
@@ -61,22 +68,16 @@ add_pdo_extension() {
|
|
|
61
68
|
|
|
62
69
|
# Function to check if a package exists
|
|
63
70
|
check_package() {
|
|
64
|
-
|
|
71
|
+
apt-cache policy "$1" 2>/dev/null | grep -q 'Candidate'
|
|
65
72
|
}
|
|
66
73
|
|
|
67
|
-
#
|
|
68
|
-
|
|
74
|
+
# Helper function to add an extension.
|
|
75
|
+
add_extension_helper() {
|
|
69
76
|
local extension=$1
|
|
70
|
-
prefix=$2
|
|
71
77
|
package=php"$version"-"$extension"
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
else
|
|
76
|
-
add_ppa ondrej/php >/dev/null 2>&1 || update_ppa ondrej/php
|
|
77
|
-
(check_package "$package" && install_packages "$package") || pecl_install "$extension"
|
|
78
|
-
add_extension_log "$extension" "Installed and enabled"
|
|
79
|
-
fi
|
|
78
|
+
add_ppa ondrej/php >/dev/null 2>&1 || update_ppa ondrej/php
|
|
79
|
+
(check_package "$package" && install_packages "$package") || pecl_install "$extension"
|
|
80
|
+
add_extension_log "$extension" "Installed and enabled"
|
|
80
81
|
sudo chmod 777 "${ini_file[@]}"
|
|
81
82
|
}
|
|
82
83
|
|
|
@@ -84,8 +85,9 @@ add_extension() {
|
|
|
84
85
|
add_devtools() {
|
|
85
86
|
tool=$1
|
|
86
87
|
if ! command -v "$tool$version" >/dev/null; then
|
|
87
|
-
install_packages "php$version-dev"
|
|
88
|
+
install_packages "php$version-dev"
|
|
88
89
|
fi
|
|
90
|
+
add_extension xml extension >/dev/null 2>&1
|
|
89
91
|
switch_version "phpize" "php-config"
|
|
90
92
|
add_log "${tick:?}" "$tool" "Added $tool $semver"
|
|
91
93
|
}
|
|
@@ -128,8 +130,9 @@ switch_version() {
|
|
|
128
130
|
add_packaged_php() {
|
|
129
131
|
if [ "$runner" = "self-hosted" ] || [ "${use_package_cache:-true}" = "false" ]; then
|
|
130
132
|
add_ppa ondrej/php >/dev/null 2>&1 || update_ppa ondrej/php
|
|
131
|
-
IFS=' ' read -r -a packages <<<"$(
|
|
133
|
+
IFS=' ' read -r -a packages <<<"$(sed "s/[^ ]*/php$version-&/g" "$src"/configs/php_packages | tr '\n' ' ')"
|
|
132
134
|
install_packages "${packages[@]}"
|
|
135
|
+
add_pecl
|
|
133
136
|
else
|
|
134
137
|
run_script "php-ubuntu" "$version"
|
|
135
138
|
fi
|
|
@@ -176,11 +179,33 @@ php_extra_version() {
|
|
|
176
179
|
fi
|
|
177
180
|
}
|
|
178
181
|
|
|
182
|
+
# Function to set php.ini
|
|
183
|
+
add_php_config() {
|
|
184
|
+
php_lib_dir=/usr/lib/php/"$version"
|
|
185
|
+
current_ini="$php_lib_dir"/php.ini-current
|
|
186
|
+
current=$(cat "$current_ini" 2>/dev/null)
|
|
187
|
+
if [ "$current" = "$ini" ]; then
|
|
188
|
+
return;
|
|
189
|
+
fi
|
|
190
|
+
if [[ "$ini" = "production" && "x$current" != "xproduction" ]]; then
|
|
191
|
+
echo "${ini_file[@]}" | xargs -n 1 -P 6 sudo cp "$php_lib_dir"/php.ini-production
|
|
192
|
+
if [ -e "$php_lib_dir"/php.ini-production.cli ]; then
|
|
193
|
+
sudo cp "$php_lib_dir"/php.ini-production.cli "$ini_dir"/php.ini
|
|
194
|
+
fi
|
|
195
|
+
elif [ "$ini" = "development" ]; then
|
|
196
|
+
echo "${ini_file[@]}" | xargs -n 1 -P 6 sudo cp "$php_lib_dir"/php.ini-development
|
|
197
|
+
elif [ "$ini" = "none" ]; then
|
|
198
|
+
echo '' | sudo tee "${ini_file[@]}" >/dev/null 2>&1
|
|
199
|
+
fi
|
|
200
|
+
echo "$ini" | sudo tee "$current_ini" >/dev/null 2>&1
|
|
201
|
+
}
|
|
202
|
+
|
|
179
203
|
# Function to Setup PHP
|
|
180
204
|
setup_php() {
|
|
181
205
|
step_log "Setup PHP"
|
|
182
206
|
sudo mkdir -m 777 -p /var/run /run/php
|
|
183
|
-
|
|
207
|
+
php_config="$(command -v php-config)"
|
|
208
|
+
if [[ -z "$php_config" ]] || [ "$(php_semver | cut -c 1-3)" != "$version" ]; then
|
|
184
209
|
if [ ! -e "/usr/bin/php$version" ]; then
|
|
185
210
|
add_php >/dev/null 2>&1
|
|
186
211
|
else
|
|
@@ -193,6 +218,7 @@ setup_php() {
|
|
|
193
218
|
status="Switched to"
|
|
194
219
|
fi
|
|
195
220
|
fi
|
|
221
|
+
php_config="$(command -v php-config)"
|
|
196
222
|
else
|
|
197
223
|
if [ "$update" = "true" ]; then
|
|
198
224
|
update_php >/dev/null 2>&1
|
|
@@ -201,39 +227,43 @@ setup_php() {
|
|
|
201
227
|
fi
|
|
202
228
|
fi
|
|
203
229
|
if ! command -v php"$version" >/dev/null; then
|
|
204
|
-
add_log "$cross" "PHP" "Could not setup PHP $version"
|
|
230
|
+
add_log "${cross:?}" "PHP" "Could not setup PHP $version"
|
|
205
231
|
exit 1
|
|
206
232
|
fi
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
scan_dir=$(php --ini | grep additional | sed -e "s|.*: s*||")
|
|
211
|
-
ini_dir=$(php --ini | grep "(php.ini)" | sed -e "s|.*: s*||")
|
|
233
|
+
ext_dir="/usr/$(grep -Po "extension_dir=..[^/]*/\K[^'\"]*" "$php_config")"
|
|
234
|
+
ini_dir="$(php_ini_path)"
|
|
235
|
+
scan_dir="$ini_dir"/conf.d
|
|
212
236
|
pecl_file="$scan_dir"/99-pecl.ini
|
|
237
|
+
semver="$(php_semver)"
|
|
238
|
+
extra_version="$(php_extra_version)"
|
|
213
239
|
export ext_dir
|
|
214
240
|
mapfile -t ini_file < <(sudo find "$ini_dir/.." -name "php.ini" -exec readlink -m {} +)
|
|
215
241
|
link_pecl_file
|
|
216
242
|
configure_php
|
|
243
|
+
set_output "php-version" "$semver"
|
|
217
244
|
sudo rm -rf /usr/local/bin/phpunit >/dev/null 2>&1
|
|
218
245
|
sudo chmod 777 "${ini_file[@]}" "$pecl_file" "${tool_path_dir:?}"
|
|
219
|
-
sudo cp "$
|
|
220
|
-
echo "::set-output name=php-version::$semver"
|
|
246
|
+
sudo cp "$src"/configs/pm/*.json "$RUNNER_TOOL_CACHE/"
|
|
221
247
|
add_log "${tick:?}" "PHP" "$status PHP $semver$extra_version"
|
|
222
248
|
}
|
|
223
249
|
|
|
224
250
|
# Variables
|
|
225
|
-
version=$1
|
|
226
|
-
|
|
251
|
+
version=${1:-'8.1'}
|
|
252
|
+
ini=${2:-'production'}
|
|
253
|
+
src=${0%/*}/..
|
|
227
254
|
debconf_fix="DEBIAN_FRONTEND=noninteractive"
|
|
228
255
|
apt_install="sudo $debconf_fix apt-fast install -y --no-install-recommends"
|
|
229
|
-
scripts="$
|
|
256
|
+
scripts="$src"/scripts
|
|
257
|
+
|
|
258
|
+
add_sudo >/dev/null 2>&1
|
|
230
259
|
|
|
231
260
|
. /etc/os-release
|
|
232
261
|
# shellcheck source=.
|
|
233
|
-
. "${scripts:?}"/
|
|
262
|
+
. "${scripts:?}"/unix.sh
|
|
234
263
|
. "${scripts:?}"/tools/ppa.sh
|
|
235
264
|
. "${scripts:?}"/tools/add_tools.sh
|
|
236
|
-
. "${scripts:?}"/
|
|
265
|
+
. "${scripts:?}"/extensions/source.sh
|
|
266
|
+
. "${scripts:?}"/extensions/add_extensions.sh
|
|
237
267
|
read_env
|
|
238
268
|
self_hosted_setup
|
|
239
269
|
setup_php
|
|
@@ -1,29 +1,239 @@
|
|
|
1
|
+
# Variables
|
|
2
|
+
$composer_bin = "$env:APPDATA\Composer\vendor\bin"
|
|
3
|
+
$composer_json = "$env:APPDATA\Composer\composer.json"
|
|
4
|
+
$composer_lock = "$env:APPDATA\Composer\composer.lock"
|
|
5
|
+
|
|
6
|
+
# Function to configure composer.
|
|
7
|
+
Function Edit-ComposerConfig() {
|
|
8
|
+
Param(
|
|
9
|
+
[Parameter(Position = 0, Mandatory = $true)]
|
|
10
|
+
[ValidateNotNull()]
|
|
11
|
+
[ValidateLength(1, [int]::MaxValue)]
|
|
12
|
+
[string]
|
|
13
|
+
$tool_path
|
|
14
|
+
)
|
|
15
|
+
Copy-Item $tool_path -Destination "$tool_path.phar"
|
|
16
|
+
php -r "try {`$p=new Phar('$tool_path.phar', 0);exit(0);} catch(Exception `$e) {exit(1);}"
|
|
17
|
+
if ($? -eq $False) {
|
|
18
|
+
Add-Log "$cross" "composer" "Could not download composer"
|
|
19
|
+
exit 1;
|
|
20
|
+
}
|
|
21
|
+
New-Item -ItemType Directory -Path $composer_bin -Force > $null 2>&1
|
|
22
|
+
if (-not(Test-Path $composer_json)) {
|
|
23
|
+
Set-Content -Path $composer_json -Value "{}"
|
|
24
|
+
}
|
|
25
|
+
Add-EnvPATH $src\configs\composer.env
|
|
26
|
+
Add-Path $composer_bin
|
|
27
|
+
if (Test-Path env:COMPOSER_TOKEN) {
|
|
28
|
+
Add-Env COMPOSER_AUTH ('{"github-oauth": {"github.com": "' + $env:COMPOSER_TOKEN + '"}}')
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
# Function to extract tool version.
|
|
33
|
+
Function Get-ToolVersion() {
|
|
34
|
+
Param (
|
|
35
|
+
[Parameter(Position = 0, Mandatory = $true)]
|
|
36
|
+
$tool,
|
|
37
|
+
[Parameter(Position = 1, Mandatory = $true)]
|
|
38
|
+
$param
|
|
39
|
+
)
|
|
40
|
+
$alp = "[a-zA-Z0-9]"
|
|
41
|
+
$version_regex = "[0-9]+((\.{1}$alp+)+)(\.{0})(-$alp+){0,1}"
|
|
42
|
+
if($tool -eq 'composer') {
|
|
43
|
+
$composer_branch_alias = Select-String -Pattern "const\sBRANCH_ALIAS_VERSION" -Path $bin_dir\composer -Raw | Select-String -Pattern $version_regex | ForEach-Object { $_.matches.Value }
|
|
44
|
+
if ($composer_branch_alias) {
|
|
45
|
+
$composer_version = $composer_branch_alias + '+' + (Select-String -Pattern "const\sVERSION" -Path $bin_dir\composer -Raw | Select-String -Pattern "[a-zA-Z0-9]+" -AllMatches | ForEach-Object { $_.matches[2].Value })
|
|
46
|
+
} else {
|
|
47
|
+
$composer_version = Select-String -Pattern "const\sVERSION" -Path $bin_dir\composer -Raw | Select-String -Pattern $version_regex | ForEach-Object { $_.matches.Value }
|
|
48
|
+
}
|
|
49
|
+
Set-Variable -Name 'composer_version' -Value $composer_version -Scope Global
|
|
50
|
+
return "$composer_version"
|
|
51
|
+
}
|
|
52
|
+
return . $tool $param 2> $null | ForEach-Object { $_ -replace "composer $version_regex", '' } | Select-String -Pattern $version_regex | Select-Object -First 1 | ForEach-Object { $_.matches.Value }
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
# Helper function to configure tools.
|
|
1
56
|
Function Add-ToolsHelper() {
|
|
2
57
|
Param (
|
|
3
58
|
[Parameter(Position = 0, Mandatory = $true)]
|
|
4
59
|
[ValidateNotNull()]
|
|
5
60
|
$tool
|
|
6
61
|
)
|
|
62
|
+
$extensions = @();
|
|
7
63
|
if($tool -eq "codeception") {
|
|
8
|
-
|
|
64
|
+
$extensions += @('json', 'mbstring')
|
|
65
|
+
Copy-Item $env:codeception_bin\codecept.bat -Destination $env:codeception_bin\codeception.bat
|
|
9
66
|
} elseif($tool -eq "composer") {
|
|
10
67
|
Edit-ComposerConfig $bin_dir\$tool
|
|
11
68
|
} elseif($tool -eq "cs2pr") {
|
|
12
69
|
(Get-Content $bin_dir/cs2pr).replace('exit(9)', 'exit(0)') | Set-Content $bin_dir/cs2pr
|
|
13
70
|
} elseif($tool -eq "phan") {
|
|
14
|
-
|
|
15
|
-
|
|
71
|
+
$extensions += @('fileinfo', 'ast')
|
|
72
|
+
} elseif($tool -eq "phinx") {
|
|
73
|
+
$extensions += @('mbstring')
|
|
16
74
|
} elseif($tool -eq "phive") {
|
|
17
|
-
|
|
75
|
+
$extensions += @('curl', 'mbstring', 'xml')
|
|
76
|
+
} elseif($tool -match "phpc(df|s)") {
|
|
77
|
+
$extensions += @('tokenizer', 'xmlwriter', 'simplexml')
|
|
78
|
+
} elseif($tool -match "php-cs-fixer") {
|
|
79
|
+
$extensions += @('json', 'tokenizer')
|
|
18
80
|
} elseif($tool -eq "phpDocumentor") {
|
|
81
|
+
$extensions+=('ctype', 'hash', 'json', 'fileinfo', 'iconv', 'mbstring', 'simplexml', 'xml')
|
|
19
82
|
Add-Extension fileinfo >$null 2>&1
|
|
20
83
|
Copy-Item $bin_dir\phpDocumentor.bat -Destination $bin_dir\phpdoc.bat
|
|
21
|
-
} elseif($tool -eq "
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
84
|
+
} elseif($tool -eq "phpunit") {
|
|
85
|
+
$extensions += @('dom', 'json', 'libxml', 'mbstring', 'xml', 'xmlwriter')
|
|
86
|
+
} elseif($tool -eq "phpunit-bridge") {
|
|
87
|
+
$extensions += @('dom', 'pdo', 'tokenizer', 'xmlwriter')
|
|
88
|
+
} elseif($tool -eq "vapor-cli") {
|
|
89
|
+
$extensions += @('fileinfo', 'json', 'mbstring', 'zip', 'simplexml')
|
|
90
|
+
Copy-Item $env:vapor_cli_bin\vapor.bat -Destination $env:vapor_cli_bin\vapor-cli.bat
|
|
26
91
|
} elseif($tool -eq "wp-cli") {
|
|
27
92
|
Copy-Item $bin_dir\wp-cli.bat -Destination $bin_dir\wp.bat
|
|
28
93
|
}
|
|
29
|
-
|
|
94
|
+
foreach($extension in $extensions) {
|
|
95
|
+
Add-Extension $extension >$null 2>&1
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
|
|
99
|
+
# Function to add tools.
|
|
100
|
+
Function Add-Tool() {
|
|
101
|
+
Param (
|
|
102
|
+
[Parameter(Position = 0, Mandatory = $true)]
|
|
103
|
+
[ValidateNotNull()]
|
|
104
|
+
$urls,
|
|
105
|
+
[Parameter(Position = 1, Mandatory = $true)]
|
|
106
|
+
[ValidateNotNull()]
|
|
107
|
+
$tool,
|
|
108
|
+
[Parameter(Position = 2, Mandatory = $true)]
|
|
109
|
+
[ValidateNotNull()]
|
|
110
|
+
$ver_param
|
|
111
|
+
)
|
|
112
|
+
if (Test-Path $bin_dir\$tool) {
|
|
113
|
+
Copy-Item $bin_dir\$tool -Destination $bin_dir\$tool.old -Force
|
|
114
|
+
}
|
|
115
|
+
$tool_path = "$bin_dir\$tool"
|
|
116
|
+
foreach ($url in $urls){
|
|
117
|
+
if (($url | Split-Path -Extension) -eq ".exe") {
|
|
118
|
+
$tool_path = "$tool_path.exe"
|
|
119
|
+
}
|
|
120
|
+
try {
|
|
121
|
+
$status_code = (Invoke-WebRequest -Passthru -Uri $url -OutFile $tool_path).StatusCode
|
|
122
|
+
} catch {
|
|
123
|
+
if($url -match '.*github.com.*releases.*latest.*') {
|
|
124
|
+
try {
|
|
125
|
+
$url = $url.replace("releases/latest/download", "releases/download/" + ([regex]::match((Invoke-WebRequest -Uri ($url.split('/release')[0] + "/releases")).Content, "([0-9]+\.[0-9]+\.[0-9]+)/" + ($url.Substring($url.LastIndexOf("/") + 1))).Groups[0].Value).split('/')[0])
|
|
126
|
+
$status_code = (Invoke-WebRequest -Passthru -Uri $url -OutFile $tool_path).StatusCode
|
|
127
|
+
} catch { }
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
if($status_code -eq 200 -and (Test-Path $tool_path)) {
|
|
131
|
+
break
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
if (((Get-ChildItem -Path $bin_dir/* | Where-Object Name -Match "^$tool(.exe|.phar)*$").Count -gt 0)) {
|
|
136
|
+
$bat_content = @()
|
|
137
|
+
$bat_content += "@ECHO off"
|
|
138
|
+
$bat_content += "setlocal DISABLEDELAYEDEXPANSION"
|
|
139
|
+
$bat_content += "SET BIN_TARGET=%~dp0/" + $tool
|
|
140
|
+
$bat_content += "php %BIN_TARGET% %*"
|
|
141
|
+
Set-Content -Path $bin_dir\$tool.bat -Value $bat_content
|
|
142
|
+
Add-ToolsHelper $tool
|
|
143
|
+
Add-ToProfile $current_profile $tool "New-Alias $tool $bin_dir\$tool.bat" >$null 2>&1
|
|
144
|
+
$tool_version = Get-ToolVersion $tool $ver_param
|
|
145
|
+
Add-Log $tick $tool "Added $tool $tool_version"
|
|
146
|
+
} else {
|
|
147
|
+
if($tool -eq "composer") {
|
|
148
|
+
$env:fail_fast = 'true'
|
|
149
|
+
} elseif (Test-Path $bin_dir\$tool.old) {
|
|
150
|
+
Copy-Item $bin_dir\$tool.old -Destination $bin_dir\$tool -Force
|
|
151
|
+
}
|
|
152
|
+
Add-Log $cross $tool "Could not add $tool"
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
Function Add-ComposertoolHelper() {
|
|
157
|
+
Param (
|
|
158
|
+
[Parameter(Position = 0, Mandatory = $true)]
|
|
159
|
+
[string]
|
|
160
|
+
$tool,
|
|
161
|
+
[Parameter(Position = 1, Mandatory = $true)]
|
|
162
|
+
[string]
|
|
163
|
+
$release,
|
|
164
|
+
[Parameter(Position = 2, Mandatory = $true)]
|
|
165
|
+
[string]
|
|
166
|
+
$prefix,
|
|
167
|
+
[Parameter(Position = 3, Mandatory = $true)]
|
|
168
|
+
[string]
|
|
169
|
+
$scope,
|
|
170
|
+
[Parameter(Position = 4, Mandatory = $false)]
|
|
171
|
+
[string]
|
|
172
|
+
$composer_args
|
|
173
|
+
)
|
|
174
|
+
if($scope -eq 'global') {
|
|
175
|
+
if(Test-Path $composer_lock) {
|
|
176
|
+
Remove-Item -Path $composer_lock -Force
|
|
177
|
+
}
|
|
178
|
+
composer global require $prefix$release $composer_args >$null 2>&1
|
|
179
|
+
return composer global show $prefix$tool 2>&1 | findstr '^versions'
|
|
180
|
+
} else {
|
|
181
|
+
$release_stream = [System.IO.MemoryStream]::New([System.Text.Encoding]::ASCII.GetBytes($release))
|
|
182
|
+
$scoped_dir_suffix = (Get-FileHash -InputStream $release_stream -Algorithm sha256).Hash
|
|
183
|
+
$scoped_dir = "$composer_bin\_tools\$tool-$scoped_dir_suffix"
|
|
184
|
+
$unix_scoped_dir = $scoped_dir.replace('\', '/')
|
|
185
|
+
if(-not(Test-Path $scoped_dir)) {
|
|
186
|
+
New-Item -ItemType Directory -Force -Path $scoped_dir > $null 2>&1
|
|
187
|
+
composer require $prefix$release -d $unix_scoped_dir $composer_args >$null 2>&1
|
|
188
|
+
}
|
|
189
|
+
[System.Environment]::SetEnvironmentVariable(($tool.replace('-', '_') + '_bin'), "$scoped_dir\vendor\bin")
|
|
190
|
+
Add-Path $scoped_dir\vendor\bin
|
|
191
|
+
return composer show $prefix$tool -d $unix_scoped_dir 2>&1 | findstr '^versions'
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
# Function to setup a tool using composer.
|
|
196
|
+
Function Add-Composertool() {
|
|
197
|
+
Param (
|
|
198
|
+
[Parameter(Position = 0, Mandatory = $true)]
|
|
199
|
+
[ValidateNotNull()]
|
|
200
|
+
[ValidateLength(1, [int]::MaxValue)]
|
|
201
|
+
[string]
|
|
202
|
+
$tool,
|
|
203
|
+
[Parameter(Position = 1, Mandatory = $true)]
|
|
204
|
+
[ValidateNotNull()]
|
|
205
|
+
[ValidateLength(1, [int]::MaxValue)]
|
|
206
|
+
[string]
|
|
207
|
+
$release,
|
|
208
|
+
[Parameter(Position = 2, Mandatory = $true)]
|
|
209
|
+
[ValidateNotNull()]
|
|
210
|
+
[ValidateLength(1, [int]::MaxValue)]
|
|
211
|
+
[string]
|
|
212
|
+
$prefix,
|
|
213
|
+
[Parameter(Position = 3, Mandatory = $true)]
|
|
214
|
+
[ValidateNotNull()]
|
|
215
|
+
[ValidateLength(1, [int]::MaxValue)]
|
|
216
|
+
[string]
|
|
217
|
+
$scope
|
|
218
|
+
)
|
|
219
|
+
if($composer_version.split('.')[0] -ne "1") {
|
|
220
|
+
$composer_args = "--ignore-platform-req=ext-*"
|
|
221
|
+
if($tool -match "prestissimo|composer-prefetcher") {
|
|
222
|
+
Write-Output "::warning:: Skipping $tool, as it does not support Composer $composer_version. Specify composer:v1 in tools to use $tool"
|
|
223
|
+
Add-Log $cross $tool "Skipped"
|
|
224
|
+
Return
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
Enable-PhpExtension -Extension curl, mbstring, openssl -Path $php_dir
|
|
228
|
+
$log = Add-ComposertoolHelper $tool $release $prefix $scope $composer_args
|
|
229
|
+
if(Test-Path $composer_bin\composer) {
|
|
230
|
+
Copy-Item -Path "$bin_dir\composer" -Destination "$composer_bin\composer" -Force
|
|
231
|
+
}
|
|
232
|
+
Add-ToolsHelper $tool
|
|
233
|
+
if($log) {
|
|
234
|
+
$tool_version = Get-ToolVersion "Write-Output" "$log"
|
|
235
|
+
Add-Log $tick $tool "Added $tool $tool_version"
|
|
236
|
+
} else {
|
|
237
|
+
Add-Log $cross $tool "Could not setup $tool"
|
|
238
|
+
}
|
|
239
|
+
}
|