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.
Files changed (81) hide show
  1. package/README.md +154 -141
  2. package/lib/config.d.ts +3 -0
  3. package/lib/config.js +72 -0
  4. package/lib/config.js.map +1 -0
  5. package/lib/coverage.d.ts +5 -0
  6. package/lib/coverage.js +98 -0
  7. package/lib/coverage.js.map +1 -0
  8. package/lib/extensions.d.ts +4 -0
  9. package/lib/extensions.js +215 -0
  10. package/lib/extensions.js.map +1 -0
  11. package/lib/fetch.d.ts +1 -0
  12. package/lib/fetch.js +63 -0
  13. package/lib/fetch.js.map +1 -0
  14. package/lib/install.d.ts +2 -0
  15. package/lib/install.js +76 -0
  16. package/lib/install.js.map +1 -0
  17. package/lib/tools.d.ts +23 -0
  18. package/lib/tools.js +368 -0
  19. package/lib/tools.js.map +1 -0
  20. package/lib/utils.d.ts +21 -0
  21. package/lib/utils.js +262 -0
  22. package/lib/utils.js.map +1 -0
  23. package/package.json +18 -17
  24. package/src/config.ts +8 -8
  25. package/src/configs/brew_extensions +1 -0
  26. package/src/configs/composer.env +2 -0
  27. package/src/configs/ini/jit.ini +3 -0
  28. package/src/configs/ini/php.ini +2 -0
  29. package/src/configs/ini/xdebug.ini +1 -0
  30. package/src/configs/os_releases.csv +2 -0
  31. package/src/configs/php_packages +12 -0
  32. package/src/configs/tools.json +48 -26
  33. package/src/configs/tools_schema.json +11 -0
  34. package/src/coverage.ts +24 -49
  35. package/src/extensions.ts +23 -19
  36. package/src/fetch.ts +54 -0
  37. package/src/install.ts +27 -40
  38. package/src/scripts/darwin.sh +58 -30
  39. package/src/scripts/extensions/add_extensions.ps1 +194 -0
  40. package/src/scripts/extensions/add_extensions.sh +184 -0
  41. package/src/scripts/{ext → extensions}/blackfire.ps1 +0 -0
  42. package/src/scripts/{ext → extensions}/blackfire.sh +0 -0
  43. package/src/scripts/{ext → extensions}/couchbase.sh +0 -0
  44. package/src/scripts/{ext → extensions}/cubrid.sh +3 -3
  45. package/src/scripts/{ext → extensions}/extension_map.php +36 -13
  46. package/src/scripts/{ext → extensions}/firebird.ps1 +0 -0
  47. package/src/scripts/{ext → extensions}/firebird.sh +0 -0
  48. package/src/scripts/{ext → extensions}/gearman.sh +0 -0
  49. package/src/scripts/{ext → extensions}/geos.sh +0 -0
  50. package/src/scripts/{ext → extensions}/http.ps1 +0 -0
  51. package/src/scripts/{ext → extensions}/http.sh +4 -15
  52. package/src/scripts/{ext → extensions}/intl.sh +0 -0
  53. package/src/scripts/{ext → extensions}/ioncube.ps1 +2 -2
  54. package/src/scripts/{ext → extensions}/ioncube.sh +2 -2
  55. package/src/scripts/{ext → extensions}/oci.ps1 +39 -14
  56. package/src/scripts/{ext → extensions}/oci.sh +3 -3
  57. package/src/scripts/{ext → extensions}/patches/firebird.sh +0 -0
  58. package/src/scripts/{ext → extensions}/patches/geos.sh +0 -0
  59. package/src/scripts/{ext → extensions}/patches/http.sh +0 -0
  60. package/src/scripts/{ext → extensions}/patches/pdo_oci.sh +0 -0
  61. package/src/scripts/{ext → extensions}/patches/phpize.sh +0 -0
  62. package/src/scripts/{ext → extensions}/patches/protobuf.sh +0 -0
  63. package/src/scripts/{ext → extensions}/phalcon.ps1 +0 -0
  64. package/src/scripts/{ext → extensions}/phalcon.sh +4 -5
  65. package/src/scripts/{ext → extensions}/source.sh +23 -22
  66. package/src/scripts/extensions/sqlsrv.sh +15 -0
  67. package/src/scripts/linux.sh +63 -33
  68. package/src/scripts/tools/add_tools.ps1 +220 -10
  69. package/src/scripts/tools/add_tools.sh +164 -17
  70. package/src/scripts/tools/grpc_php_plugin.ps1 +4 -4
  71. package/src/scripts/tools/grpc_php_plugin.sh +3 -3
  72. package/src/scripts/tools/ppa.sh +12 -9
  73. package/src/scripts/tools/protoc.ps1 +2 -2
  74. package/src/scripts/tools/protoc.sh +2 -2
  75. package/src/scripts/tools/symfony.ps1 +14 -0
  76. package/src/scripts/tools/symfony.sh +13 -0
  77. package/src/scripts/unix.sh +186 -0
  78. package/src/scripts/win32.ps1 +126 -340
  79. package/src/tools.ts +56 -82
  80. package/src/utils.ts +57 -145
  81. package/src/scripts/common.sh +0 -366
