setup-php 2.13.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.
Files changed (134) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +990 -922
  3. package/lib/config.d.ts +3 -0
  4. package/lib/config.js +71 -71
  5. package/lib/config.js.map +1 -1
  6. package/lib/coverage.d.ts +5 -0
  7. package/lib/coverage.js +97 -87
  8. package/lib/coverage.js.map +1 -1
  9. package/lib/extensions.d.ts +4 -0
  10. package/lib/extensions.js +214 -200
  11. package/lib/extensions.js.map +1 -1
  12. package/lib/fetch.d.ts +1 -0
  13. package/lib/fetch.js +63 -0
  14. package/lib/fetch.js.map +1 -0
  15. package/lib/install.d.ts +2 -0
  16. package/lib/install.js +75 -81
  17. package/lib/install.js.map +1 -1
  18. package/lib/tools.d.ts +23 -0
  19. package/lib/tools.js +367 -386
  20. package/lib/tools.js.map +1 -1
  21. package/lib/utils.d.ts +21 -0
  22. package/lib/utils.js +261 -291
  23. package/lib/utils.js.map +1 -1
  24. package/package.json +67 -56
  25. package/src/config.ts +82 -82
  26. package/src/configs/brew_extensions +31 -0
  27. package/src/configs/composer.env +2 -0
  28. package/src/configs/ini/jit.ini +3 -0
  29. package/src/configs/ini/php.ini +2 -0
  30. package/src/configs/ini/xdebug.ini +1 -0
  31. package/src/configs/os_releases.csv +19 -17
  32. package/src/configs/php-versions.json +6 -5
  33. package/src/configs/php_packages +12 -0
  34. package/src/configs/{php.json → pm/php.json} +29 -29
  35. package/src/configs/{phpunit.json → pm/phpunit.json} +24 -24
  36. package/src/configs/tools.json +278 -235
  37. package/src/configs/tools_schema.json +125 -114
  38. package/src/coverage.ts +144 -142
  39. package/src/extensions.ts +367 -349
  40. package/src/fetch.ts +54 -0
  41. package/src/install.ts +66 -82
  42. package/src/scripts/darwin.sh +285 -249
  43. package/src/scripts/extensions/add_extensions.ps1 +194 -0
  44. package/src/scripts/extensions/add_extensions.sh +184 -0
  45. package/src/scripts/{ext → extensions}/blackfire.ps1 +32 -32
  46. package/src/scripts/{ext → extensions}/blackfire.sh +22 -21
  47. package/src/scripts/{ext → extensions}/couchbase.sh +43 -43
  48. package/src/scripts/{ext → extensions}/cubrid.sh +60 -60
  49. package/src/scripts/extensions/extension_map.php +132 -0
  50. package/src/scripts/{ext → extensions}/firebird.ps1 +19 -19
  51. package/src/scripts/{ext → extensions}/firebird.sh +39 -35
  52. package/src/scripts/{ext → extensions}/gearman.sh +22 -22
  53. package/src/scripts/{ext → extensions}/geos.sh +17 -17
  54. package/src/scripts/{ext → extensions}/http.ps1 +54 -54
  55. package/src/scripts/{ext → extensions}/http.sh +109 -120
  56. package/src/scripts/{ext → extensions}/intl.sh +23 -23
  57. package/src/scripts/{ext → extensions}/ioncube.ps1 +33 -32
  58. package/src/scripts/{ext → extensions}/ioncube.sh +21 -19
  59. package/src/scripts/{ext → extensions}/oci.ps1 +85 -60
  60. package/src/scripts/{ext → extensions}/oci.sh +65 -63
  61. package/src/scripts/{ext → extensions}/patches/firebird.sh +11 -11
  62. package/src/scripts/{ext → extensions}/patches/geos.sh +7 -7
  63. package/src/scripts/{ext → extensions}/patches/http.sh +11 -11
  64. package/src/scripts/{ext → extensions}/patches/pdo_oci.sh +6 -6
  65. package/src/scripts/{ext → extensions}/patches/phpize.sh +26 -26
  66. package/src/scripts/{ext → extensions}/patches/protobuf.sh +4 -4
  67. package/src/scripts/{ext → extensions}/phalcon.ps1 +54 -54
  68. package/src/scripts/{ext → extensions}/phalcon.sh +58 -58
  69. package/src/scripts/{ext → extensions}/source.sh +145 -144
  70. package/src/scripts/extensions/sqlsrv.sh +15 -0
  71. package/src/scripts/linux.sh +269 -256
  72. package/src/scripts/tools/add_tools.ps1 +239 -26
  73. package/src/scripts/tools/add_tools.sh +175 -20
  74. package/src/scripts/tools/blackfire.ps1 +19 -19
  75. package/src/scripts/tools/blackfire.sh +40 -39
  76. package/src/scripts/tools/grpc_php_plugin.ps1 +21 -21
  77. package/src/scripts/tools/grpc_php_plugin.sh +58 -58
  78. package/src/scripts/tools/ppa.sh +192 -151
  79. package/src/scripts/tools/protoc.ps1 +38 -38
  80. package/src/scripts/tools/protoc.sh +28 -28
  81. package/src/scripts/tools/symfony.ps1 +14 -0
  82. package/src/scripts/tools/symfony.sh +13 -0
  83. package/src/scripts/unix.sh +186 -0
  84. package/src/scripts/win32.ps1 +352 -494
  85. package/src/tools.ts +512 -538
  86. package/src/utils.ts +415 -500
  87. package/.eslintrc.json +0 -16
  88. package/.github/CODE_OF_CONDUCT.md +0 -76
  89. package/.github/CONTRIBUTING.md +0 -70
  90. package/.github/FUNDING.yml +0 -7
  91. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -42
  92. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -26
  93. package/.github/PULL_REQUEST_TEMPLATE.md +0 -37
  94. package/.github/SECURITY.md +0 -29
  95. package/.github/workflows/docs.yml +0 -77
  96. package/.github/workflows/node-workflow.yml +0 -51
  97. package/.github/workflows/workflow.yml +0 -78
  98. package/.idea/workspace.xml +0 -113
  99. package/.prettierrc.json +0 -12
  100. package/__tests__/config.test.ts +0 -52
  101. package/__tests__/coverage.test.ts +0 -110
  102. package/__tests__/extensions.test.ts +0 -263
  103. package/__tests__/install.test.ts +0 -175
  104. package/__tests__/tools.test.ts +0 -524
  105. package/__tests__/utils.test.ts +0 -307
  106. package/action.yml +0 -29
  107. package/dist/index.js +0 -3051
  108. package/examples/bedrock.yml +0 -32
  109. package/examples/blackfire-player.yml +0 -31
  110. package/examples/blackfire.yml +0 -31
  111. package/examples/cakephp-mysql.yml +0 -114
  112. package/examples/cakephp-postgres.yml +0 -112
  113. package/examples/cakephp.yml +0 -92
  114. package/examples/codeigniter.yml +0 -34
  115. package/examples/laravel-mysql.yml +0 -74
  116. package/examples/laravel-postgres.yml +0 -74
  117. package/examples/laravel.yml +0 -42
  118. package/examples/lumen-mysql.yml +0 -74
  119. package/examples/lumen-postgres.yml +0 -74
  120. package/examples/lumen.yml +0 -38
  121. package/examples/phalcon-mysql.yml +0 -74
  122. package/examples/phalcon-postgres.yml +0 -73
  123. package/examples/sage.yml +0 -57
  124. package/examples/slim-framework.yml +0 -34
  125. package/examples/symfony-mysql.yml +0 -57
  126. package/examples/symfony-postgres.yml +0 -55
  127. package/examples/symfony.yml +0 -39
  128. package/examples/yii2-mysql.yml +0 -73
  129. package/examples/yii2-postgres.yml +0 -71
  130. package/examples/zend-framework.yml +0 -36
  131. package/jest.config.js +0 -12
  132. package/lib/sapi.js +0 -64
  133. package/src/scripts/common.sh +0 -314
  134. package/tsconfig.json +0 -18
