setup-php 2.15.0 → 2.17.1

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 (86) hide show
  1. package/README.md +157 -143
  2. package/lib/config.d.ts +3 -3
  3. package/lib/config.js +71 -71
  4. package/lib/config.js.map +1 -1
  5. package/lib/coverage.d.ts +5 -4
  6. package/lib/coverage.js +97 -87
  7. package/lib/coverage.js.map +1 -1
  8. package/lib/extensions.d.ts +4 -4
  9. package/lib/extensions.js +214 -210
  10. package/lib/extensions.js.map +1 -1
  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 -2
  15. package/lib/install.js +75 -80
  16. package/lib/install.js.map +1 -1
  17. package/lib/tools.d.ts +23 -24
  18. package/lib/tools.js +373 -386
  19. package/lib/tools.js.map +1 -1
  20. package/lib/utils.d.ts +21 -23
  21. package/lib/utils.js +261 -293
  22. package/lib/utils.js.map +1 -1
  23. package/package.json +21 -20
  24. package/src/config.ts +8 -8
  25. package/src/configs/brew_extensions +2 -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-versions.json +2 -2
  32. package/src/configs/php_packages +12 -0
  33. package/src/configs/{php.json → pm/php.json} +0 -0
  34. package/src/configs/{phpunit.json → pm/phpunit.json} +24 -24
  35. package/src/configs/tools.json +48 -26
  36. package/src/configs/tools_schema.json +11 -0
  37. package/src/coverage.ts +47 -55
  38. package/src/extensions.ts +23 -19
  39. package/src/fetch.ts +54 -0
  40. package/src/install.ts +27 -40
  41. package/src/scripts/darwin.sh +72 -39
  42. package/src/scripts/extensions/add_extensions.ps1 +194 -0
  43. package/src/scripts/extensions/add_extensions.sh +184 -0
  44. package/src/scripts/{ext → extensions}/blackfire.ps1 +0 -0
  45. package/src/scripts/{ext → extensions}/blackfire.sh +0 -0
  46. package/src/scripts/{ext → extensions}/couchbase.sh +0 -0
  47. package/src/scripts/{ext → extensions}/cubrid.sh +3 -3
  48. package/src/scripts/{ext → extensions}/extension_map.php +36 -13
  49. package/src/scripts/{ext → extensions}/firebird.ps1 +0 -0
  50. package/src/scripts/{ext → extensions}/firebird.sh +0 -0
  51. package/src/scripts/{ext → extensions}/gearman.sh +0 -0
  52. package/src/scripts/{ext → extensions}/geos.sh +0 -0
  53. package/src/scripts/{ext → extensions}/http.ps1 +0 -0
  54. package/src/scripts/{ext → extensions}/http.sh +4 -15
  55. package/src/scripts/{ext → extensions}/intl.sh +0 -0
  56. package/src/scripts/{ext → extensions}/ioncube.ps1 +2 -2
  57. package/src/scripts/{ext → extensions}/ioncube.sh +2 -2
  58. package/src/scripts/{ext → extensions}/oci.ps1 +39 -14
  59. package/src/scripts/{ext → extensions}/oci.sh +3 -3
  60. package/src/scripts/{ext → extensions}/patches/firebird.sh +0 -0
  61. package/src/scripts/{ext → extensions}/patches/geos.sh +0 -0
  62. package/src/scripts/{ext → extensions}/patches/http.sh +0 -0
  63. package/src/scripts/{ext → extensions}/patches/pdo_oci.sh +0 -0
  64. package/src/scripts/{ext → extensions}/patches/phpize.sh +0 -0
  65. package/src/scripts/{ext → extensions}/patches/protobuf.sh +0 -0
  66. package/src/scripts/{ext → extensions}/phalcon.ps1 +0 -0
  67. package/src/scripts/{ext → extensions}/phalcon.sh +4 -5
  68. package/src/scripts/{ext → extensions}/source.sh +23 -22
  69. package/src/scripts/extensions/sqlsrv.sh +15 -0
  70. package/src/scripts/linux.sh +71 -40
  71. package/src/scripts/tools/add_tools.ps1 +220 -10
  72. package/src/scripts/tools/add_tools.sh +166 -15
  73. package/src/scripts/tools/blackfire.sh +2 -1
  74. package/src/scripts/tools/grpc_php_plugin.ps1 +4 -4
  75. package/src/scripts/tools/grpc_php_plugin.sh +3 -3
  76. package/src/scripts/tools/ppa.sh +12 -9
  77. package/src/scripts/tools/protoc.ps1 +2 -2
  78. package/src/scripts/tools/protoc.sh +2 -2
  79. package/src/scripts/tools/symfony.ps1 +18 -0
  80. package/src/scripts/tools/symfony.sh +18 -0
  81. package/src/scripts/unix.sh +186 -0
  82. package/src/scripts/win32.ps1 +145 -356
  83. package/src/tools.ts +62 -82
  84. package/src/utils.ts +57 -145
  85. package/lib/sapi.js +0 -64
  86. package/src/scripts/common.sh +0 -366