package/src/coverage.ts CHANGED
@@ -20,13 +20,13 @@ export async function checkXdebugError(
20
20
  *
21
21
  * @param extension
22
22
  * @param version
23
- * @param os_version
23
+ * @param os
24
24
  * @param pipe
25
25
  */
26
26
  export async function addCoverageXdebug(
27
27
  extension: string,
28
28
  version: string,
29
- os_version: string,
29
+ os: string,
30
30
  pipe: string
31
31
  ): Promise<string> {
32
32
  let script = '\n';
@@ -34,20 +34,14 @@ export async function addCoverageXdebug(
34
34
  let status = '$cross';
35
35
  if (!message) {
36
36
  script +=
37
- (await extensions.addExtension(
38
- ':pcov:false',
39
- version,
40
- os_version,
41
- true
42
- )) + pipe;
37
+ (await extensions.addExtension(':pcov:false', version, os, true)) + pipe;
43
38
  extension = extension == 'xdebug3' ? 'xdebug' : extension;
44
39
  script +=
45
- (await extensions.addExtension(extension, version, os_version, true)) +
46
- pipe;
40
+ (await extensions.addExtension(extension, version, os, true)) + pipe;
47
41
  message = 'Xdebug enabled as coverage driver';
48
42
  status = '$tick';
49
43
  }
50
- script += await utils.addLog(status, extension, message, os_version);
44
+ script += await utils.addLog(status, extension, message, os);
51
45
  return script;
52
46
  }
53
47
 
@@ -55,36 +49,30 @@ export async function addCoverageXdebug(
55
49
  * Function to setup PCOV
56
50
  *
57
51
  * @param version
58
- * @param os_version
52
+ * @param os
59
53
  * @param pipe
60
54
  */
61
55
  export async function addCoveragePCOV(
62
56
  version: string,
63
- os_version: string,
57
+ os: string,
64
58
  pipe: string
65
59
  ): Promise<string> {
66
60
  let script = '\n';
67
61
  switch (true) {
68
62
  default:
69
63
  script +=
70
- (await extensions.addExtension(
71
- ':xdebug:false',
72
- version,
73
- os_version,
74
- true
75
- )) + pipe;
76
- script +=
77
- (await extensions.addExtension('pcov', version, os_version, true)) +
64
+ (await extensions.addExtension(':xdebug:false', version, os, true)) +
78
65
  pipe;
79
66
  script +=
80
- (await config.addINIValues('pcov.enabled=1', os_version, true)) + '\n';
67
+ (await extensions.addExtension('pcov', version, os, true)) + pipe;
68
+ script += (await config.addINIValues('pcov.enabled=1', os, true)) + '\n';
81
69
 
82
70
  // success
83
71
  script += await utils.addLog(
84
72
  '$tick',
85
73
  'coverage: pcov',
86
74
  'PCOV enabled as coverage driver',
87
- os_version
75
+ os
88
76
  );
89
77
  // version is not supported
90
78
  break;
@@ -94,7 +82,7 @@ export async function addCoveragePCOV(
94
82
  '$cross',
95
83
  'pcov',
96
84
  'PHP 7.1 or newer is required',
97
- os_version
85
+ os
98
86
  );
99
87
  break;
100
88
  }
@@ -106,31 +94,20 @@ export async function addCoveragePCOV(
106
94
  * Function to disable Xdebug and PCOV
107
95
  *
108
96
  * @param version
109
- * @param os_version
97
+ * @param os
110
98
  * @param pipe
111
99
  */
112
100
  export async function disableCoverage(
113
101
  version: string,
114
- os_version: string,
102
+ os: string,
115
103
  pipe: string
116
104
  ): Promise<string> {
117
105
  let script = '\n';
118
106
  script +=
119
- (await extensions.addExtension(':pcov:false', version, os_version, true)) +
120
- pipe;
107
+ (await extensions.addExtension(':pcov:false', version, os, true)) + pipe;
121
108
  script +=
122
- (await extensions.addExtension(
123
- ':xdebug:false',
124
- version,
125
- os_version,
126
- true
127
- )) + pipe;
128
- script += await utils.addLog(
129
- '$tick',
130
- 'none',
131
- 'Disabled Xdebug and PCOV',
132
- os_version
133
- );
109
+ (await extensions.addExtension(':xdebug:false', version, os, true)) + pipe;
110
+ script += await utils.addLog('$tick', 'none', 'Disabled Xdebug and PCOV', os);
134
111
 
135
112
  return script;
136
113
  }
@@ -140,29 +117,27 @@ export async function disableCoverage(
140
117
  *
141
118
  * @param coverage_driver
142
119
  * @param version
143
- * @param os_version
120
+ * @param os
144
121
  */
145
122
  export async function addCoverage(
146
123
  coverage_driver: string,
147
124
  version: string,
148
- os_version: string
125
+ os: string
149
126
  ): Promise<string> {
150
127
  coverage_driver = coverage_driver.toLowerCase();
151
- const script: string =
152
- '\n' + (await utils.stepLog('Setup Coverage', os_version));
153
- const pipe: string = (await utils.suppressOutput(os_version)) + '\n';
128
+ const script: string = '\n' + (await utils.stepLog('Setup Coverage', os));
129
+ const pipe: string = (await utils.suppressOutput(os)) + '\n';
154
130
  switch (coverage_driver) {
155
131
  case 'pcov':
156
- return script + (await addCoveragePCOV(version, os_version, pipe));
132
+ return script + (await addCoveragePCOV(version, os, pipe));
157
133
  case 'xdebug':
158
134
  case 'xdebug2':
159
135
  case 'xdebug3':
160
136
  return (
161
- script +
162
- (await addCoverageXdebug(coverage_driver, version, os_version, pipe))
137
+ script + (await addCoverageXdebug(coverage_driver, version, os, pipe))
163
138
  );
164
139
  case 'none':
165
- return script + (await disableCoverage(version, os_version, pipe));
140
+ return script + (await disableCoverage(version, os, pipe));
166
141
  default:
167
142
  return '';
168
143
  }
package/src/extensions.ts CHANGED
@@ -31,12 +31,12 @@ export async function addExtensionDarwin(
31
31
  case /.+-.+\/.+@.+/.test(extension):
32
32
  add_script += await utils.parseExtensionSource(extension, ext_prefix);
33
33
  return;
34
- // match 5.3blackfire...8.0blackfire
35
- // match 5.3blackfire-(semver)...8.0blackfire-(semver)
34
+ // match 5.3blackfire...8.1blackfire
35
+ // match 5.3blackfire-(semver)...8.1blackfire-(semver)
36
36
  // match couchbase, geos, pdo_oci, oci8, http, pecl_http
37
37
  // match 5.3ioncube...7.4ioncube
38
38
  // match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4
39
- case /^(5\.[3-6]|7\.[0-4]|8\.0)blackfire(-\d+\.\d+\.\d+)?$/.test(
39
+ case /^(5\.[3-6]|7\.[0-4]|8\.[0-1])blackfire(-\d+\.\d+\.\d+)?$/.test(
40
40
  version_extension
41
41
  ):
42
42
  case /^couchbase$|^geos$|^pdo_oci$|^oci8$|^(pecl_)?http|^pdo_firebird$/.test(
@@ -44,9 +44,10 @@ export async function addExtensionDarwin(
44
44
  ):
45
45
  case /^(5\.[3-6]|7\.[0-4])ioncube$/.test(version_extension):
46
46
  case /(5\.6|7\.[0-3])phalcon3|7\.[2-4]phalcon4/.test(version_extension):
47
+ case /(?<!5\.[3-6])(pdo_)?sqlsrv$/.test(version_extension):
47
48
  add_script += await utils.customPackage(
48
49
  ext_name,
49
- 'ext',
50
+ 'extensions',
50
51
  extension,
51
52
  'darwin'
52
53
  );
@@ -73,11 +74,11 @@ export async function addExtensionDarwin(
73
74
  case /(5\.[3-6]|7\.0)pcov/.test(version_extension):
74
75
  add_script += await utils.getUnsupportedLog('pcov', version, 'darwin');
75
76
  return;
76
- // match 5.6 and newer - amqp, apcu, expect, grpc, igbinary, imagick, imap, memcache, memcached, mongodb, msgpack, protobuf, raphf, rdkafka, redis, ssh2, swoole, xdebug, xdebug2, yaml, zmq
77
+ // match 5.6 and newer - amqp, apcu, expect, gnupg, grpc, igbinary, imagick, imap, memcache, memcached, mongodb, msgpack, protobuf, raphf, rdkafka, redis, ssh2, swoole, xdebug, xdebug2, yaml, zmq
77
78
  // match 7.1 and newer - pcov
78
79
  // match 5.6 to 7.4 - propro
79
80
  // match 7.0 and newer - vips, xlswriter
80
- case /(?<!5\.[3-5])(amqp|apcu|expect|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|memcache|memcached|mongodb|msgpack|protobuf|psr|raphf|rdkafka|redis|ssh2|swoole|xdebug|xdebug2|yaml|zmq)/.test(
81
82
  version_extension
82
83
  ):
83
84
  case /(5\.6|7\.[0-4])propro/.test(version_extension):
@@ -142,7 +143,7 @@ export async function addExtensionWindows(
142
143
  case /^(7\.[1-4]|8\.0)(pecl_)?http/.test(version_extension):
143
144
  add_script += await utils.customPackage(
144
145
  ext_name,
145
- 'ext',
146
+ 'extensions',
146
147
  extension,
147
148
  'win32'
148
149
  );
@@ -231,7 +232,9 @@ export async function addExtensionLinux(
231
232
  let remove_script = '';
232
233
  await utils.asyncForEach(extensions, async function (extension: string) {
233
234
  const version_extension: string = version + extension;
234
- const [ext_name, ext_version]: string[] = extension.split('-');
235
+ const [ext_name, ext_version]: string[] = extension
236
+ .split(/-(.+)/)
237
+ .filter(Boolean);
235
238
  const ext_prefix = await utils.getExtensionPrefix(ext_name);
236
239
 
237
240
  switch (true) {
@@ -247,13 +250,13 @@ export async function addExtensionLinux(
247
250
  case /.+-.+\/.+@.+/.test(extension):
248
251
  add_script += await utils.parseExtensionSource(extension, ext_prefix);
249
252
  return;
250
- // match 5.3blackfire...8.0blackfire
251
- // match 5.3blackfire-(semver)...8.0blackfire-(semver)
253
+ // match 5.3blackfire...8.1blackfire
254
+ // match 5.3blackfire-(semver)...8.1blackfire-(semver)
252
255
  // match 5.3pdo_cubrid...7.2php_cubrid, 5.3cubrid...7.4cubrid
253
256
  // match couchbase, geos, pdo_oci, oci8, http, pecl_http
254
257
  // match 5.3ioncube...7.4ioncube
255
258
  // match 7.0phalcon3...7.3phalcon3 and 7.2phalcon4...7.4phalcon4
256
- case /^(5\.[3-6]|7\.[0-4]|8\.0)blackfire(-\d+\.\d+\.\d+)?$/.test(
259
+ case /^(5\.[3-6]|7\.[0-4]|8\.[0-1])blackfire(-\d+\.\d+\.\d+)?$/.test(
257
260
  version_extension
258
261
  ):
259
262
  case /^((5\.[3-6])|(7\.[0-2]))pdo_cubrid$|^((5\.[3-6])|(7\.[0-4]))cubrid$/.test(
@@ -265,9 +268,10 @@ export async function addExtensionLinux(
265
268
  case /(?<!5\.[3-5])intl-[\d]+\.[\d]+$/.test(version_extension):
266
269
  case /^(5\.[3-6]|7\.[0-4])ioncube$/.test(version_extension):
267
270
  case /^7\.[0-3]phalcon3$|^7\.[2-4]phalcon4$/.test(version_extension):
271
+ case /(?<!5\.[3-6])(pdo_)?sqlsrv$/.test(version_extension):
268
272
  add_script += await utils.customPackage(
269
273
  ext_name,
270
- 'ext',
274
+ 'extensions',
271
275
  extension,
272
276
  'linux'
273
277
  );
@@ -325,20 +329,20 @@ export async function addExtensionLinux(
325
329
  *
326
330
  * @param extension_csv
327
331
  * @param version
328
- * @param os_version
332
+ * @param os
329
333
  * @param no_step
330
334
  */
331
335
  export async function addExtension(
332
336
  extension_csv: string,
333
337
  version: string,
334
- os_version: string,
338
+ os: string,
335
339
  no_step = false
336
340
  ): Promise<string> {
337
- const log: string = await utils.stepLog('Setup Extensions', os_version);
341
+ const log: string = await utils.stepLog('Setup Extensions', os);
338
342
  let script = '\n';
339
343
  switch (no_step) {
340
344
  case true:
341
- script += log + (await utils.suppressOutput(os_version));
345
+ script += log + (await utils.suppressOutput(os));
342
346
  break;
343
347
  case false:
344
348
  default:
@@ -346,7 +350,7 @@ export async function addExtension(
346
350
  break;
347
351
  }
348
352
 
349
- switch (os_version) {
353
+ switch (os) {
350
354
  case 'win32':
351
355
  return script + (await addExtensionWindows(extension_csv, version));
352
356
  case 'darwin':
@@ -355,8 +359,8 @@ export async function addExtension(
355
359
  return script + (await addExtensionLinux(extension_csv, version));
356
360
  default:
357
361
  return await utils.log(
358
- 'Platform ' + os_version + ' is not supported',
359
- os_version,
362
+ 'Platform ' + os + ' is not supported',
363
+ os,
360
364
  'error'
361
365
  );
362
366
  }
package/src/fetch.ts ADDED
@@ -0,0 +1,54 @@
1
+ import {IncomingMessage, OutgoingHttpHeaders} from 'http';
2
+ import * as https from 'https';
3
+ import * as url from 'url';
4
+
5
+ /**
6
+ * Function to fetch an URL
7
+ *
8
+ * @param input_url
9
+ * @param auth_token
10
+ */
11
+ export async function fetch(
12
+ input_url: string,
13
+ auth_token?: string,
14
+ redirect_count = 5
15
+ ): Promise<Record<string, string>> {
16
+ const fetch_promise: Promise<Record<string, string>> = new Promise(
17
+ resolve => {
18
+ const url_object: url.UrlObject = new url.URL(input_url);
19
+ const headers: OutgoingHttpHeaders = {
20
+ 'User-Agent': `Mozilla/5.0 (${process.platform} ${process.arch}) setup-php`
21
+ };
22
+ if (auth_token) {
23
+ headers.authorization = 'Bearer ' + auth_token;
24
+ }
25
+ const options: https.RequestOptions = {
26
+ hostname: url_object.hostname,
27
+ path: url_object.pathname,
28
+ headers: headers
29
+ };
30
+ const req = https.get(options, (res: IncomingMessage) => {
31
+ if (res.statusCode === 200) {
32
+ let body = '';
33
+ res.setEncoding('utf8');
34
+ res.on('data', chunk => (body += chunk));
35
+ res.on('end', () => resolve({data: `${body}`}));
36
+ } else if (
37
+ [301, 302, 303, 307, 308].includes(res.statusCode as number)
38
+ ) {
39
+ if (redirect_count > 0 && res.headers.location) {
40
+ fetch(res.headers.location, auth_token, redirect_count--).then(
41
+ resolve
42
+ );
43
+ } else {
44
+ resolve({error: `${res.statusCode}: Redirect error`});
45
+ }
46
+ } else {
47
+ resolve({error: `${res.statusCode}: ${res.statusMessage}`});
48
+ }
49
+ });
50
+ req.end();
51
+ }
52
+ );
53
+ return await fetch_promise;
54
+ }
package/src/install.ts CHANGED
@@ -1,3 +1,5 @@
1
+ import path from 'path';
2
+ import fs from 'fs';
1
3
  import {exec} from '@actions/exec';
2
4
  import * as core from '@actions/core';
3
5
  import * as config from './config';
@@ -9,66 +11,51 @@ import * as utils from './utils';
9
11
  /**
10
12
  * Build the script
11
13
  *
12
- * @param filename
13
- * @param version
14
- * @param os_version
14
+ * @param os
15
15
  */
16
- export async function getScript(
17
- filename: string,
18
- version: string,
19
- os_version: string
20
- ): Promise<string> {
16
+ export async function getScript(os: string): Promise<string> {
21
17
  const url = 'https://setup-php.com/sponsor';
22
- // taking inputs
18
+ const filename = os + (await utils.scriptExtension(os));
19
+ const script_path = path.join(__dirname, '../src/scripts', filename);
20
+ const run_path = script_path.replace(os, 'run');
23
21
  process.env['fail_fast'] = await utils.getInput('fail-fast', false);
24
22
  const extension_csv: string = await utils.getInput('extensions', false);
25
23
  const ini_values_csv: string = await utils.getInput('ini-values', false);
26
24
  const coverage_driver: string = await utils.getInput('coverage', false);
27
25
  const tools_csv: string = await utils.getInput('tools', false);
28
-
29
- let script: string = await utils.readFile(filename, 'src/scripts');
30
- script += await tools.addTools(tools_csv, version, os_version);
26
+ const version: string = await utils.parseVersion(
27
+ await utils.getInput('php-version', true)
28
+ );
29
+ const ini_file: string = await utils.parseIniFile(
30
+ await utils.getInput('ini-file', false)
31
+ );
32
+ let script = await utils.joins('.', script_path, version, ini_file);
31
33
  if (extension_csv) {
32
- script += await extensions.addExtension(extension_csv, version, os_version);
34
+ script += await extensions.addExtension(extension_csv, version, os);
33
35
  }
36
+ script += await tools.addTools(tools_csv, version, os);
34
37
  if (coverage_driver) {
35
- script += await coverage.addCoverage(coverage_driver, version, os_version);
38
+ script += await coverage.addCoverage(coverage_driver, version, os);
36
39
  }
37
40
  if (ini_values_csv) {
38
- script += await config.addINIValues(ini_values_csv, os_version);
41
+ script += await config.addINIValues(ini_values_csv, os);
39
42
  }
40
- script += '\n' + (await utils.stepLog(`Sponsor setup-php`, os_version));
41
- script += '\n' + (await utils.addLog('$tick', 'setup-php', url, os_version));
43
+ script += '\n' + (await utils.stepLog(`Sponsor setup-php`, os));
44
+ script += '\n' + (await utils.addLog('$tick', 'setup-php', url, os));
45
+
46
+ fs.writeFileSync(run_path, script, {mode: 0o755});
42
47
 
43
- return await utils.writeScript(filename, script);
48
+ return run_path;
44
49
  }
45
50
 
46
51
  /**
47
52
  * Run the script
48
53
  */
49
54
  export async function run(): Promise<void> {
50
- try {
51
- if ((await utils.readEnv('ImageOS')) == 'ubuntu16') {
52
- core.setFailed(
53
- 'setup-php is not supported on Ubuntu 16.04. Please upgrade to Ubuntu 18.04 or Ubuntu 20.04 - https://setup-php.com/i/452'
54
- );
55
- return;
56
- }
57
- const version: string = await utils.parseVersion(
58
- await utils.getInput('php-version', true)
59
- );
60
- if (version) {
61
- const os_version: string = process.platform;
62
- const tool = await utils.scriptTool(os_version);
63
- const script = os_version + (await utils.scriptExtension(os_version));
64
- const location = await getScript(script, version, os_version);
65
- await exec(await utils.joins(tool, location, version, __dirname));
66
- } else {
67
- core.setFailed('Unable to get the PHP version');
68
- }
69
- } catch (error) {
70
- core.setFailed((error as Error).message);
71
- }
55
+ const os: string = process.platform;
56
+ const tool = await utils.scriptTool(os);
57
+ const run_path = await getScript(os);
58
+ await exec(tool + run_path);
72
59
  }
73
60
 
74
61
  // call the run function
@@ -23,11 +23,14 @@ disable_dependency_extensions() {
23
23
  disable_extension_helper() {
24
24
  local extension=$1
25
25
  local disable_dependents=${2:-false}
26
+ get_extension_map
26
27
  if [ "$disable_dependents" = "true" ]; then
27
28
  disable_extension_dependents "$extension"
28
29
  fi
29
30
  sudo sed -Ei '' "/=(.*\/)?\"?$extension(.so)?$/d" "${ini_file:?}"
30
31
  sudo rm -rf "$scan_dir"/*"$extension"*
32
+ mkdir -p /tmp/extdisabled/"$version"
33
+ echo '' | sudo tee /tmp/extdisabled/"$version"/"$extension" >/dev/null 2>&1
31
34
  }
32
35
 
33
36
  # Function to fetch a brew tap.
@@ -61,7 +64,7 @@ add_brew_tap() {
61
64
  add_brew_extension() {
62
65
  formula=$1
63
66
  prefix=$2
64
- extension=$(grep "$formula=" "$dist"/../src/configs/brew_extensions | cut -d '=' -f 2)
67
+ extension=$(grep "$formula=" "$src"/configs/brew_extensions | cut -d '=' -f 2)
65
68
  [[ -z "$extension" ]] && extension="$(echo "$formula" | sed -E "s/pecl_|[0-9]//g")"
66
69
  enable_extension "$extension" "$prefix"
67
70
  if check_extension "$extension"; then
@@ -78,22 +81,17 @@ add_brew_extension() {
78
81
  fi
79
82
  }
80
83
 
81
- # Function to setup extensions.
82
- add_extension() {
84
+ # Helper function to add an extension.
85
+ add_extension_helper() {
83
86
  local extension=$1
84
87
  prefix=$2
85
- enable_extension "$extension" "$prefix"
86
- if check_extension "$extension"; then
87
- add_log "${tick:?}" "$extension" "Enabled"
88
+ if [[ "$version" =~ ${old_versions:?} ]] && [ "$extension" = "imagick" ]; then
89
+ run_script "php5-darwin" "${version/./}" "$extension" >/dev/null 2>&1
88
90
  else
89
- if [[ "$version" =~ ${old_versions:?} ]] && [ "$extension" = "imagick" ]; then
90
- run_script "php5-darwin" "${version/./}" "$extension" >/dev/null 2>&1
91
- else
92
- pecl_install "$extension" >/dev/null 2>&1 &&
93
- if [[ "$version" =~ ${old_versions:?} ]]; then echo "$prefix=$ext_dir/$extension.so" >>"$ini_file"; fi
94
- fi
95
- add_extension_log "$extension" "Installed and enabled"
91
+ pecl_install "$extension" >/dev/null 2>&1 &&
92
+ if [[ "$version" =~ ${old_versions:?} ]]; then echo "$prefix=$ext_dir/$extension.so" >>"$ini_file"; fi
96
93
  fi
94
+ add_extension_log "$extension" "Installed and enabled"
97
95
  }
98
96
 
99
97
  # Function to handle request to add phpize and php-config.
@@ -104,6 +102,7 @@ add_devtools() {
104
102
 
105
103
  # Function to handle request to add PECL.
106
104
  add_pecl() {
105
+ enable_extension xml extension >/dev/null 2>&1
107
106
  configure_pecl >/dev/null 2>&1
108
107
  pear_version=$(get_tool_version "pecl" "version")
109
108
  add_log "${tick:?}" "PECL" "Found PECL $pear_version"
@@ -168,7 +167,7 @@ fix_dependencies() {
168
167
  get_brewed_php() {
169
168
  php_cellar="$brew_prefix"/Cellar/php
170
169
  if [ -d "$php_cellar" ] && ! [[ "$(find "$php_cellar" -maxdepth 1 -name "$version*" | wc -l 2>/dev/null)" -eq 0 ]]; then
171
- php-config --version 2>/dev/null | cut -c 1-3
170
+ php_semver | cut -c 1-3
172
171
  else
173
172
  echo 'false';
174
173
  fi
@@ -196,9 +195,31 @@ php_extra_version() {
196
195
  fi
197
196
  }
198
197
 
198
+ # Function to set php.ini
199
+ add_php_config() {
200
+ if ! [ -e "$ini_dir"/php.ini-development ]; then
201
+ sudo cp "$ini_dir"/php.ini "$ini_dir"/php.ini-development
202
+ fi
203
+ if [[ "$ini" = "production" || "$ini" = "development" ]]; then
204
+ sudo cp "$ini_dir"/php.ini-"$ini" "$ini_dir"/php.ini
205
+ elif [ "$ini" = "none" ]; then
206
+ echo '' | sudo tee "${ini_file[@]}" >/dev/null 2>&1
207
+ fi
208
+ }
209
+
210
+ # Function to get scan directory.
211
+ get_scan_dir() {
212
+ if [[ "$version" =~ ${old_versions:?} ]]; then
213
+ php --ini | grep additional | sed -e "s|.*: s*||"
214
+ else
215
+ echo "$ini_dir"/conf.d
216
+ fi
217
+ }
218
+
199
219
  # Function to Setup PHP.
200
220
  setup_php() {
201
221
  step_log "Setup PHP"
222
+ php_config="$(command -v php-config 2>/dev/null)"
202
223
  existing_version=$(get_brewed_php)
203
224
  if [[ "$version" =~ ${old_versions:?} ]]; then
204
225
  run_script "php5-darwin" "${version/./}" >/dev/null 2>&1
@@ -213,45 +234,52 @@ setup_php() {
213
234
  status="Found"
214
235
  fix_dependencies >/dev/null 2>&1
215
236
  fi
216
- ini_file=$(php -d "date.timezone=UTC" --ini | grep "Loaded Configuration" | sed -e "s|.*:s*||" | sed "s/ //g")
237
+ php_config="$(command -v php-config)"
238
+ ext_dir="$(grep 'extension_dir=' "$php_config" | cut -d "'" -f 2)"
239
+ ini_dir="$(php_ini_path)"
240
+ scan_dir="$(get_scan_dir)"
241
+ ini_file="$ini_dir"/php.ini
242
+ sudo mkdir -m 777 -p "$ext_dir" "$HOME/.composer"
217
243
  sudo chmod 777 "$ini_file" "${tool_path_dir:?}"
244
+ semver="$(php_semver)"
245
+ extra_version="$(php_extra_version)"
218
246
  configure_php
219
- ext_dir=$(php -i | grep -Ei "extension_dir => /" | sed -e "s|.*=> s*||")
220
- scan_dir=$(php --ini | grep additional | sed -e "s|.*: s*||")
221
- sudo mkdir -m 777 -p "$ext_dir" "$HOME/.composer"
222
- semver=$(php_semver)
223
- extra_version=$(php_extra_version)
247
+ set_output "php-version" "$semver"
224
248
  if [ "${semver%.*}" != "$version" ]; then
225
249
  add_log "${cross:?}" "PHP" "Could not setup PHP $version"
226
250
  exit 1
227
251
  fi
228
252
 
229
- sudo cp "$dist"/../src/configs/pm/*.json "$RUNNER_TOOL_CACHE/"
230
- echo "::set-output name=php-version::$semver"
253
+ sudo cp "$src"/configs/pm/*.json "$RUNNER_TOOL_CACHE/"
231
254
  add_log "$tick" "PHP" "$status PHP $semver$extra_version"
232
255
  }
233
256
 
234
257
  # Variables
235
- version=$1
236
- dist=$2
258
+ version=${1:-'8.1'}
259
+ ini=${2:-'production'}
260
+ src=${0%/*}/..
237
261
  php_formula=shivammathur/php/php@"$version"
238
- brew_prefix="$(brew --prefix)"
239
- brew_repo="$(brew --repository)"
262
+ brew_path="$(command -v brew)"
263
+ brew_path_dir="$(dirname "$brew_path")"
264
+ brew_prefix="$brew_path_dir"/..
265
+ brew_repo="$brew_path_dir/$(dirname "$(readlink "$brew_path")")"/..
240
266
  tap_dir="$brew_repo"/Library/Taps
241
267
  core_repo="$tap_dir"/homebrew/homebrew-core
242
- scripts="${dist}"/../src/scripts
268
+ scripts="$src"/scripts
243
269
  ext_tap=shivammathur/homebrew-extensions
244
270
  php_tap=shivammathur/homebrew-php
245
271
  export HOMEBREW_CHANGE_ARCH_TO_ARM=1
246
272
  export HOMEBREW_DEVELOPER=1
247
- export HOMEBREW_NO_INSTALL_CLEANUP=1
248
273
  export HOMEBREW_NO_AUTO_UPDATE=1
274
+ export HOMEBREW_NO_ENV_HINTS=1
275
+ export HOMEBREW_NO_INSTALL_CLEANUP=1
249
276
  export HOMEBREW_NO_INSTALLED_DEPENDENTS_CHECK=1
250
277
 
251
278
  # shellcheck source=.
252
- . "${scripts:?}"/ext/source.sh
279
+ . "${scripts:?}"/unix.sh
253
280
  . "${scripts:?}"/tools/add_tools.sh
254
- . "${scripts:?}"/common.sh
281
+ . "${scripts:?}"/extensions/source.sh
282
+ . "${scripts:?}"/extensions/add_extensions.sh
255
283
  read_env
256
284
  self_hosted_setup
257
285
  setup_php