@@ -1,256 +1,269 @@
1
- # Function to setup environment for self-hosted runners.
2
- self_hosted_helper() {
3
- if ! command -v sudo >/dev/null; then
4
- apt-get update
5
- apt-get install -y sudo || add_log "${cross:?}" "sudo" "Could not install sudo"
6
- fi
7
- if ! command -v apt-fast >/dev/null; then
8
- sudo ln -sf /usr/bin/apt-get /usr/bin/apt-fast
9
- trap "sudo rm -f /usr/bin/apt-fast 2>/dev/null" exit
10
- fi
11
- install_packages apt-transport-https ca-certificates curl file make jq unzip autoconf automake gcc g++ gnupg
12
- }
13
-
14
- # Function to install a package
15
- install_packages() {
16
- packages=("$@")
17
- [[ "${packages[*]}" =~ php ]] && add_ppa ondrej/php >/dev/null 2>&1
18
- $apt_install "${packages[@]}" >/dev/null 2>&1 || (update_lists && $apt_install "${packages[@]}" >/dev/null 2>&1)
19
- }
20
-
21
- # Function to disable an extension.
22
- disable_extension() {
23
- extension=$1
24
- sudo sed -Ei "/=(.*\/)?\"?$extension(.so)?$/d" "${ini_file[@]}"
25
- sudo sed -Ei "/=(.*\/)?\"?$extension(.so)?$/d" "$pecl_file"
26
- sudo find "$ini_dir"/.. -name "*$extension.ini" -delete >/dev/null 2>&1 || true
27
- }
28
-
29
- # Function to delete an extension.
30
- delete_extension() {
31
- extension=$1
32
- disable_extension "$extension"
33
- sudo rm -rf "$ext_dir"/"$extension".so >/dev/null 2>&1
34
- sudo sed -i "/Package: php$version-$extension/,/^$/d" /var/lib/dpkg/status
35
- }
36
-
37
- # Function to disable and delete extensions.
38
- remove_extension() {
39
- extension=$1
40
- if check_extension "$extension"; then
41
- if [[ ! "$version" =~ ${old_versions:?} ]] && [ -e /etc/php/"$version"/mods-available/"$extension".ini ]; then
42
- sudo phpdismod -v "$version" "$extension" >/dev/null 2>&1
43
- fi
44
- delete_extension "$extension"
45
- (! check_extension "$extension" && add_log "${tick:?}" ":$extension" "Removed") ||
46
- add_log "${cross:?}" ":$extension" "Could not remove $extension on PHP ${semver:?}"
47
- else
48
- delete_extension "$extension"
49
- add_log "${tick:?}" ":$extension" "Could not find $extension on PHP $semver"
50
- fi
51
- }
52
-
53
- # Function to add PDO extension.
54
- add_pdo_extension() {
55
- pdo_ext="pdo_$1"
56
- if check_extension "$pdo_ext"; then
57
- add_log "${tick:?}" "$pdo_ext" "Enabled"
58
- else
59
- ext=$1
60
- ext_name=$1
61
- if [ -e "$ext_dir"/pdo.so ]; then
62
- disable_extension pdo
63
- echo "extension=pdo.so" | sudo tee "${ini_file[@]/php.ini/conf.d/10-pdo.ini}" >/dev/null 2>&1
64
- fi
65
- if [ "$ext" = "mysql" ]; then
66
- enable_extension "mysqlnd" "extension"
67
- ext_name='mysqli'
68
- elif [ "$ext" = "dblib" ]; then
69
- ext_name="sybase"
70
- elif [ "$ext" = "firebird" ]; then
71
- install_packages libfbclient2 >/dev/null 2>&1
72
- enable_extension "pdo_firebird" "extension"
73
- ext_name="interbase"
74
- elif [ "$ext" = "sqlite" ]; then
75
- ext="sqlite3"
76
- ext_name="sqlite3"
77
- fi
78
- add_extension "$ext_name" "extension" >/dev/null 2>&1
79
- add_extension "$pdo_ext" "extension" >/dev/null 2>&1
80
- add_extension_log "$pdo_ext" "Enabled"
81
- fi
82
- }
83
-
84
- # Function to add extensions.
85
- add_extension() {
86
- extension=$1
87
- prefix=$2
88
- enable_extension "$extension" "$prefix"
89
- if check_extension "$extension"; then
90
- add_log "${tick:?}" "$extension" "Enabled"
91
- else
92
- if [[ "$version" =~ ${nightly_versions:?} ]]; then
93
- pecl_install "$extension"
94
- else
95
- install_packages "php$version-$extension" || pecl_install "$extension"
96
- fi
97
- add_extension_log "$extension" "Installed and enabled"
98
- fi
99
- sudo chmod 777 "${ini_file[@]}"
100
- }
101
-
102
- # Function to setup phpize and php-config.
103
- add_devtools() {
104
- tool=$1
105
- if ! command -v "$tool$version" >/dev/null; then
106
- install_packages "php$version-dev" "php$version-xml"
107
- fi
108
- switch_version "phpize" "php-config"
109
- add_log "${tick:?}" "$tool" "Added $tool $semver"
110
- }
111
-
112
- # Function to setup the nightly build from shivammathur/php-builder
113
- setup_nightly() {
114
- run_script "php-builder" "${runner:?}" "$version"
115
- }
116
-
117
- # Function to setup PHP 5.3, PHP 5.4 and PHP 5.5.
118
- setup_old_versions() {
119
- run_script "php5-ubuntu" "$version"
120
- }
121
-
122
- # Function to add PECL.
123
- add_pecl() {
124
- add_devtools phpize >/dev/null 2>&1
125
- if ! command -v pecl >/dev/null; then
126
- install_packages php-pear
127
- fi
128
- configure_pecl >/dev/null 2>&1
129
- pecl_version=$(get_tool_version "pecl" "version")
130
- add_log "${tick:?}" "PECL" "Added PECL $pecl_version"
131
- }
132
-
133
- # Function to switch versions of PHP binaries.
134
- switch_version() {
135
- tools=("$@") && ! (( ${#tools[@]} )) && tools+=(pear pecl php phar phar.phar php-cgi php-config phpize phpdbg)
136
- to_wait=()
137
- for tool in "${tools[@]}"; do
138
- if [ -e "/usr/bin/$tool$version" ]; then
139
- sudo update-alternatives --set "$tool" /usr/bin/"$tool$version" &
140
- to_wait+=($!)
141
- fi
142
- done
143
- wait "${to_wait[@]}"
144
- }
145
-
146
- # Function to install packaged PHP
147
- add_packaged_php() {
148
- if [ "$runner" = "self-hosted" ] || [ "${use_package_cache:-true}" = "false" ]; then
149
- update_lists
150
- IFS=' ' read -r -a packages <<<"$(echo "cli curl mbstring xml intl" | sed "s/[^ ]*/php$version-&/g")"
151
- install_packages "${packages[@]}"
152
- else
153
- run_script "php-ubuntu" "$version"
154
- fi
155
- }
156
-
157
- # Function to update PHP.
158
- update_php() {
159
- initial_version=$(php_semver)
160
- add_packaged_php
161
- updated_version=$(php_semver)
162
- if [ "$updated_version" != "$initial_version" ]; then
163
- status="Updated to"
164
- else
165
- status="Switched to"
166
- fi
167
- }
168
-
169
- # Function to install PHP.
170
- add_php() {
171
- if [[ "$version" =~ ${nightly_versions:?} ]]; then
172
- setup_nightly
173
- elif [[ "$version" =~ ${old_versions:?} ]]; then
174
- setup_old_versions
175
- else
176
- add_packaged_php
177
- fi
178
- status="Installed"
179
- }
180
-
181
- # Function to ini file for pear and link it to each SAPI.
182
- link_pecl_file() {
183
- echo '' | sudo tee "$pecl_file" >/dev/null 2>&1
184
- for file in "${ini_file[@]}"; do
185
- sapi_scan_dir="$(realpath -m "$(dirname "$file")")/conf.d"
186
- [ "$sapi_scan_dir" != "$scan_dir" ] && ! [ -h "$sapi_scan_dir" ] && sudo ln -sf "$pecl_file" "$sapi_scan_dir/99-pecl.ini"
187
- done
188
- }
189
-
190
- # Function to get extra version.
191
- php_extra_version() {
192
- if [[ ${version:?} =~ ${nightly_versions:?} ]]; then
193
- echo " ($(cat "/etc/php/$version/COMMIT"))"
194
- fi
195
- }
196
-
197
- # Function to Setup PHP
198
- setup_php() {
199
- step_log "Setup PHP"
200
- sudo mkdir -m 777 -p /var/run /run/php
201
- if [ "$(php-config --version 2>/dev/null | cut -c 1-3)" != "$version" ]; then
202
- if [ ! -e "/usr/bin/php$version" ]; then
203
- add_php >/dev/null 2>&1
204
- else
205
- if [ "${update:?}" = "true" ]; then
206
- update_php >/dev/null 2>&1
207
- else
208
- status="Switched to"
209
- fi
210
- fi
211
- if ! [[ "$version" =~ ${old_versions:?}|${nightly_versions:?} ]]; then
212
- switch_version >/dev/null 2>&1
213
- fi
214
- else
215
- if [ "$update" = "true" ]; then
216
- update_php >/dev/null 2>&1
217
- else
218
- status="Found"
219
- fi
220
- fi
221
- if ! command -v php"$version" >/dev/null; then
222
- add_log "$cross" "PHP" "Could not setup PHP $version"
223
- exit 1
224
- fi
225
- semver=$(php_semver)
226
- extra_version=$(php_extra_version)
227
- ext_dir=$(php -i | grep "extension_dir => /" | sed -e "s|.*=> s*||")
228
- scan_dir=$(php --ini | grep additional | sed -e "s|.*: s*||")
229
- ini_dir=$(php --ini | grep "(php.ini)" | sed -e "s|.*: s*||")
230
- pecl_file="$scan_dir"/99-pecl.ini
231
- mapfile -t ini_file < <(sudo find "$ini_dir/.." -name "php.ini" -exec readlink -m {} +)
232
- link_pecl_file
233
- configure_php
234
- sudo rm -rf /usr/local/bin/phpunit >/dev/null 2>&1
235
- sudo chmod 777 "${ini_file[@]}" "$pecl_file" "${tool_path_dir:?}"
236
- sudo cp "$dist"/../src/configs/*.json "$RUNNER_TOOL_CACHE/"
237
- echo "::set-output name=php-version::$semver"
238
- add_log "${tick:?}" "PHP" "$status PHP $semver$extra_version"
239
- }
240
-
241
- # Variables
242
- version=$1
243
- dist=$2
244
- debconf_fix="DEBIAN_FRONTEND=noninteractive"
245
- apt_install="sudo $debconf_fix apt-fast install -y --no-install-recommends"
246
- scripts="${dist}"/../src/scripts
247
-
248
- . /etc/os-release
249
- # shellcheck source=.
250
- . "${scripts:?}"/ext/source.sh
251
- . "${scripts:?}"/tools/ppa.sh
252
- . "${scripts:?}"/tools/add_tools.sh
253
- . "${scripts:?}"/common.sh
254
- read_env
255
- self_hosted_setup
256
- setup_php
1
+ # Function to add sudo
2
+ add_sudo() {
3
+ if ! command -v sudo >/dev/null; then
4
+ check_package sudo || apt-get update
5
+ apt-get install -y sudo
6
+ fi
7
+ }
8
+
9
+ # Function to setup environment for self-hosted runners.
10
+ self_hosted_helper() {
11
+ if ! command -v apt-fast >/dev/null; then
12
+ sudo ln -sf /usr/bin/apt-get /usr/bin/apt-fast
13
+ trap "sudo rm -f /usr/bin/apt-fast 2>/dev/null" exit
14
+ fi
15
+ install_packages apt-transport-https ca-certificates curl file make jq unzip autoconf automake gcc g++ gnupg
16
+ }
17
+
18
+ # Function to install a package
19
+ install_packages() {
20
+ packages=("$@")
21
+ $apt_install "${packages[@]}" >/dev/null 2>&1 || (update_lists && $apt_install "${packages[@]}" >/dev/null 2>&1)
22
+ }
23
+
24
+ # Function to disable an extension.
25
+ disable_extension_helper() {
26
+ local extension=$1
27
+ local disable_dependents=${2:-false}
28
+ get_extension_map
29
+ if [ "$disable_dependents" = "true" ]; then
30
+ disable_extension_dependents "$extension"
31
+ fi
32
+ sudo sed -Ei "/=(.*\/)?\"?$extension(.so)?$/d" "${ini_file[@]}" "$pecl_file"
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
36
+ }
37
+
38
+ # Function to add PDO extension.
39
+ add_pdo_extension() {
40
+ pdo_ext="pdo_$1"
41
+ if check_extension "$pdo_ext"; then
42
+ add_log "${tick:?}" "$pdo_ext" "Enabled"
43
+ else
44
+ ext=$1
45
+ ext_name=$1
46
+ if shared_extension pdo; then
47
+ disable_extension_helper pdo
48
+ echo "extension=pdo.so" | sudo tee "${ini_file[@]/php.ini/conf.d/10-pdo.ini}" >/dev/null 2>&1
49
+ fi
50
+ if [ "$ext" = "mysql" ]; then
51
+ enable_extension "mysqlnd" "extension"
52
+ ext_name='mysqli'
53
+ elif [ "$ext" = "dblib" ]; then
54
+ ext_name="sybase"
55
+ elif [ "$ext" = "firebird" ]; then
56
+ install_packages libfbclient2 >/dev/null 2>&1
57
+ enable_extension "pdo_firebird" "extension"
58
+ ext_name="interbase"
59
+ elif [ "$ext" = "sqlite" ]; then
60
+ ext="sqlite3"
61
+ ext_name="sqlite3"
62
+ fi
63
+ add_extension "$ext_name" "extension" >/dev/null 2>&1
64
+ add_extension "$pdo_ext" "extension" >/dev/null 2>&1
65
+ add_extension_log "$pdo_ext" "Enabled"
66
+ fi
67
+ }
68
+
69
+ # Function to check if a package exists
70
+ check_package() {
71
+ apt-cache policy "$1" 2>/dev/null | grep -q 'Candidate'
72
+ }
73
+
74
+ # Helper function to add an extension.
75
+ add_extension_helper() {
76
+ local extension=$1
77
+ package=php"$version"-"$extension"
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"
81
+ sudo chmod 777 "${ini_file[@]}"
82
+ }
83
+
84
+ # Function to setup phpize and php-config.
85
+ add_devtools() {
86
+ tool=$1
87
+ if ! command -v "$tool$version" >/dev/null; then
88
+ install_packages "php$version-dev"
89
+ fi
90
+ add_extension xml extension >/dev/null 2>&1
91
+ switch_version "phpize" "php-config"
92
+ add_log "${tick:?}" "$tool" "Added $tool $semver"
93
+ }
94
+
95
+ # Function to setup the nightly build from shivammathur/php-builder
96
+ setup_nightly() {
97
+ run_script "php-builder" "${runner:?}" "$version"
98
+ }
99
+
100
+ # Function to setup PHP 5.3, PHP 5.4 and PHP 5.5.
101
+ setup_old_versions() {
102
+ run_script "php5-ubuntu" "$version"
103
+ }
104
+
105
+ # Function to add PECL.
106
+ add_pecl() {
107
+ add_devtools phpize >/dev/null 2>&1
108
+ if ! command -v pecl >/dev/null; then
109
+ install_packages php-pear
110
+ fi
111
+ configure_pecl >/dev/null 2>&1
112
+ pear_version=$(get_tool_version "pecl" "version")
113
+ add_log "${tick:?}" "PECL" "Added PECL $pear_version"
114
+ }
115
+
116
+ # Function to switch versions of PHP binaries.
117
+ switch_version() {
118
+ tools=("$@") && ! (( ${#tools[@]} )) && tools+=(pear pecl php phar phar.phar php-cgi php-config phpize phpdbg)
119
+ to_wait=()
120
+ for tool in "${tools[@]}"; do
121
+ if [ -e "/usr/bin/$tool$version" ]; then
122
+ sudo update-alternatives --set "$tool" /usr/bin/"$tool$version" &
123
+ to_wait+=($!)
124
+ fi
125
+ done
126
+ wait "${to_wait[@]}"
127
+ }
128
+
129
+ # Function to install packaged PHP
130
+ add_packaged_php() {
131
+ if [ "$runner" = "self-hosted" ] || [ "${use_package_cache:-true}" = "false" ]; then
132
+ add_ppa ondrej/php >/dev/null 2>&1 || update_ppa ondrej/php
133
+ IFS=' ' read -r -a packages <<<"$(sed "s/[^ ]*/php$version-&/g" "$src"/configs/php_packages | tr '\n' ' ')"
134
+ install_packages "${packages[@]}"
135
+ add_pecl
136
+ else
137
+ run_script "php-ubuntu" "$version"
138
+ fi
139
+ }
140
+
141
+ # Function to update PHP.
142
+ update_php() {
143
+ initial_version="$(php_semver)$(php_extra_version)"
144
+ add_php
145
+ updated_version="$(php_semver)$(php_extra_version)"
146
+ if [ "$updated_version" != "$initial_version" ]; then
147
+ status="Updated to"
148
+ else
149
+ status="Found"
150
+ fi
151
+ }
152
+
153
+ # Function to install PHP.
154
+ add_php() {
155
+ if [[ "$version" =~ ${nightly_versions:?} ]]; then
156
+ setup_nightly
157
+ elif [[ "$version" =~ ${old_versions:?} ]]; then
158
+ setup_old_versions
159
+ else
160
+ add_packaged_php
161
+ switch_version >/dev/null 2>&1
162
+ fi
163
+ status="Installed"
164
+ }
165
+
166
+ # Function to ini file for pear and link it to each SAPI.
167
+ link_pecl_file() {
168
+ echo '' | sudo tee "$pecl_file" >/dev/null 2>&1
169
+ for file in "${ini_file[@]}"; do
170
+ sapi_scan_dir="$(realpath -m "$(dirname "$file")")/conf.d"
171
+ [ "$sapi_scan_dir" != "$scan_dir" ] && ! [ -h "$sapi_scan_dir" ] && sudo ln -sf "$pecl_file" "$sapi_scan_dir/99-pecl.ini"
172
+ done
173
+ }
174
+
175
+ # Function to get extra version.
176
+ php_extra_version() {
177
+ if [ -e /etc/php/"$version"/COMMIT ]; then
178
+ echo " ($(cat "/etc/php/$version/COMMIT"))"
179
+ fi
180
+ }
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
+
203
+ # Function to Setup PHP
204
+ setup_php() {
205
+ step_log "Setup PHP"
206
+ sudo mkdir -m 777 -p /var/run /run/php
207
+ php_config="$(command -v php-config)"
208
+ if [[ -z "$php_config" ]] || [ "$(php_semver | cut -c 1-3)" != "$version" ]; then
209
+ if [ ! -e "/usr/bin/php$version" ]; then
210
+ add_php >/dev/null 2>&1
211
+ else
212
+ if ! [[ "$version" =~ ${old_versions:?} ]]; then
213
+ switch_version >/dev/null 2>&1
214
+ fi
215
+ if [ "${update:?}" = "true" ]; then
216
+ update_php >/dev/null 2>&1
217
+ else
218
+ status="Switched to"
219
+ fi
220
+ fi
221
+ php_config="$(command -v php-config)"
222
+ else
223
+ if [ "$update" = "true" ]; then
224
+ update_php >/dev/null 2>&1
225
+ else
226
+ status="Found"
227
+ fi
228
+ fi
229
+ if ! command -v php"$version" >/dev/null; then
230
+ add_log "${cross:?}" "PHP" "Could not setup PHP $version"
231
+ exit 1
232
+ fi
233
+ ext_dir="/usr/$(grep -Po "extension_dir=..[^/]*/\K[^'\"]*" "$php_config")"
234
+ ini_dir="$(php_ini_path)"
235
+ scan_dir="$ini_dir"/conf.d
236
+ pecl_file="$scan_dir"/99-pecl.ini
237
+ semver="$(php_semver)"
238
+ extra_version="$(php_extra_version)"
239
+ export ext_dir
240
+ mapfile -t ini_file < <(sudo find "$ini_dir/.." -name "php.ini" -exec readlink -m {} +)
241
+ link_pecl_file
242
+ configure_php
243
+ set_output "php-version" "$semver"
244
+ sudo rm -rf /usr/local/bin/phpunit >/dev/null 2>&1
245
+ sudo chmod 777 "${ini_file[@]}" "$pecl_file" "${tool_path_dir:?}"
246
+ sudo cp "$src"/configs/pm/*.json "$RUNNER_TOOL_CACHE/"
247
+ add_log "${tick:?}" "PHP" "$status PHP $semver$extra_version"
248
+ }
249
+
250
+ # Variables
251
+ version=${1:-'8.1'}
252
+ ini=${2:-'production'}
253
+ src=${0%/*}/..
254
+ debconf_fix="DEBIAN_FRONTEND=noninteractive"
255
+ apt_install="sudo $debconf_fix apt-fast install -y --no-install-recommends"
256
+ scripts="$src"/scripts
257
+
258
+ add_sudo >/dev/null 2>&1
259
+
260
+ . /etc/os-release
261
+ # shellcheck source=.
262
+ . "${scripts:?}"/unix.sh
263
+ . "${scripts:?}"/tools/ppa.sh
264
+ . "${scripts:?}"/tools/add_tools.sh
265
+ . "${scripts:?}"/extensions/source.sh
266
+ . "${scripts:?}"/extensions/add_extensions.sh
267
+ read_env
268
+ self_hosted_setup
269
+ setup_php