setup-php 2.17.1 → 2.19.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/src/extensions.ts CHANGED
@@ -39,7 +39,7 @@ export async function addExtensionDarwin(
39
39
  case /^(5\.[3-6]|7\.[0-4]|8\.[0-1])blackfire(-\d+\.\d+\.\d+)?$/.test(
40
40
  version_extension
41
41
  ):
42
- case /^couchbase$|^geos$|^pdo_oci$|^oci8$|^(pecl_)?http|^pdo_firebird$/.test(
42
+ case /^couchbase|^geos$|^pdo_oci$|^oci8$|^(pecl_)?http|^pdo_firebird$/.test(
43
43
  extension
44
44
  ):
45
45
  case /^(5\.[3-6]|7\.[0-4])ioncube$/.test(version_extension):
@@ -78,7 +78,7 @@ export async function addExtensionDarwin(
78
78
  // match 7.1 and newer - pcov
79
79
  // match 5.6 to 7.4 - propro
80
80
  // match 7.0 and newer - vips, xlswriter
81
- case /(?<!5\.[3-5])(amqp|apcu|expect|gnupg|grpc|igbinary|imagick|imap|mailparse|memcache|memcached|mongodb|msgpack|protobuf|psr|raphf|rdkafka|redis|ssh2|swoole|xdebug|xdebug2|yaml|zmq)/.test(
81
+ case /(?<!5\.[3-5])(amqp|apcu|expect|gnupg|grpc|igbinary|imagick|imap|mailparse|mcrypt|memcache|memcached|mongodb|msgpack|protobuf|psr|raphf|rdkafka|redis|ssh2|swoole|xdebug|xdebug2|yaml|zmq)/.test(
82
82
  version_extension
83
83
  ):
84
84
  case /(5\.6|7\.[0-4])propro/.test(version_extension):
@@ -128,19 +128,19 @@ export async function addExtensionWindows(
128
128
  case /^none$/.test(ext_name):
129
129
  add_script += '\nDisable-AllShared';
130
130
  break;
131
- // match 5.3blackfire...8.0blackfire
132
- // match 5.3blackfire-(semver)...8.0blackfire-(semver)
131
+ // match 5.3blackfire...8.1blackfire
132
+ // match 5.3blackfire-(semver)...8.1blackfire-(semver)
133
133
  // match pdo_oci and oci8
134
134
  // match 5.3ioncube...7.4ioncube
135
135
  // match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4
136
- // match 7.1pecl_http...8.0pecl_http and 7.1http...8.0http
137
- case /^(5\.[3-6]|7\.[0-4]|8\.0)blackfire(-\d+\.\d+\.\d+)?$/.test(
136
+ // match 7.1pecl_http...8.1pecl_http and 7.1http...8.1http
137
+ case /^(5\.[3-6]|7\.[0-4]|8\.1)blackfire(-\d+\.\d+\.\d+)?$/.test(
138
138
  version_extension
139
139
  ):
140
140
  case /^pdo_oci$|^oci8$|^pdo_firebird$/.test(extension):
141
141
  case /^(5\.[3-6]|7\.[0-4])ioncube$/.test(version_extension):
142
142
  case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension):
143
- case /^(7\.[1-4]|8\.0)(pecl_)?http/.test(version_extension):
143
+ case /^(7\.[1-4]|8\.1)(pecl_)?http/.test(version_extension):
144
144
  add_script += await utils.customPackage(
145
145
  ext_name,
146
146
  'extensions',
@@ -262,7 +262,7 @@ export async function addExtensionLinux(
262
262
  case /^((5\.[3-6])|(7\.[0-2]))pdo_cubrid$|^((5\.[3-6])|(7\.[0-4]))cubrid$/.test(
263
263
  version_extension
264
264
  ):
265
- case /^couchbase$|^gearman$|^geos$|^pdo_oci$|^oci8$|^(pecl_)?http|^pdo_firebird$/.test(
265
+ case /^couchbase|^gearman$|^geos$|^pdo_oci$|^oci8$|^(pecl_)?http|^pdo_firebird$/.test(
266
266
  extension
267
267
  ):
268
268
  case /(?<!5\.[3-5])intl-[\d]+\.[\d]+$/.test(version_extension):
package/src/fetch.ts CHANGED
@@ -3,10 +3,11 @@ import * as https from 'https';
3
3
  import * as url from 'url';
4
4
 
5
5
  /**
6
- * Function to fetch an URL
6
+ * Function to fetch a URL
7
7
  *
8
8
  * @param input_url
9
9
  * @param auth_token
10
+ * @param redirect_count
10
11
  */
11
12
  export async function fetch(
12
13
  input_url: string,
package/src/install.ts CHANGED
@@ -14,7 +14,7 @@ import * as utils from './utils';
14
14
  * @param os
15
15
  */
16
16
  export async function getScript(os: string): Promise<string> {
17
- const url = 'https://setup-php.com/sponsor';
17
+ const url = 'https://setup-php.com/support-ukraine';
18
18
  const filename = os + (await utils.scriptExtension(os));
19
19
  const script_path = path.join(__dirname, '../src/scripts', filename);
20
20
  const run_path = script_path.replace(os, 'run');
@@ -40,8 +40,8 @@ export async function getScript(os: string): Promise<string> {
40
40
  if (ini_values_csv) {
41
41
  script += await config.addINIValues(ini_values_csv, os);
42
42
  }
43
- script += '\n' + (await utils.stepLog(`Sponsor setup-php`, os));
44
- script += '\n' + (await utils.addLog('$tick', 'setup-php', url, os));
43
+ script += '\n' + (await utils.stepLog(`#StandWithUkraine`, os));
44
+ script += '\n' + (await utils.addLog('$tick', 'read-more', url, os));
45
45
 
46
46
  fs.writeFileSync(run_path, script, {mode: 0o755});
47
47
 
@@ -28,7 +28,7 @@ disable_extension_helper() {
28
28
  disable_extension_dependents "$extension"
29
29
  fi
30
30
  sudo sed -Ei '' "/=(.*\/)?\"?$extension(.so)?$/d" "${ini_file:?}"
31
- sudo rm -rf "$scan_dir"/*"$extension"*
31
+ sudo rm -rf "$scan_dir"/*"$extension"* /tmp/php"$version"_extensions
32
32
  mkdir -p /tmp/extdisabled/"$version"
33
33
  echo '' | sudo tee /tmp/extdisabled/"$version"/"$extension" >/dev/null 2>&1
34
34
  }
@@ -60,12 +60,33 @@ add_brew_tap() {
60
60
  fi
61
61
  }
62
62
 
63
+ # Function to get extension name from brew formula.
64
+ get_extension_from_formula() {
65
+ local formula=$1
66
+ local extension
67
+ extension=$(grep "$formula=" "$src"/configs/brew_extensions | cut -d '=' -f 2)
68
+ [[ -z "$extension" ]] && extension="$(echo "$formula" | sed -E "s/pecl_|[0-9]//g")"
69
+ echo "$extension"
70
+ }
71
+
72
+ # Function to copy extension binaries to the extension directory.
73
+ copy_brew_extensions() {
74
+ local formula=$1
75
+ formula_file="$tap_dir/$ext_tap/Formula/$formula@$version.rb"
76
+ deps="$(grep -Eo 'depends_on "shivammathur[^"]+' "$formula_file" | cut -d '/' -f 3 | tr '\n' ' ')"
77
+ IFS=' ' read -r -a deps <<< "$formula@$version $deps"
78
+ for dependency in "${deps[@]}"; do
79
+ extension_file="$brew_prefix/opt/$dependency/$(get_extension_from_formula "${dependency%@*}").so"
80
+ [ -e "$extension_file" ] && sudo cp "$extension_file" "$ext_dir"
81
+ done
82
+ sudo find -- "$brew_prefix"/Cellar/"$formula"@"$version" -name "*.dylib" -exec cp {} "$ext_dir" \;
83
+ }
84
+
63
85
  # Function to install a php extension from shivammathur/extensions tap.
64
86
  add_brew_extension() {
65
87
  formula=$1
66
88
  prefix=$2
67
- extension=$(grep "$formula=" "$src"/configs/brew_extensions | cut -d '=' -f 2)
68
- [[ -z "$extension" ]] && extension="$(echo "$formula" | sed -E "s/pecl_|[0-9]//g")"
89
+ extension="$(get_extension_from_formula "$formula")"
69
90
  enable_extension "$extension" "$prefix"
70
91
  if check_extension "$extension"; then
71
92
  add_log "${tick:?}" "$extension" "Enabled"
@@ -75,8 +96,8 @@ add_brew_extension() {
75
96
  sudo mv "$tap_dir"/"$ext_tap"/.github/deps/"$formula"/* "$core_repo/Formula/" 2>/dev/null || true
76
97
  update_dependencies >/dev/null 2>&1
77
98
  disable_dependency_extensions "$extension" >/dev/null 2>&1
78
- brew install -f "$formula@$version" >/dev/null 2>&1
79
- sudo cp "$brew_prefix/opt/$formula@$version/$extension.so" "$ext_dir"
99
+ brew install -f "$ext_tap/$formula@$version" >/dev/null 2>&1
100
+ copy_brew_extensions "$formula"
80
101
  add_extension_log "$extension" "Installed and enabled"
81
102
  fi
82
103
  }
@@ -122,10 +143,10 @@ link_libraries() {
122
143
  # Patch brew to overwrite packages.
123
144
  patch_brew() {
124
145
  formula_installer="$brew_repo"/Library/Homebrew/formula_installer.rb
125
- code=" keg.link(verbose: verbose?"
126
- sudo sed -i '' "s/$code)/$code, overwrite: true)/" "$formula_installer"
146
+ code=" keg.link\(verbose: verbose\?"
147
+ sudo sed -Ei '' "s/$code.*/$code, overwrite: true\)/" "$formula_installer"
127
148
  # shellcheck disable=SC2064
128
- trap "sudo sed -i '' 's/$code, overwrite: true)/$code)/' $formula_installer" exit
149
+ trap "sudo sed -Ei '' 's/$code.*/$code, overwrite: overwrite?\)/' $formula_installer" exit
129
150
  }
130
151
 
131
152
  # Helper function to update the dependencies.
@@ -137,9 +158,9 @@ update_dependencies_helper() {
137
158
 
138
159
  # Function to update dependencies.
139
160
  update_dependencies() {
161
+ patch_brew
140
162
  if ! [ -e /tmp/update_dependencies ]; then
141
163
  if [ "${runner:?}" != "self-hosted" ] && [ "${ImageOS:-}" != "" ] && [ "${ImageVersion:-}" != "" ]; then
142
- patch_brew
143
164
  while read -r dependency; do
144
165
  update_dependencies_helper "$dependency" &
145
166
  to_wait+=($!)
@@ -8,10 +8,14 @@ add_extension_log() {
8
8
  # Function to test if extension is loaded.
9
9
  check_extension() {
10
10
  local extension=$1
11
+ local extension_list=/tmp/php${version:?}_extensions
12
+ if [ ! -e "$extension_list" ]; then
13
+ php -m > "$extension_list"
14
+ fi
11
15
  if [ "$extension" != "mysql" ]; then
12
- php -m | grep -i -q -w "$extension"
16
+ grep -i -q -w "$extension" "$extension_list" || php -m | grep -i -q -w "$extension"
13
17
  else
14
- php -m | grep -i -q "$extension"
18
+ grep -i -q "$extension" "$extension_list" || php -m | grep -i -q "$extension"
15
19
  fi
16
20
  }
17
21
 
@@ -26,7 +30,8 @@ enable_cache_extension_dependencies() {
26
30
  cache_dir=$(find /tmp/extcache -maxdepth 1 -type d -regex ".*$1[0-9]*")
27
31
  if [[ -n "$cache_dir" ]]; then
28
32
  IFS=" " read -r -a deps <<<"$(find "$cache_dir" -maxdepth 1 -type f -name "*" -exec basename {} \; | tr '\n' ' ')"
29
- if [[ -n "${deps[*]}" ]] && php "${deps[@]/#/-d ${2}=}" -d "${2}=$1" -m 2>/dev/null | grep -i -q "$1"; then
33
+ IFS="#" read -r -a deps_enable <<<"$(printf -- "-d ${2}=%s.so#" "${deps[@]}")"
34
+ if [[ -n "${deps[*]}" ]] && php "${deps_enable[@]}" -d "${2}=$1.so" -m 2>/dev/null | grep -i -q "$1"; then
30
35
  for ext in "${deps[@]}"; do
31
36
  sudo rm -rf /tmp/extcache/"$ext"
32
37
  enable_extension "$ext" "$2"
@@ -38,11 +43,11 @@ enable_cache_extension_dependencies() {
38
43
 
39
44
  # Function to enable existing extensions.
40
45
  enable_extension() {
41
- modules_dir="/var/lib/php/modules/${version:?}"
42
- [ -d "$modules_dir" ] && sudo find "$modules_dir" -path "*disabled*$1" -delete
43
- enable_extension_dependencies "$1" "$2"
44
- enable_cache_extension_dependencies "$1" "$2"
45
46
  if ! check_extension "$1" && shared_extension "$1"; then
47
+ modules_dir="/var/lib/php/modules/${version:?}"
48
+ [ -d "$modules_dir" ] && sudo find "$modules_dir" -path "*disabled*$1" -delete
49
+ enable_extension_dependencies "$1" "$2"
50
+ enable_cache_extension_dependencies "$1" "$2"
46
51
  echo "$2=${ext_dir:?}/$1.so" | sudo tee -a "${pecl_file:-${ini_file[@]}}" >/dev/null
47
52
  fi
48
53
  }
@@ -60,7 +65,7 @@ enable_extensions() {
60
65
 
61
66
  # Function to get a map of extensions and their dependent shared extensions.
62
67
  get_extension_map() {
63
- php -d'error_reporting=0' "${src:?}"/scripts/extensions/extension_map.php /tmp/map"$version".orig
68
+ php -d'error_reporting=0' "${src:?}"/scripts/extensions/extension_map.php /tmp/map"$version".orig >/dev/null 2>&1
64
69
  }
65
70
 
66
71
  # Function to enable extension dependencies which are also extensions.
@@ -108,6 +113,7 @@ disable_all_shared() {
108
113
  sudo sed -i.orig -E -e "/^(zend_)?extension\s*=/d" "${ini_file[@]}" "$pecl_file" 2>/dev/null || true
109
114
  sudo find "${ini_dir:-$scan_dir}"/.. -name "*.ini" -not -path "*php.ini" -not -path "*phar.ini" -not -path "*pecl.ini" -not -path "*mods-available*" -delete >/dev/null 2>&1 || true
110
115
  mkdir -p /tmp/extdisabled/"$version"
116
+ sudo rm -f /tmp/php"$version"_extensions
111
117
  sudo find "$ext_dir" -name '*.so' -print0 | xargs -0 -n 1 basename -s .so | xargs -n 1 -I{} touch /tmp/extdisabled/"$version"/{}
112
118
  add_log "${tick:?}" "none" "Disabled all shared extensions"
113
119
  }
@@ -152,7 +158,16 @@ get_pecl_version() {
152
158
  pecl_install() {
153
159
  local extension=$1
154
160
  add_pecl >/dev/null 2>&1
155
- yes '' 2>/dev/null | sudo pecl install -f "$extension" >/dev/null 2>&1
161
+ cpu_count="$(nproc 2>/dev/null || sysctl -n hw.ncpu 2>/dev/null || echo '1')"
162
+ prefix_opts="$(parse_args "$extension" CONFIGURE_PREFIX_OPTS) MAKEFLAGS='-j $cpu_count'"
163
+ suffix_opts="$(parse_args "$extension" CONFIGURE_OPTS) $(parse_args "$extension" CONFIGURE_SUFFIX_OPTS)"
164
+ IFS=' ' read -r -a libraries <<<"$(parse_args "$extension" LIBS) $(parse_args "$extension" "$(uname -s)"_LIBS)"
165
+ (( ${#libraries[@]} )) && add_libs "${libraries[@]}" >/dev/null 2>&1
166
+ if [ "$version" = "5.3" ]; then
167
+ yes '' 2>/dev/null | sudo "$prefix_opts" pecl install -f "$extension" >/dev/null 2>&1
168
+ else
169
+ yes '' 2>/dev/null | sudo "$prefix_opts" pecl install -f -D "$(parse_pecl_configure_options "$suffix_opts")" "$extension" >/dev/null 2>&1
170
+ fi
156
171
  }
157
172
 
158
173
  # Function to install a specific version of PECL extension.
@@ -1,43 +1,76 @@
1
1
  # Function to install libraries required by couchbase
2
- add_couchbase_libs() {
3
- if [ "$(uname -s)" = "Linux" ]; then
4
- trunk="https://github.com/couchbase/libcouchbase/releases"
5
- if [[ ${version:?} =~ 5.[3-6]|7.[0-1] ]]; then
6
- release="2.10.9"
7
- else
8
- release="$(curl -sL $trunk/latest | grep -Eo "libcouchbase-[0-9]+\.[0-9]+\.[0-9]+" | head -n 1 | cut -d'-' -f 2)"
9
- fi
10
- deb_url="$trunk/download/$release/libcouchbase-${release}_ubuntu${VERSION_ID/./}_${VERSION_CODENAME}_amd64.tar"
11
- get -q -n /tmp/libcouchbase.tar "$deb_url"
12
- sudo tar -xf /tmp/libcouchbase.tar -C /tmp
13
- install_packages libev4 libevent-dev
14
- sudo dpkg -i /tmp/libcouchbase-*/*.deb
2
+ add_couchbase_clibs() {
3
+ ext=$1
4
+ trunk="https://github.com/couchbase/libcouchbase/releases"
5
+ if [[ "$ext" =~ couchbase-2.+ ]]; then
6
+ release="2.10.9"
15
7
  else
16
- if [[ ${version:?} =~ 5.[3-6]|7.[0-1] ]]; then
17
- brew install libcouchbase@2
18
- brew link --overwrite --force libcouchbase@2
19
- else
20
- brew install libcouchbase
8
+ release="$(curl -sL $trunk/latest | grep -Eo "libcouchbase-[0-9]+\.[0-9]+\.[0-9]+" | head -n 1 | cut -d'-' -f 2)"
9
+ fi
10
+ [ "$VERSION_ID" = "22.04" ] && vid=20.04 || vid="$VERSION_ID"
11
+ [ "$VERSION_CODENAME" = "jammy" ] && vcn=focal || vcn="$VERSION_CODENAME"
12
+ deb_url="$trunk/download/$release/libcouchbase-${release}_ubuntu${vid/./}_${vcn}_amd64.tar"
13
+ get -q -n /tmp/libcouchbase.tar "$deb_url"
14
+ sudo tar -xf /tmp/libcouchbase.tar -C /tmp
15
+ install_packages libev4 libevent-dev
16
+ sudo dpkg -i /tmp/libcouchbase-*/*.deb
17
+ }
18
+
19
+ add_couchbase_cxxlibs() {
20
+ if [ "$VERSION_ID" = "18.04" ]; then
21
+ if ! command -v gcc-8 >/dev/null || ! command -v g++-8 >/dev/null; then
22
+ install_packages gcc-8 g++-8 -y
21
23
  fi
24
+ printf "gcc g++" | xargs -d ' ' -I {} sudo update-alternatives --install /usr/bin/{} {} /usr/bin/{}-8 8
25
+ fi
26
+ if [ "${runner:?}" = "self-hosted" ]; then
27
+ add_list cmake https://apt.kitware.com/ubuntu/ https://apt.kitware.com/keys/kitware-archive-latest.asc "$VERSION_CODENAME" main
28
+ fi
29
+ install_packages cmake ccache
30
+ }
31
+
32
+ get_couchbase_version() {
33
+ if [[ "${version:?}" =~ ${old_versions:?} ]]; then
34
+ echo couchbase-2.2.3
35
+ elif [[ "${version:?}" =~ 5.6|7.[0-1] ]]; then
36
+ echo couchbase-2.6.2
37
+ elif [ "${version:?}" = '7.2' ]; then
38
+ echo couchbase-3.0.4
39
+ elif [ "${version:?}" = '7.3' ]; then
40
+ echo couchbase-3.2.2
41
+ else
42
+ echo couchbase
22
43
  fi
23
44
  }
24
45
 
25
46
  # Function to add couchbase.
26
47
  add_couchbase() {
27
- add_couchbase_libs >/dev/null 2>&1
28
- enable_extension "couchbase" "extension"
29
- if check_extension "couchbase"; then
30
- add_log "${tick:?}" "couchbase" "Enabled"
31
- else
32
- if [[ "${version:?}" =~ ${old_versions:?} ]]; then
33
- pecl_install couchbase-2.2.3 >/dev/null 2>&1
34
- elif [[ "${version:?}" =~ 5.6|7.[0-1] ]]; then
35
- pecl_install couchbase-2.6.2 >/dev/null 2>&1
36
- elif [[ "${version:?}" =~ 7.2 ]]; then
37
- pecl_install couchbase-3.0.4 >/dev/null 2>&1
48
+ ext=$1
49
+ if [ "$(uname -s)" = "Linux" ]; then
50
+ if [ "$ext" = "couchbase" ]; then
51
+ ext=$(get_couchbase_version)
52
+ fi
53
+ if [[ "$ext" =~ couchbase-[2-3].+ ]]; then
54
+ add_couchbase_clibs "$ext" >/dev/null 2>&1
38
55
  else
39
- pecl_install couchbase >/dev/null 2>&1
56
+ add_couchbase_cxxlibs >/dev/null 2>&1
57
+ fi
58
+ enable_extension "couchbase" "extension"
59
+ if check_extension "couchbase"; then
60
+ add_log "${tick:?}" "couchbase" "Enabled"
61
+ else
62
+ if [ "$ext" = "couchbase" ]; then
63
+ ext="couchbase-$(get_pecl_version "couchbase" "stable")"
64
+ add_extension_from_source couchbase https://pecl.php.net couchbase couchbase "${ext##*-}" extension pecl >/dev/null 2>&1
65
+ else
66
+ pecl_install "${ext}" >/dev/null 2>&1
67
+ fi
68
+ add_extension_log "couchbase" "Installed and enabled"
69
+ fi
70
+ else
71
+ if [ -e "${ext_dir:?}"/libcouchbase_php_core.dylib ]; then
72
+ sudo cp "${ext_dir:?}"/libcouchbase_php_core.dylib ${brew_prefix:?}/lib
40
73
  fi
41
- add_extension_log "couchbase" "Installed and enabled"
74
+ add_brew_extension couchbase extension
42
75
  fi
43
76
  }
@@ -40,6 +40,7 @@ Function Repair-ICU() {
40
40
  }
41
41
 
42
42
  Function Add-Http() {
43
+ Add-Extension iconv >$null 2>&1
43
44
  Add-Extension raphf >$null 2>&1
44
45
  if($version -lt '8.0') {
45
46
  Add-Extension propro >$null 2>&1
@@ -11,10 +11,11 @@ get_http_version() {
11
11
 
12
12
  # Function to enable http extension.
13
13
  enable_http() {
14
+ enable_extension iconv extension
14
15
  enable_extension propro extension
15
16
  enable_extension raphf extension
16
- if (! [[ ${version:?} =~ ${jit_versions:?} ]] && check_extension propro && check_extension raphf) ||
17
- ( [[ ${version:?} =~ ${jit_versions:?} ]] && check_extension raphf); then
17
+ if (! [[ ${version:?} =~ ${jit_versions:?} ]] && check_extension iconv && check_extension propro && check_extension raphf) ||
18
+ ( [[ ${version:?} =~ ${jit_versions:?} ]] && check_extension iconv && check_extension raphf); then
18
19
  enable_extension http extension
19
20
  fi
20
21
  }
@@ -25,10 +26,12 @@ add_http_dependencies() {
25
26
  add_pecl_extension raphf 1.1.2 extension
26
27
  add_pecl_extension propro 1.0.2 extension
27
28
  elif [[ ${version:?} =~ 5.6|7.[0-4] ]]; then
28
- add_extension_helper propro
29
- add_extension_helper raphf
29
+ add_extension iconv extension
30
+ add_extension propro extension
31
+ add_extension raphf extension
30
32
  else
31
- add_extension_helper raphf
33
+ add_extension iconv extension
34
+ add_extension raphf extension
32
35
  fi
33
36
  }
34
37
 
@@ -88,6 +91,7 @@ add_http_version() {
88
91
  ext=$1
89
92
  enable_http
90
93
  if [ "x$(php -r "echo phpversion('http');")" != "x${ext##*-}" ]; then
94
+ add_http_dependencies
91
95
  disable_extension_helper http >/dev/null
92
96
  add_http_helper pecl_http-"${ext##*-}" "$os"
93
97
  status="Installed and enabled"
@@ -1,6 +1,6 @@
1
1
  # Function to parse extension environment variables
2
2
  parse_args() {
3
- local 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}"
@@ -10,6 +10,19 @@ parse_args() {
10
10
  echo "$output" | xargs -n 1 | sort | uniq | xargs
11
11
  }
12
12
 
13
+ # Function to parse configure options for pecl
14
+ # Make sure we have all options in name="value" form i.e XML properties.
15
+ parse_pecl_configure_options() {
16
+ configure_opts=$(echo "$1" | sed -r -e "s#['\"]|--##g")
17
+ IFS=' ' read -r -a opts_array <<< "$configure_opts"
18
+ output_opts=()
19
+ for opt in "${opts_array[@]}"; do
20
+ [ "${opt##*=}" != "${opt%=*}" ] && value="${opt##*=}" || value=yes
21
+ output_opts+=("${opt%=*}=\"$value\"")
22
+ done
23
+ echo "${output_opts[@]}"
24
+ }
25
+
13
26
  # Function to log if a library is installed
14
27
  add_lib_log() {
15
28
  local lib=$1
@@ -7,9 +7,18 @@ get_sqlsrv_version() {
7
7
  fi
8
8
  }
9
9
 
10
+ add_unixodbc() {
11
+ if [ "$(uname -s)" = 'Linux' ]; then
12
+ install_packages unixodbc-dev
13
+ else
14
+ brew install unixodbc
15
+ fi
16
+ }
17
+
10
18
  # Function to install sqlsrv and pdo_sqlsrv.
11
19
  add_sqlsrv() {
12
20
  ext=$1
13
21
  ext_version=$(get_sqlsrv_version)
22
+ add_unixodbc >/dev/null 2>&1
14
23
  add_pecl_extension "$ext" "$ext_version" extension
15
24
  }
@@ -31,6 +31,7 @@ disable_extension_helper() {
31
31
  fi
32
32
  sudo sed -Ei "/=(.*\/)?\"?$extension(.so)?$/d" "${ini_file[@]}" "$pecl_file"
33
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
+ sudo rm -f /tmp/php"$version"_extensions
34
35
  mkdir -p /tmp/extdisabled/"$version"
35
36
  echo '' | sudo tee /tmp/extdisabled/"$version"/"$extension" >/dev/null 2>&1
36
37
  }
@@ -115,8 +116,14 @@ add_pecl() {
115
116
 
116
117
  # Function to switch versions of PHP binaries.
117
118
  switch_version() {
118
- tools=("$@") && ! (( ${#tools[@]} )) && tools+=(pear pecl php phar phar.phar php-cgi php-config phpize phpdbg)
119
+ tools=("$@")
119
120
  to_wait=()
121
+ if ! (( ${#tools[@]} )); then
122
+ tools+=(pear pecl php phar phar.phar php-cgi php-config phpize phpdbg)
123
+ [ -e /usr/lib/cgi-bin/php"$version" ] && sudo update-alternatives --set php-cgi-bin /usr/lib/cgi-bin/php"$version" & to_wait+=($!)
124
+ [ -e /usr/sbin/php-fpm"$version" ] && sudo update-alternatives --set php-fpm /usr/sbin/php-fpm"$version" & to_wait+=($!)
125
+ [ -e /run/php/php"$version"-fpm.sock ] && sudo update-alternatives --set php-fpm.sock /run/php/php"$version"-fpm.sock & to_wait+=($!)
126
+ fi
120
127
  for tool in "${tools[@]}"; do
121
128
  if [ -e "/usr/bin/$tool$version" ]; then
122
129
  sudo update-alternatives --set "$tool" /usr/bin/"$tool$version" &
@@ -168,7 +175,10 @@ link_pecl_file() {
168
175
  echo '' | sudo tee "$pecl_file" >/dev/null 2>&1
169
176
  for file in "${ini_file[@]}"; do
170
177
  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"
178
+ if [ "$sapi_scan_dir" != "$scan_dir" ] && ! [ -h "$sapi_scan_dir" ]; then
179
+ sudo mkdir -p "$sapi_scan_dir"
180
+ sudo ln -sf "$pecl_file" "$sapi_scan_dir/99-pecl.ini"
181
+ fi
172
182
  done
173
183
  }
174
184
 
@@ -206,7 +216,7 @@ setup_php() {
206
216
  sudo mkdir -m 777 -p /var/run /run/php
207
217
  php_config="$(command -v php-config)"
208
218
  if [[ -z "$php_config" ]] || [ "$(php_semver | cut -c 1-3)" != "$version" ]; then
209
- if [ ! -e "/usr/bin/php$version" ]; then
219
+ if [ ! -e "/usr/bin/php$version" ] || [ ! -e "/usr/bin/php-config$version" ]; then
210
220
  add_php >/dev/null 2>&1
211
221
  else
212
222
  if ! [[ "$version" =~ ${old_versions:?} ]]; then
@@ -142,6 +142,7 @@ add_composertool_helper() {
142
142
  scoped_dir="$composer_bin/_tools/$tool-$(echo -n "$release" | shasum -a 256 | cut -d ' ' -f 1)"
143
143
  if ! [ -d "$scoped_dir" ]; then
144
144
  mkdir -p "$scoped_dir"
145
+ echo '{}' | tee "$scoped_dir/composer.json" >/dev/null
145
146
  composer require "$prefix$release" -d "$scoped_dir" "$composer_args" >/dev/null 2>&1
146
147
  composer show "$prefix$tool" -d "$scoped_dir" 2>&1 | grep -E ^versions | sudo tee /tmp/composer.log >/dev/null 2>&1
147
148
  fi
@@ -1,6 +1,6 @@
1
1
  Function Get-ProtobufTag() {
2
2
  if("$protobuf_tag" -eq "latest") {
3
- $protobuf_tag = (Invoke-RestMethod https://api.github.com/repos/protocolbuffers/protobuf/tags).Name | Where-Object { $_ -match "v\d+.\d+.\d+$" } | Select-Object -First 1
3
+ $protobuf_tag = (Invoke-RestMethod https://api.github.com/repos/protocolbuffers/protobuf/releases).tag_name | Where-Object { $_ -match "v\d+.\d+.\d+$" } | Select-Object -First 1
4
4
  } else {
5
5
  try {
6
6
  [net.httpWebRequest] $request = [net.webRequest]::create("https://github.com/protocolbuffers/protobuf/releases/tag/v$protobuf_tag")
@@ -9,7 +9,7 @@ Function Get-ProtobufTag() {
9
9
  $response.Close()
10
10
  $protobuf_tag = "v$protobuf_tag"
11
11
  } catch {
12
- $protobuf_tag = (Invoke-RestMethod https://api.github.com/repos/protocolbuffers/protobuf/tags).Name | Where-Object { $_ -match "v\d+.\d+.\d+$" } | Select-Object -First 1
12
+ $protobuf_tag = (Invoke-RestMethod https://api.github.com/repos/protocolbuffers/protobuf/releases).tag_name | Where-Object { $_ -match "v\d+.\d+.\d+$" } | Select-Object -First 1
13
13
  }
14
14
  }
15
15
  return $protobuf_tag
@@ -1,12 +1,12 @@
1
1
  get_protobuf_tag() {
2
2
  if [ "$protobuf_tag" = "latest" ]; then
3
- protobuf_tag=$(get -s -n "" https://github.com/protocolbuffers/protobuf/releases/latest 2<&1 | grep -m 1 -Eo "(v[0-9]+\.[0-9]+\.[0-9]+)" | head -n 1)
3
+ protobuf_tag=$(get -s -n "" https://github.com/protocolbuffers/protobuf/releases/latest 2<&1 | grep -m 1 -Eo "tag/(v[0-9]+(\.[0-9]+)?(\.[0-9]+)?)" | head -n 1 | cut -d '/' -f 2)
4
4
  else
5
5
  status_code=$(get -v -n /tmp/protobuf.tmp "https://github.com/protocolbuffers/protobuf/releases/tag/v$protobuf_tag")
6
6
  if [ "$status_code" = "200" ]; then
7
7
  protobuf_tag="v$protobuf_tag"
8
8
  else
9
- protobuf_tag=$(get -s -n "" https://github.com/protocolbuffers/protobuf/releases/latest 2<&1 | grep -m 1 -Eo "(v[0-9]+\.[0-9]+\.[0-9]+)" | head -n 1)
9
+ protobuf_tag=$(get -s -n "" https://github.com/protocolbuffers/protobuf/releases/latest 2<&1 | grep -m 1 -Eo "tag/(v[0-9]+(\.[0-9]+)?(\.[0-9]+)?)" | head -n 1 | cut -d '/' -f 2)
10
10
  fi
11
11
  fi
12
12
  }
@@ -21,15 +21,15 @@ fi
21
21
 
22
22
  # Function to log start of a operation.
23
23
  step_log() {
24
- message=$1
24
+ local message=$1
25
25
  printf "\n\033[90;1m==> \033[0m\033[37;1m%s\033[0m\n" "$message"
26
26
  }
27
27
 
28
28
  # Function to log result of a operation.
29
29
  add_log() {
30
- mark=$1
31
- subject=$2
32
- message=$3
30
+ local mark=$1
31
+ local subject=$2
32
+ local message=$3
33
33
  if [ "$mark" = "$tick" ]; then
34
34
  printf "\033[32;1m%s \033[0m\033[34;1m%s \033[0m\033[90;1m%s\033[0m\n" "$mark" "$subject" "$message"
35
35
  else
@@ -159,10 +159,10 @@ self_hosted_setup() {
159
159
  configure_php() {
160
160
  add_php_config
161
161
  ini_config_dir="${src:?}"/configs/ini
162
- ini_files=("$ini_config_dir"/php.ini)
163
- [[ "$version" =~ $jit_versions ]] && ini_files+=("$ini_config_dir"/jit.ini)
164
- [[ "$version" =~ $xdebug3_versions ]] && ini_files+=("$ini_config_dir"/xdebug.ini)
165
- cat "${ini_files[@]}" | sudo tee -a "${pecl_file:-${ini_file[@]}}" >/dev/null 2>&1
162
+ ini_config_files=("$ini_config_dir"/php.ini)
163
+ [[ "$version" =~ $jit_versions ]] && ini_config_files+=("$ini_config_dir"/jit.ini)
164
+ [[ "$version" =~ $xdebug3_versions ]] && ini_config_files+=("$ini_config_dir"/xdebug.ini)
165
+ cat "${ini_config_files[@]}" | sudo tee -a "${ini_file[@]:?}" >/dev/null 2>&1
166
166
  }
167
167
 
168
168
  # Function to get PHP version in semver format.
package/src/tools.ts CHANGED
@@ -230,24 +230,34 @@ export async function addBlackfirePlayer(data: RS): Promise<string> {
230
230
  * @param data
231
231
  */
232
232
  export async function addComposer(data: RS): Promise<string> {
233
+ const channel = data['version'].replace('latest', 'stable');
233
234
  const github = data['github'];
234
235
  const getcomposer = data['domain'];
235
- let cache_url = `${github}/shivammathur/composer-cache/releases/latest/download/composer-${
236
- data['php_version']
237
- }-${data['version'].replace('latest', 'stable')}.phar`;
236
+ const cds = 'https://dl.cloudsmith.io';
237
+ const filename = `composer-${data['php_version']}-${channel}.phar`;
238
+ const releases_url = `${github}/shivammathur/composer-cache/releases/latest/download/${filename}`;
239
+ const cds_url = `${cds}/public/shivammathur/composer-cache/raw/files/${filename}`;
240
+ const lts_url = `${getcomposer}/download/latest-2.2.x/composer.phar`;
241
+ const is_lts = /^5\.[3-6]$|^7\.[0-1]$/.test(data['php_version']);
242
+ const version_source_url = `${getcomposer}/composer-${channel}.phar`;
243
+ let cache_url = `${releases_url},${cds_url}`;
238
244
  let source_url = `${getcomposer}/composer.phar`;
239
245
  switch (true) {
240
- case /^snapshot$/.test(data['version']):
246
+ case /^snapshot$/.test(channel):
247
+ source_url = is_lts ? lts_url : source_url;
241
248
  break;
242
- case /^preview$|^[1-2]$/.test(data['version']):
243
- source_url = `${getcomposer}/composer-${data['version']}.phar`;
249
+ case /^preview$|^2$/.test(channel):
250
+ source_url = is_lts ? lts_url : version_source_url;
251
+ break;
252
+ case /^1$/.test(channel):
253
+ source_url = version_source_url;
244
254
  break;
245
255
  case /^\d+\.\d+\.\d+[\w-]*$/.test(data['version']):
246
256
  cache_url = `${github}/${data['repository']}/releases/download/${data['version']}/composer.phar`;
247
- source_url = `${getcomposer}/composer-${data['version']}.phar`;
257
+ source_url = version_source_url;
248
258
  break;
249
259
  default:
250
- source_url = `${getcomposer}/composer-stable.phar`;
260
+ source_url = is_lts ? lts_url : version_source_url;
251
261
  }
252
262
  const use_cache: boolean = (await utils.readEnv('NO_TOOLS_CACHE')) !== 'true';
253
263
  data['url'] = use_cache ? `${cache_url},${source_url}` : source_url;