package/src/tools.ts CHANGED
@@ -1,3 +1,6 @@
1
+ import path from 'path';
2
+ import fs from 'fs';
3
+ import * as fetch from './fetch';
1
4
  import * as utils from './utils';
2
5
 
3
6
  type RS = Record<string, string>;
@@ -19,7 +22,7 @@ export async function getSemverVersion(data: RS): Promise<string> {
19
22
  const search: string = data['version_prefix'] + data['version'];
20
23
  const url = `https://api.github.com/repos/${data['repository']}/git/matching-refs/tags%2F${search}.`;
21
24
  const token: string = await utils.readEnv('COMPOSER_TOKEN');
22
- const response: RS = await utils.fetch(url, token);
25
+ const response: RS = await fetch.fetch(url, token);
23
26
  if (response.error || response.data === '[]') {
24
27
  data['error'] = response.error ?? `No version found with prefix ${search}.`;
25
28
  return data['version'];
@@ -40,20 +43,23 @@ export async function getLatestVersion(data: RS): Promise<string> {
40
43
  if (!data['version'] && data['fetch_latest'] === 'false') {
41
44
  return 'latest';
42
45
  }
43
- const resp: Record<string, string> = await utils.fetch(
46
+ const resp: Record<string, string> = await fetch.fetch(
44
47
  `${data['github']}/${data['repository']}/releases.atom`
45
48
  );
46
- const releases: string[] = [
47
- ...resp['data'].matchAll(/releases\/tag\/([a-zA-Z]*)?(\d+.\d+.\d+)"/g)
48
- ].map(match => match[2]);
49
+ if (resp['data']) {
50
+ const releases: string[] = [
51
+ ...resp['data'].matchAll(/releases\/tag\/([a-zA-Z]*)?(\d+.\d+.\d+)"/g)
52
+ ].map(match => match[2]);
49
53
 
50
- return (
51
- releases
52
- .sort((a: string, b: string) =>
53
- a.localeCompare(b, undefined, {numeric: true})
54
- )
55
- .pop() || 'latest'
56
- );
54
+ return (
55
+ releases
56
+ .sort((a: string, b: string) =>
57
+ a.localeCompare(b, undefined, {numeric: true})
58
+ )
59
+ .pop() || 'latest'
60
+ );
61
+ }
62
+ return 'latest';
57
63
  }
58
64
 
59
65
  /**
@@ -180,7 +186,7 @@ export async function getPharUrl(data: RS): Promise<string> {
180
186
  */
181
187
  export async function addArchive(data: RS): Promise<string> {
182
188
  return (
183
- (await utils.getCommand(data['os_version'], 'tool')) +
189
+ (await utils.getCommand(data['os'], 'tool')) +
184
190
  (await utils.joins(data['url'], data['tool'], data['version_parameter']))
185
191
  );
186
192
  }
@@ -191,9 +197,15 @@ export async function addArchive(data: RS): Promise<string> {
191
197
  * @param data
192
198
  */
193
199
  export async function addPackage(data: RS): Promise<string> {
194
- const command = await utils.getCommand(data['os_version'], 'composertool');
200
+ const command = await utils.getCommand(data['os'], 'composertool');
195
201
  const parts: string[] = data['repository'].split('/');
196
- return command + parts[1] + ' ' + data['release'] + ' ' + parts[0] + '/';
202
+ const args: string = await utils.joins(
203
+ parts[1],
204
+ data['release'],
205
+ parts[0] + '/',
206
+ data['scope']
207
+ );
208
+ return command + args;
197
209
  }
198
210
 
199
211
  /**
@@ -220,9 +232,9 @@ export async function addBlackfirePlayer(data: RS): Promise<string> {
220
232
  export async function addComposer(data: RS): Promise<string> {
221
233
  const github = data['github'];
222
234
  const getcomposer = data['domain'];
223
- let cache_url = `${github}/shivammathur/composer-cache/releases/latest/download/composer-${data[
224
- 'version'
225
- ].replace('latest', 'stable')}.phar`;
235
+ let cache_url = `${github}/shivammathur/composer-cache/releases/latest/download/composer-${
236
+ data['php_version']
237
+ }-${data['version'].replace('latest', 'stable')}.phar`;
226
238
  let source_url = `${getcomposer}/composer.phar`;
227
239
  switch (true) {
228
240
  case /^snapshot$/.test(data['version']):
@@ -264,7 +276,7 @@ export async function addDeployer(data: RS): Promise<string> {
264
276
  * @param data
265
277
  */
266
278
  export async function addDevTools(data: RS): Promise<string> {
267
- switch (data['os_version']) {
279
+ switch (data['os']) {
268
280
  case 'linux':
269
281
  case 'darwin':
270
282
  return 'add_devtools ' + data['tool'];
@@ -277,8 +289,8 @@ export async function addDevTools(data: RS): Promise<string> {
277
289
  );
278
290
  default:
279
291
  return await utils.log(
280
- 'Platform ' + data['os_version'] + ' is not supported',
281
- data['os_version'],
292
+ 'Platform ' + data['os'] + ' is not supported',
293
+ data['os'],
282
294
  'error'
283
295
  );
284
296
  }
@@ -290,7 +302,7 @@ export async function addDevTools(data: RS): Promise<string> {
290
302
  * @param data
291
303
  */
292
304
  export async function addPECL(data: RS): Promise<string> {
293
- return await utils.getCommand(data['os_version'], 'pecl');
305
+ return await utils.getCommand(data['os'], 'pecl');
294
306
  }
295
307
 
296
308
  /**
@@ -301,6 +313,12 @@ export async function addPECL(data: RS): Promise<string> {
301
313
  export async function addPhing(data: RS): Promise<string> {
302
314
  data['url'] =
303
315
  data['domain'] + '/get/phing-' + data['version'] + data['extension'];
316
+ if (data['version'] != 'latest') {
317
+ [data['prefix'], data['verb']] = ['releases', 'download'];
318
+ data['domain'] = data['github'];
319
+ data['extension'] = '-' + data['version'] + data['extension'];
320
+ data['url'] += ',' + (await getUrl(data));
321
+ }
304
322
  return await addArchive(data);
305
323
  }
306
324
 
@@ -316,29 +334,23 @@ export async function addPhive(data: RS): Promise<string> {
316
334
  '$cross',
317
335
  'phive',
318
336
  'Phive is not supported on PHP ' + data['php_version'],
319
- data['os_version']
337
+ data['os']
320
338
  );
321
339
  case /5\.6|7\.0/.test(data['php_version']):
322
- data['version'] = data['version'].replace('latest', '0.12.1');
340
+ data['version'] = '0.12.1';
323
341
  break;
324
342
  case /7\.1/.test(data['php_version']):
325
- data['version'] = data['version'].replace('latest', '0.13.5');
343
+ data['version'] = '0.13.5';
326
344
  break;
327
345
  case /7\.2/.test(data['php_version']):
328
- data['version'] = data['version'].replace('latest', '0.14.5');
346
+ data['version'] = '0.14.5';
347
+ break;
348
+ case /^latest$/.test(data['version']):
349
+ data['version'] = await getLatestVersion(data);
329
350
  break;
330
351
  }
331
- if (data['version'] === 'latest') {
332
- data['domain'] = data['domain'] + '/releases';
333
- } else {
334
- data['domain'] = [
335
- data['github'],
336
- data['repository'],
337
- 'releases/download',
338
- data['version']
339
- ].join('/');
340
- }
341
- data['url'] = await getPharUrl(data);
352
+ data['extension'] = '-' + data['version'] + data['extension'];
353
+ data['url'] = await getUrl(data);
342
354
  return await addArchive(data);
343
355
  }
344
356
 
@@ -352,39 +364,6 @@ export async function addPHPUnitTools(data: RS): Promise<string> {
352
364
  return await addArchive(data);
353
365
  }
354
366
 
355
- /**
356
- * Function to add Symfony
357
- *
358
- * @param data
359
- */
360
- export async function addSymfony(data: RS): Promise<string> {
361
- let filename: string;
362
- switch (data['os_version']) {
363
- case 'linux':
364
- case 'darwin':
365
- filename = 'symfony_' + data['os_version'] + '_amd64';
366
- break;
367
- case 'win32':
368
- filename = 'symfony_windows_amd64.exe';
369
- break;
370
- default:
371
- return await utils.log(
372
- 'Platform ' + data['os_version'] + ' is not supported',
373
- data['os_version'],
374
- 'error'
375
- );
376
- }
377
- if (data['version'] === 'latest') {
378
- data['uri'] = ['releases/latest/download', filename].join('/');
379
- } else {
380
- data['uri'] = ['releases/download', 'v' + data['version'], filename].join(
381
- '/'
382
- );
383
- }
384
- data['url'] = [data['domain'], data['repository'], data['uri']].join('/');
385
- return await addArchive(data);
386
- }
387
-
388
367
  /**
389
368
  * Function to add WP-CLI
390
369
  *
@@ -406,14 +385,15 @@ export async function addWPCLI(data: RS): Promise<string> {
406
385
  *
407
386
  * @param release
408
387
  * @param php_version
409
- * @param os_version
388
+ * @param os
410
389
  */
411
390
  export async function getData(
412
391
  release: string,
413
392
  php_version: string,
414
- os_version: string
393
+ os: string
415
394
  ): Promise<RS> {
416
- const json_file: string = await utils.readFile('tools.json', 'src/configs');
395
+ const json_file_path = path.join(__dirname, '../src/configs/tools.json');
396
+ const json_file: string = fs.readFileSync(json_file_path, 'utf8');
417
397
  const json_objects: RSRS = JSON.parse(json_file);
418
398
  release = release.replace(/\s+/g, '');
419
399
  const parts: string[] = release.split(':');
@@ -444,11 +424,12 @@ export async function getData(
444
424
  data['github'] = 'https://github.com';
445
425
  data['domain'] ??= data['github'];
446
426
  data['extension'] ??= '.phar';
447
- data['os_version'] = os_version;
427
+ data['os'] = os;
448
428
  data['php_version'] = php_version;
449
429
  data['prefix'] = data['github'] === data['domain'] ? 'releases' : '';
450
430
  data['verb'] = data['github'] === data['domain'] ? 'download' : '';
451
431
  data['fetch_latest'] ??= 'false';
432
+ data['scope'] ??= 'global';
452
433
  data['version_parameter'] = JSON.stringify(data['version_parameter']) || '';
453
434
  data['version_prefix'] ??= '';
454
435
  data['release'] = await getRelease(release, data);
@@ -468,7 +449,6 @@ export const functionRecord: Record<string, (data: RS) => Promise<string>> = {
468
449
  phing: addPhing,
469
450
  phpunit: addPHPUnitTools,
470
451
  phpcpd: addPHPUnitTools,
471
- symfony: addSymfony,
472
452
  wp_cli: addWPCLI
473
453
  };
474
454
 
@@ -477,22 +457,22 @@ export const functionRecord: Record<string, (data: RS) => Promise<string>> = {
477
457
  *
478
458
  * @param tools_csv
479
459
  * @param php_version
480
- * @param os_version
460
+ * @param os
481
461
  */
482
462
  export async function addTools(
483
463
  tools_csv: string,
484
464
  php_version: string,
485
- os_version: string
465
+ os: string
486
466
  ): Promise<string> {
487
467
  let script = '\n';
488
468
  if (tools_csv === 'none') {
489
469
  return '';
490
470
  } else {
491
- script += await utils.stepLog('Setup Tools', os_version);
471
+ script += await utils.stepLog('Setup Tools', os);
492
472
  }
493
473
  const tools_list = await filterList(await utils.CSVArray(tools_csv));
494
474
  await utils.asyncForEach(tools_list, async function (release: string) {
495
- const data: RS = await getData(release, php_version, os_version);
475
+ const data: RS = await getData(release, php_version, os);
496
476
  script += '\n';
497
477
  switch (true) {
498
478
  case data['error'] !== undefined:
@@ -500,7 +480,7 @@ export async function addTools(
500
480
  '$cross',
501
481
  data['tool'],
502
482
  data['error'],
503
- data['os_version']
483
+ data['os']
504
484
  );
505
485
  break;
506
486
  case 'phar' === data['type']:
@@ -515,7 +495,7 @@ export async function addTools(
515
495
  data['tool'].split('-')[0],
516
496
  'tools',
517
497
  data['version'],
518
- data['os_version']
498
+ data['os']
519
499
  );
520
500
  break;
521
501
  case 'custom-function' === data['type']:
@@ -528,7 +508,7 @@ export async function addTools(
528
508
  '$cross',
529
509
  data['tool'],
530
510
  'Tool ' + data['tool'] + ' is not supported',
531
- data['os_version']
511
+ data['os']
532
512
  );
533
513
  break;
534
514
  }
package/src/utils.ts CHANGED
@@ -1,9 +1,6 @@
1
- import {IncomingMessage, OutgoingHttpHeaders} from 'http';
2
- import * as fs from 'fs';
3
- import * as https from 'https';
4
1
  import * as path from 'path';
5
- import * as url from 'url';
6
2
  import * as core from '@actions/core';
3
+ import * as fetch from './fetch';
7
4
 
8
5
  /**
9
6
  * Function to read environment variable and return a string value.
@@ -47,46 +44,6 @@ export async function getInput(
47
44
  }
48
45
  }
49
46
 
50
- /**
51
- * Function to fetch an URL
52
- *
53
- * @param input_url
54
- * @param auth_token
55
- */
56
- export async function fetch(
57
- input_url: string,
58
- auth_token?: string
59
- ): Promise<Record<string, string>> {
60
- const fetch_promise: Promise<Record<string, string>> = new Promise(
61
- resolve => {
62
- const url_object: url.UrlObject = new url.URL(input_url);
63
- const headers: OutgoingHttpHeaders = {
64
- 'User-Agent': `Mozilla/5.0 (${process.platform} ${process.arch}) setup-php`
65
- };
66
- if (auth_token) {
67
- headers.authorization = 'Bearer ' + auth_token;
68
- }
69
- const options: https.RequestOptions = {
70
- hostname: url_object.hostname,
71
- path: url_object.pathname,
72
- headers: headers
73
- };
74
- const req = https.get(options, (res: IncomingMessage) => {
75
- if (res.statusCode != 200) {
76
- resolve({error: `${res.statusCode}: ${res.statusMessage}`});
77
- } else {
78
- let body = '';
79
- res.setEncoding('utf8');
80
- res.on('data', chunk => (body += chunk));
81
- res.on('end', () => resolve({data: `${body}`}));
82
- }
83
- });
84
- req.end();
85
- }
86
- );
87
- return await fetch_promise;
88
- }
89
-
90
47
  /** Function to get manifest URL
91
48
  *
92
49
  */
@@ -103,7 +60,7 @@ export async function parseVersion(version: string): Promise<string> {
103
60
  const manifest = await getManifestURL();
104
61
  switch (true) {
105
62
  case /^(latest|nightly|\d+\.x)$/.test(version):
106
- return JSON.parse((await fetch(manifest))['data'])[version];
63
+ return JSON.parse((await fetch.fetch(manifest))['data'])[version];
107
64
  default:
108
65
  switch (true) {
109
66
  case version.length > 1:
@@ -114,6 +71,22 @@ export async function parseVersion(version: string): Promise<string> {
114
71
  }
115
72
  }
116
73
 
74
+ /**
75
+ * Function to parse ini file.
76
+ *
77
+ * @param ini_file
78
+ */
79
+ export async function parseIniFile(ini_file: string): Promise<string> {
80
+ switch (true) {
81
+ case /^(production|development|none)$/.test(ini_file):
82
+ return ini_file;
83
+ case /php\.ini-(production|development)$/.test(ini_file):
84
+ return ini_file.split('-')[1];
85
+ default:
86
+ return 'production';
87
+ }
88
+ }
89
+
117
90
  /**
118
91
  * Async foreach loop
119
92
  *
@@ -155,15 +128,15 @@ export async function color(type: string): Promise<string> {
155
128
  * Log to console
156
129
  *
157
130
  * @param message
158
- * @param os_version
131
+ * @param os
159
132
  * @param log_type
160
133
  */
161
134
  export async function log(
162
135
  message: string,
163
- os_version: string,
136
+ os: string,
164
137
  log_type: string
165
138
  ): Promise<string> {
166
- switch (os_version) {
139
+ switch (os) {
167
140
  case 'win32':
168
141
  return (
169
142
  'printf "\\033[' +
@@ -186,24 +159,17 @@ export async function log(
186
159
  * Function to log a step
187
160
  *
188
161
  * @param message
189
- * @param os_version
162
+ * @param os
190
163
  */
191
- export async function stepLog(
192
- message: string,
193
- os_version: string
194
- ): Promise<string> {
195
- switch (os_version) {
164
+ export async function stepLog(message: string, os: string): Promise<string> {
165
+ switch (os) {
196
166
  case 'win32':
197
167
  return 'Step-Log "' + message + '"';
198
168
  case 'linux':
199
169
  case 'darwin':
200
170
  return 'step_log "' + message + '"';
201
171
  default:
202
- return await log(
203
- 'Platform ' + os_version + ' is not supported',
204
- os_version,
205
- 'error'
206
- );
172
+ return await log('Platform ' + os + ' is not supported', os, 'error');
207
173
  }
208
174
  }
209
175
 
@@ -212,61 +178,25 @@ export async function stepLog(
212
178
  * @param mark
213
179
  * @param subject
214
180
  * @param message
215
- * @param os_version
181
+ * @param os
216
182
  */
217
183
  export async function addLog(
218
184
  mark: string,
219
185
  subject: string,
220
186
  message: string,
221
- os_version: string
187
+ os: string
222
188
  ): Promise<string> {
223
- switch (os_version) {
189
+ switch (os) {
224
190
  case 'win32':
225
191
  return 'Add-Log "' + mark + '" "' + subject + '" "' + message + '"';
226
192
  case 'linux':
227
193
  case 'darwin':
228
194
  return 'add_log "' + mark + '" "' + subject + '" "' + message + '"';
229
195
  default:
230
- return await log(
231
- 'Platform ' + os_version + ' is not supported',
232
- os_version,
233
- 'error'
234
- );
196
+ return await log('Platform ' + os + ' is not supported', os, 'error');
235
197
  }
236
198
  }
237
199
 
238
- /**
239
- * Read the scripts
240
- *
241
- * @param filename
242
- * @param directory
243
- */
244
- export async function readFile(
245
- filename: string,
246
- directory: string
247
- ): Promise<string> {
248
- return fs.readFileSync(
249
- path.join(__dirname, '../' + directory, filename),
250
- 'utf8'
251
- );
252
- }
253
-
254
- /**
255
- * Write final script which runs
256
- *
257
- * @param filename
258
- * @param script
259
- */
260
- export async function writeScript(
261
- filename: string,
262
- script: string
263
- ): Promise<string> {
264
- const runner_dir: string = await getInput('RUNNER_TOOL_CACHE', false);
265
- const script_path: string = path.join(runner_dir, filename);
266
- fs.writeFileSync(script_path, script, {mode: 0o755});
267
- return script_path;
268
- }
269
-
270
200
  /**
271
201
  * Function to break extension csv into an array
272
202
  *
@@ -292,7 +222,7 @@ export async function extensionArray(
292
222
  return extension
293
223
  .trim()
294
224
  .toLowerCase()
295
- .replace(/^(:)?(php[-_]|none|zend )/, '$1');
225
+ .replace(/^(:)?(php[-_]|none|zend )|(-[^-]*)-/, '$1$3');
296
226
  })
297
227
  ].filter(Boolean);
298
228
  }
@@ -339,21 +269,17 @@ export async function getExtensionPrefix(extension: string): Promise<string> {
339
269
  /**
340
270
  * Function to get the suffix to suppress console output
341
271
  *
342
- * @param os_version
272
+ * @param os
343
273
  */
344
- export async function suppressOutput(os_version: string): Promise<string> {
345
- switch (os_version) {
274
+ export async function suppressOutput(os: string): Promise<string> {
275
+ switch (os) {
346
276
  case 'win32':
347
277
  return ' >$null 2>&1';
348
278
  case 'linux':
349
279
  case 'darwin':
350
280
  return ' >/dev/null 2>&1';
351
281
  default:
352
- return await log(
353
- 'Platform ' + os_version + ' is not supported',
354
- os_version,
355
- 'error'
356
- );
282
+ return await log('Platform ' + os + ' is not supported', os, 'error');
357
283
  }
358
284
  }
359
285
 
@@ -362,12 +288,12 @@ export async function suppressOutput(os_version: string): Promise<string> {
362
288
  *
363
289
  * @param extension
364
290
  * @param version
365
- * @param os_version
291
+ * @param os
366
292
  */
367
293
  export async function getUnsupportedLog(
368
294
  extension: string,
369
295
  version: string,
370
- os_version: string
296
+ os: string
371
297
  ): Promise<string> {
372
298
  return (
373
299
  '\n' +
@@ -375,7 +301,7 @@ export async function getUnsupportedLog(
375
301
  '$cross',
376
302
  extension,
377
303
  [extension, 'is not supported on PHP', version].join(' '),
378
- os_version
304
+ os
379
305
  )) +
380
306
  '\n'
381
307
  );
@@ -384,25 +310,18 @@ export async function getUnsupportedLog(
384
310
  /**
385
311
  * Function to get command to setup tools
386
312
  *
387
- * @param os_version
313
+ * @param os
388
314
  * @param suffix
389
315
  */
390
- export async function getCommand(
391
- os_version: string,
392
- suffix: string
393
- ): Promise<string> {
394
- switch (os_version) {
316
+ export async function getCommand(os: string, suffix: string): Promise<string> {
317
+ switch (os) {
395
318
  case 'linux':
396
319
  case 'darwin':
397
320
  return 'add_' + suffix + ' ';
398
321
  case 'win32':
399
322
  return 'Add-' + suffix.charAt(0).toUpperCase() + suffix.slice(1) + ' ';
400
323
  default:
401
- return await log(
402
- 'Platform ' + os_version + ' is not supported',
403
- os_version,
404
- 'error'
405
- );
324
+ return await log('Platform ' + os + ' is not supported', os, 'error');
406
325
  }
407
326
  }
408
327
 
@@ -418,42 +337,34 @@ export async function joins(...str: string[]): Promise<string> {
418
337
  /**
419
338
  * Function to get script extensions
420
339
  *
421
- * @param os_version
340
+ * @param os
422
341
  */
423
- export async function scriptExtension(os_version: string): Promise<string> {
424
- switch (os_version) {
342
+ export async function scriptExtension(os: string): Promise<string> {
343
+ switch (os) {
425
344
  case 'win32':
426
345
  return '.ps1';
427
346
  case 'linux':
428
347
  case 'darwin':
429
348
  return '.sh';
430
349
  default:
431
- return await log(
432
- 'Platform ' + os_version + ' is not supported',
433
- os_version,
434
- 'error'
435
- );
350
+ return await log('Platform ' + os + ' is not supported', os, 'error');
436
351
  }
437
352
  }
438
353
 
439
354
  /**
440
355
  * Function to get script tool
441
356
  *
442
- * @param os_version
357
+ * @param os
443
358
  */
444
- export async function scriptTool(os_version: string): Promise<string> {
445
- switch (os_version) {
359
+ export async function scriptTool(os: string): Promise<string> {
360
+ switch (os) {
446
361
  case 'win32':
447
- return 'pwsh';
362
+ return 'pwsh ';
448
363
  case 'linux':
449
364
  case 'darwin':
450
- return 'bash';
365
+ return 'bash ';
451
366
  default:
452
- return await log(
453
- 'Platform ' + os_version + ' is not supported',
454
- os_version,
455
- 'error'
456
- );
367
+ return await log('Platform ' + os + ' is not supported', os, 'error');
457
368
  }
458
369
  }
459
370
 
@@ -463,21 +374,21 @@ export async function scriptTool(os_version: string): Promise<string> {
463
374
  * @param pkg
464
375
  * @param type
465
376
  * @param version
466
- * @param os_version
377
+ * @param os
467
378
  */
468
379
  export async function customPackage(
469
380
  pkg: string,
470
381
  type: string,
471
382
  version: string,
472
- os_version: string
383
+ os: string
473
384
  ): Promise<string> {
474
385
  const pkg_name: string = pkg.replace(/\d+|(pdo|pecl)[_-]/, '');
475
- const script_extension: string = await scriptExtension(os_version);
386
+ const script_extension: string = await scriptExtension(os);
476
387
  const script: string = path.join(
477
388
  __dirname,
478
389
  '../src/scripts/' + type + '/' + pkg_name + script_extension
479
390
  );
480
- const command: string = await getCommand(os_version, pkg_name);
391
+ const command: string = await getCommand(os, pkg_name);
481
392
  return '\n. ' + script + '\n' + command + version;
482
393
  }
483
394
 
@@ -492,7 +403,8 @@ export async function parseExtensionSource(
492
403
  prefix: string
493
404
  ): Promise<string> {
494
405
  // Groups: extension, domain url, org, repo, release
495
- const regex = /(\w+)-(.+:\/\/.+(?:[.:].+)+\/)?([\w.-]+)\/([\w.-]+)@(.+)/;
406
+ const regex =
407
+ /(\w+)-(\w+:\/\/.{1,253}(?:[.:][^:/\s]{2,63})+\/)?([\w.-]+)\/([\w.-]+)@(.+)/;
496
408
  const matches = regex.exec(extension) as RegExpExecArray;
497
409
  matches[2] = matches[2] ? matches[2].slice(0, -1) : 'https://github.com';
498
410
  return await joins(