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/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
  /**
@@ -316,29 +328,23 @@ export async function addPhive(data: RS): Promise<string> {
316
328
  '$cross',
317
329
  'phive',
318
330
  'Phive is not supported on PHP ' + data['php_version'],
319
- data['os_version']
331
+ data['os']
320
332
  );
321
333
  case /5\.6|7\.0/.test(data['php_version']):
322
- data['version'] = data['version'].replace('latest', '0.12.1');
334
+ data['version'] = '0.12.1';
323
335
  break;
324
336
  case /7\.1/.test(data['php_version']):
325
- data['version'] = data['version'].replace('latest', '0.13.5');
337
+ data['version'] = '0.13.5';
326
338
  break;
327
339
  case /7\.2/.test(data['php_version']):
328
- data['version'] = data['version'].replace('latest', '0.14.5');
340
+ data['version'] = '0.14.5';
341
+ break;
342
+ case /^latest$/.test(data['version']):
343
+ data['version'] = await getLatestVersion(data);
329
344
  break;
330
345
  }
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);
346
+ data['extension'] = '-' + data['version'] + data['extension'];
347
+ data['url'] = await getUrl(data);
342
348
  return await addArchive(data);
343
349
  }
344
350
 
@@ -352,39 +358,6 @@ export async function addPHPUnitTools(data: RS): Promise<string> {
352
358
  return await addArchive(data);
353
359
  }
354
360
 
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
361
  /**
389
362
  * Function to add WP-CLI
390
363
  *
@@ -406,14 +379,15 @@ export async function addWPCLI(data: RS): Promise<string> {
406
379
  *
407
380
  * @param release
408
381
  * @param php_version
409
- * @param os_version
382
+ * @param os
410
383
  */
411
384
  export async function getData(
412
385
  release: string,
413
386
  php_version: string,
414
- os_version: string
387
+ os: string
415
388
  ): Promise<RS> {
416
- const json_file: string = await utils.readFile('tools.json', 'src/configs');
389
+ const json_file_path = path.join(__dirname, '../src/configs/tools.json');
390
+ const json_file: string = fs.readFileSync(json_file_path, 'utf8');
417
391
  const json_objects: RSRS = JSON.parse(json_file);
418
392
  release = release.replace(/\s+/g, '');
419
393
  const parts: string[] = release.split(':');
@@ -444,11 +418,12 @@ export async function getData(
444
418
  data['github'] = 'https://github.com';
445
419
  data['domain'] ??= data['github'];
446
420
  data['extension'] ??= '.phar';
447
- data['os_version'] = os_version;
421
+ data['os'] = os;
448
422
  data['php_version'] = php_version;
449
423
  data['prefix'] = data['github'] === data['domain'] ? 'releases' : '';
450
424
  data['verb'] = data['github'] === data['domain'] ? 'download' : '';
451
425
  data['fetch_latest'] ??= 'false';
426
+ data['scope'] ??= 'global';
452
427
  data['version_parameter'] = JSON.stringify(data['version_parameter']) || '';
453
428
  data['version_prefix'] ??= '';
454
429
  data['release'] = await getRelease(release, data);
@@ -468,7 +443,6 @@ export const functionRecord: Record<string, (data: RS) => Promise<string>> = {
468
443
  phing: addPhing,
469
444
  phpunit: addPHPUnitTools,
470
445
  phpcpd: addPHPUnitTools,
471
- symfony: addSymfony,
472
446
  wp_cli: addWPCLI
473
447
  };
474
448
 
@@ -477,22 +451,22 @@ export const functionRecord: Record<string, (data: RS) => Promise<string>> = {
477
451
  *
478
452
  * @param tools_csv
479
453
  * @param php_version
480
- * @param os_version
454
+ * @param os
481
455
  */
482
456
  export async function addTools(
483
457
  tools_csv: string,
484
458
  php_version: string,
485
- os_version: string
459
+ os: string
486
460
  ): Promise<string> {
487
461
  let script = '\n';
488
462
  if (tools_csv === 'none') {
489
463
  return '';
490
464
  } else {
491
- script += await utils.stepLog('Setup Tools', os_version);
465
+ script += await utils.stepLog('Setup Tools', os);
492
466
  }
493
467
  const tools_list = await filterList(await utils.CSVArray(tools_csv));
494
468
  await utils.asyncForEach(tools_list, async function (release: string) {
495
- const data: RS = await getData(release, php_version, os_version);
469
+ const data: RS = await getData(release, php_version, os);
496
470
  script += '\n';
497
471
  switch (true) {
498
472
  case data['error'] !== undefined:
@@ -500,7 +474,7 @@ export async function addTools(
500
474
  '$cross',
501
475
  data['tool'],
502
476
  data['error'],
503
- data['os_version']
477
+ data['os']
504
478
  );
505
479
  break;
506
480
  case 'phar' === data['type']:
@@ -515,7 +489,7 @@ export async function addTools(
515
489
  data['tool'].split('-')[0],
516
490
  'tools',
517
491
  data['version'],
518
- data['os_version']
492
+ data['os']
519
493
  );
520
494
  break;
521
495
  case 'custom-function' === data['type']:
@@ -528,7 +502,7 @@ export async function addTools(
528
502
  '$cross',
529
503
  data['tool'],
530
504
  'Tool ' + data['tool'] + ' is not supported',
531
- data['os_version']
505
+ data['os']
532
506
  );
533
507
  break;
534
508
  }
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(