setup-php 2.13.0 → 2.17.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (134) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +990 -922
  3. package/lib/config.d.ts +3 -0
  4. package/lib/config.js +71 -71
  5. package/lib/config.js.map +1 -1
  6. package/lib/coverage.d.ts +5 -0
  7. package/lib/coverage.js +97 -87
  8. package/lib/coverage.js.map +1 -1
  9. package/lib/extensions.d.ts +4 -0
  10. package/lib/extensions.js +214 -200
  11. package/lib/extensions.js.map +1 -1
  12. package/lib/fetch.d.ts +1 -0
  13. package/lib/fetch.js +63 -0
  14. package/lib/fetch.js.map +1 -0
  15. package/lib/install.d.ts +2 -0
  16. package/lib/install.js +75 -81
  17. package/lib/install.js.map +1 -1
  18. package/lib/tools.d.ts +23 -0
  19. package/lib/tools.js +367 -386
  20. package/lib/tools.js.map +1 -1
  21. package/lib/utils.d.ts +21 -0
  22. package/lib/utils.js +261 -291
  23. package/lib/utils.js.map +1 -1
  24. package/package.json +67 -56
  25. package/src/config.ts +82 -82
  26. package/src/configs/brew_extensions +31 -0
  27. package/src/configs/composer.env +2 -0
  28. package/src/configs/ini/jit.ini +3 -0
  29. package/src/configs/ini/php.ini +2 -0
  30. package/src/configs/ini/xdebug.ini +1 -0
  31. package/src/configs/os_releases.csv +19 -17
  32. package/src/configs/php-versions.json +6 -5
  33. package/src/configs/php_packages +12 -0
  34. package/src/configs/{php.json → pm/php.json} +29 -29
  35. package/src/configs/{phpunit.json → pm/phpunit.json} +24 -24
  36. package/src/configs/tools.json +278 -235
  37. package/src/configs/tools_schema.json +125 -114
  38. package/src/coverage.ts +144 -142
  39. package/src/extensions.ts +367 -349
  40. package/src/fetch.ts +54 -0
  41. package/src/install.ts +66 -82
  42. package/src/scripts/darwin.sh +285 -249
  43. package/src/scripts/extensions/add_extensions.ps1 +194 -0
  44. package/src/scripts/extensions/add_extensions.sh +184 -0
  45. package/src/scripts/{ext → extensions}/blackfire.ps1 +32 -32
  46. package/src/scripts/{ext → extensions}/blackfire.sh +22 -21
  47. package/src/scripts/{ext → extensions}/couchbase.sh +43 -43
  48. package/src/scripts/{ext → extensions}/cubrid.sh +60 -60
  49. package/src/scripts/extensions/extension_map.php +132 -0
  50. package/src/scripts/{ext → extensions}/firebird.ps1 +19 -19
  51. package/src/scripts/{ext → extensions}/firebird.sh +39 -35
  52. package/src/scripts/{ext → extensions}/gearman.sh +22 -22
  53. package/src/scripts/{ext → extensions}/geos.sh +17 -17
  54. package/src/scripts/{ext → extensions}/http.ps1 +54 -54
  55. package/src/scripts/{ext → extensions}/http.sh +109 -120
  56. package/src/scripts/{ext → extensions}/intl.sh +23 -23
  57. package/src/scripts/{ext → extensions}/ioncube.ps1 +33 -32
  58. package/src/scripts/{ext → extensions}/ioncube.sh +21 -19
  59. package/src/scripts/{ext → extensions}/oci.ps1 +85 -60
  60. package/src/scripts/{ext → extensions}/oci.sh +65 -63
  61. package/src/scripts/{ext → extensions}/patches/firebird.sh +11 -11
  62. package/src/scripts/{ext → extensions}/patches/geos.sh +7 -7
  63. package/src/scripts/{ext → extensions}/patches/http.sh +11 -11
  64. package/src/scripts/{ext → extensions}/patches/pdo_oci.sh +6 -6
  65. package/src/scripts/{ext → extensions}/patches/phpize.sh +26 -26
  66. package/src/scripts/{ext → extensions}/patches/protobuf.sh +4 -4
  67. package/src/scripts/{ext → extensions}/phalcon.ps1 +54 -54
  68. package/src/scripts/{ext → extensions}/phalcon.sh +58 -58
  69. package/src/scripts/{ext → extensions}/source.sh +145 -144
  70. package/src/scripts/extensions/sqlsrv.sh +15 -0
  71. package/src/scripts/linux.sh +269 -256
  72. package/src/scripts/tools/add_tools.ps1 +239 -26
  73. package/src/scripts/tools/add_tools.sh +175 -20
  74. package/src/scripts/tools/blackfire.ps1 +19 -19
  75. package/src/scripts/tools/blackfire.sh +40 -39
  76. package/src/scripts/tools/grpc_php_plugin.ps1 +21 -21
  77. package/src/scripts/tools/grpc_php_plugin.sh +58 -58
  78. package/src/scripts/tools/ppa.sh +192 -151
  79. package/src/scripts/tools/protoc.ps1 +38 -38
  80. package/src/scripts/tools/protoc.sh +28 -28
  81. package/src/scripts/tools/symfony.ps1 +14 -0
  82. package/src/scripts/tools/symfony.sh +13 -0
  83. package/src/scripts/unix.sh +186 -0
  84. package/src/scripts/win32.ps1 +352 -494
  85. package/src/tools.ts +512 -538
  86. package/src/utils.ts +415 -500
  87. package/.eslintrc.json +0 -16
  88. package/.github/CODE_OF_CONDUCT.md +0 -76
  89. package/.github/CONTRIBUTING.md +0 -70
  90. package/.github/FUNDING.yml +0 -7
  91. package/.github/ISSUE_TEMPLATE/bug_report.md +0 -42
  92. package/.github/ISSUE_TEMPLATE/feature_request.md +0 -26
  93. package/.github/PULL_REQUEST_TEMPLATE.md +0 -37
  94. package/.github/SECURITY.md +0 -29
  95. package/.github/workflows/docs.yml +0 -77
  96. package/.github/workflows/node-workflow.yml +0 -51
  97. package/.github/workflows/workflow.yml +0 -78
  98. package/.idea/workspace.xml +0 -113
  99. package/.prettierrc.json +0 -12
  100. package/__tests__/config.test.ts +0 -52
  101. package/__tests__/coverage.test.ts +0 -110
  102. package/__tests__/extensions.test.ts +0 -263
  103. package/__tests__/install.test.ts +0 -175
  104. package/__tests__/tools.test.ts +0 -524
  105. package/__tests__/utils.test.ts +0 -307
  106. package/action.yml +0 -29
  107. package/dist/index.js +0 -3051
  108. package/examples/bedrock.yml +0 -32
  109. package/examples/blackfire-player.yml +0 -31
  110. package/examples/blackfire.yml +0 -31
  111. package/examples/cakephp-mysql.yml +0 -114
  112. package/examples/cakephp-postgres.yml +0 -112
  113. package/examples/cakephp.yml +0 -92
  114. package/examples/codeigniter.yml +0 -34
  115. package/examples/laravel-mysql.yml +0 -74
  116. package/examples/laravel-postgres.yml +0 -74
  117. package/examples/laravel.yml +0 -42
  118. package/examples/lumen-mysql.yml +0 -74
  119. package/examples/lumen-postgres.yml +0 -74
  120. package/examples/lumen.yml +0 -38
  121. package/examples/phalcon-mysql.yml +0 -74
  122. package/examples/phalcon-postgres.yml +0 -73
  123. package/examples/sage.yml +0 -57
  124. package/examples/slim-framework.yml +0 -34
  125. package/examples/symfony-mysql.yml +0 -57
  126. package/examples/symfony-postgres.yml +0 -55
  127. package/examples/symfony.yml +0 -39
  128. package/examples/yii2-mysql.yml +0 -73
  129. package/examples/yii2-postgres.yml +0 -71
  130. package/examples/zend-framework.yml +0 -36
  131. package/jest.config.js +0 -12
  132. package/lib/sapi.js +0 -64
  133. package/src/scripts/common.sh +0 -314
  134. package/tsconfig.json +0 -18
package/lib/tools.js CHANGED
@@ -1,387 +1,368 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
- }) : (function(o, m, k, k2) {
6
- if (k2 === undefined) k2 = k;
7
- o[k2] = m[k];
8
- }));
9
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
- Object.defineProperty(o, "default", { enumerable: true, value: v });
11
- }) : function(o, v) {
12
- o["default"] = v;
13
- });
14
- var __importStar = (this && this.__importStar) || function (mod) {
15
- if (mod && mod.__esModule) return mod;
16
- var result = {};
17
- if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
- __setModuleDefault(result, mod);
19
- return result;
20
- };
21
- Object.defineProperty(exports, "__esModule", { value: true });
22
- exports.addTools = exports.functionRecord = exports.getData = exports.addWPCLI = exports.addSymfony = exports.addPHPUnitTools = exports.addPhive = exports.addPhing = exports.addPECL = exports.addDevTools = exports.addDeployer = exports.addComposer = exports.addBlackfirePlayer = exports.addPackage = exports.addArchive = exports.getPharUrl = exports.getUrl = exports.filterList = exports.getRelease = exports.getVersion = exports.getLatestVersion = exports.getSemverVersion = void 0;
23
- const utils = __importStar(require("./utils"));
24
- async function getSemverVersion(data) {
25
- var _a;
26
- const search = data['version_prefix'] + data['version'];
27
- const url = `https://api.github.com/repos/${data['repository']}/git/matching-refs/tags%2F${search}.`;
28
- const token = await utils.readEnv('COMPOSER_TOKEN');
29
- const response = await utils.fetch(url, token);
30
- if (response.error || response.data === '[]') {
31
- data['error'] = (_a = response.error) !== null && _a !== void 0 ? _a : `No version found with prefix ${search}.`;
32
- return data['version'];
33
- }
34
- else {
35
- const refs = JSON.parse(response['data']).reverse();
36
- const ref = refs.find((i) => /.*\d+.\d+.\d+$/.test(i['ref']));
37
- const tag = (ref || refs[0])['ref'].split('/').pop();
38
- return tag.replace(/^v(\d)/, '$1');
39
- }
40
- }
41
- exports.getSemverVersion = getSemverVersion;
42
- async function getLatestVersion(data) {
43
- if (!data['version'] && data['fetch_latest'] === 'false') {
44
- return 'latest';
45
- }
46
- const resp = await utils.fetch(`${data['github']}/${data['repository']}/releases.atom`);
47
- const releases = [
48
- ...resp['data'].matchAll(/releases\/tag\/([a-zA-Z]*)?(\d+.\d+.\d+)"/g)
49
- ].map(match => match[2]);
50
- return (releases
51
- .sort((a, b) => a.localeCompare(b, undefined, { numeric: true }))
52
- .pop() || 'latest');
53
- }
54
- exports.getLatestVersion = getLatestVersion;
55
- async function getVersion(version, data) {
56
- const semver_regex = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/;
57
- const composer_regex = /^composer:(stable|preview|snapshot|[1|2])$/;
58
- const constraint_regex = /[><=^~]+.*/;
59
- const major_minor_regex = /^\d+(\.\d+)?$/;
60
- data['version'] = version.replace(/v?(\d)/, '$1').replace(/\.x/, '');
61
- switch (true) {
62
- case composer_regex.test(data['release']):
63
- case semver_regex.test(data['version']):
64
- case constraint_regex.test(data['version']) && data['type'] === 'composer':
65
- return data['version'];
66
- case major_minor_regex.test(data['version']) && data['type'] === 'composer':
67
- data['release'] = `${data['tool']}:${data['version']}.*`;
68
- return `${data['version']}.*`;
69
- case data['repository'] && major_minor_regex.test(data['version']):
70
- return await getSemverVersion(data);
71
- default:
72
- return data['version'].replace(/[><=^~]*/, '');
73
- }
74
- }
75
- exports.getVersion = getVersion;
76
- async function getRelease(release, data) {
77
- release = release.includes('/') ? release.split('/')[1] : release;
78
- return release.includes(':')
79
- ? [data['tool'], release.split(':')[1]].join(':')
80
- : data['tool'];
81
- }
82
- exports.getRelease = getRelease;
83
- async function filterList(tools_list) {
84
- const regex_any = /^composer($|:.*)/;
85
- const regex_valid = /^composer:?($|preview$|snapshot$|v?\d+(\.\d+)?$|v?\d+\.\d+\.\d+[\w-]*$)/;
86
- const matches = tools_list.filter(tool => regex_valid.test(tool));
87
- let composer = 'composer';
88
- tools_list = tools_list.filter(tool => !regex_any.test(tool));
89
- switch (true) {
90
- case matches[0] == undefined:
91
- break;
92
- default:
93
- composer = matches[matches.length - 1].replace(/v(\d\S*)/, '$1');
94
- break;
95
- }
96
- tools_list.unshift(composer);
97
- return tools_list;
98
- }
99
- exports.filterList = filterList;
100
- async function getUrl(data) {
101
- if (data['version'] === 'latest') {
102
- return [
103
- data['domain'],
104
- data['repository'],
105
- data['prefix'],
106
- data['version'],
107
- data['verb'],
108
- data['tool'] + data['extension']
109
- ]
110
- .filter(Boolean)
111
- .join('/');
112
- }
113
- else {
114
- return [
115
- data['domain'],
116
- data['repository'],
117
- data['prefix'],
118
- data['verb'],
119
- data['version_prefix'] + data['version'],
120
- data['tool'] + data['extension']
121
- ]
122
- .filter(Boolean)
123
- .join('/');
124
- }
125
- }
126
- exports.getUrl = getUrl;
127
- async function getPharUrl(data) {
128
- if (data['version'] === 'latest') {
129
- return data['domain'] + '/' + data['tool'] + '.phar';
130
- }
131
- else {
132
- return (data['domain'] +
133
- '/' +
134
- data['tool'] +
135
- '-' +
136
- data['version_prefix'] +
137
- data['version'] +
138
- '.phar');
139
- }
140
- }
141
- exports.getPharUrl = getPharUrl;
142
- async function addArchive(data) {
143
- return ((await utils.getCommand(data['os_version'], 'tool')) +
144
- (await utils.joins(data['url'], data['tool'], data['version_parameter'])));
145
- }
146
- exports.addArchive = addArchive;
147
- async function addPackage(data) {
148
- const command = await utils.getCommand(data['os_version'], 'composertool');
149
- const parts = data['repository'].split('/');
150
- return command + parts[1] + ' ' + data['release'] + ' ' + parts[0] + '/';
151
- }
152
- exports.addPackage = addPackage;
153
- async function addBlackfirePlayer(data) {
154
- if (/5\.[5-6]|7\.0/.test(data['php_version']) &&
155
- data['version'] == 'latest') {
156
- data['version'] = '1.9.3';
157
- }
158
- data['url'] = await getPharUrl(data);
159
- return addArchive(data);
160
- }
161
- exports.addBlackfirePlayer = addBlackfirePlayer;
162
- async function addComposer(data) {
163
- const github = data['github'];
164
- const getcomposer = data['domain'];
165
- let cache_url = `${github}/shivammathur/composer-cache/releases/latest/download/composer-${data['version'].replace('latest', 'stable')}.phar`;
166
- let source_url = `${getcomposer}/composer.phar`;
167
- switch (true) {
168
- case /^snapshot$/.test(data['version']):
169
- break;
170
- case /^preview$|^[1-2]$/.test(data['version']):
171
- source_url = `${getcomposer}/composer-${data['version']}.phar`;
172
- break;
173
- case /^\d+\.\d+\.\d+[\w-]*$/.test(data['version']):
174
- cache_url = `${github}/${data['repository']}/releases/download/${data['version']}/composer.phar`;
175
- source_url = `${getcomposer}/composer-${data['version']}.phar`;
176
- break;
177
- default:
178
- source_url = `${getcomposer}/composer-stable.phar`;
179
- }
180
- const use_cache = (await utils.readEnv('NO_TOOLS_CACHE')) !== 'true';
181
- data['url'] = use_cache ? `${cache_url},${source_url}` : source_url;
182
- data['version_parameter'] = data['version'];
183
- return await addArchive(data);
184
- }
185
- exports.addComposer = addComposer;
186
- async function addDeployer(data) {
187
- if (data['version'] === 'latest') {
188
- data['url'] = data['domain'] + '/deployer.phar';
189
- }
190
- else {
191
- data['url'] =
192
- data['domain'] + '/releases/v' + data['version'] + '/deployer.phar';
193
- }
194
- return await addArchive(data);
195
- }
196
- exports.addDeployer = addDeployer;
197
- async function addDevTools(data) {
198
- switch (data['os_version']) {
199
- case 'linux':
200
- case 'darwin':
201
- return 'add_devtools ' + data['tool'];
202
- case 'win32':
203
- return await utils.addLog('$tick', data['tool'], data['tool'] + ' is not a windows tool', 'win32');
204
- default:
205
- return await utils.log('Platform ' + data['os_version'] + ' is not supported', data['os_version'], 'error');
206
- }
207
- }
208
- exports.addDevTools = addDevTools;
209
- async function addPECL(data) {
210
- return await utils.getCommand(data['os_version'], 'pecl');
211
- }
212
- exports.addPECL = addPECL;
213
- async function addPhing(data) {
214
- data['url'] =
215
- data['domain'] + '/get/phing-' + data['version'] + data['extension'];
216
- return await addArchive(data);
217
- }
218
- exports.addPhing = addPhing;
219
- async function addPhive(data) {
220
- switch (true) {
221
- case /5\.[3-5]/.test(data['php_version']):
222
- return await utils.addLog('$cross', 'phive', 'Phive is not supported on PHP ' + data['php_version'], data['os_version']);
223
- case /5\.6|7\.0/.test(data['php_version']):
224
- data['version'] = data['version'].replace('latest', '0.12.1');
225
- break;
226
- case /7\.1/.test(data['php_version']):
227
- data['version'] = data['version'].replace('latest', '0.13.5');
228
- break;
229
- case /7\.2/.test(data['php_version']):
230
- data['version'] = data['version'].replace('latest', '0.14.5');
231
- break;
232
- }
233
- if (data['version'] === 'latest') {
234
- data['domain'] = data['domain'] + '/releases';
235
- }
236
- else {
237
- data['domain'] = [
238
- data['github'],
239
- data['repository'],
240
- 'releases/download',
241
- data['version']
242
- ].join('/');
243
- }
244
- data['url'] = await getPharUrl(data);
245
- return await addArchive(data);
246
- }
247
- exports.addPhive = addPhive;
248
- async function addPHPUnitTools(data) {
249
- data['url'] = await getPharUrl(data);
250
- return await addArchive(data);
251
- }
252
- exports.addPHPUnitTools = addPHPUnitTools;
253
- async function addSymfony(data) {
254
- let filename;
255
- switch (data['os_version']) {
256
- case 'linux':
257
- case 'darwin':
258
- filename = 'symfony_' + data['os_version'] + '_amd64';
259
- break;
260
- case 'win32':
261
- filename = 'symfony_windows_amd64.exe';
262
- break;
263
- default:
264
- return await utils.log('Platform ' + data['os_version'] + ' is not supported', data['os_version'], 'error');
265
- }
266
- if (data['version'] === 'latest') {
267
- data['uri'] = ['releases/latest/download', filename].join('/');
268
- }
269
- else {
270
- data['uri'] = ['releases/download', 'v' + data['version'], filename].join('/');
271
- }
272
- data['url'] = [data['domain'], data['repository'], data['uri']].join('/');
273
- return await addArchive(data);
274
- }
275
- exports.addSymfony = addSymfony;
276
- async function addWPCLI(data) {
277
- if (data['version'] === 'latest') {
278
- data['uri'] = 'wp-cli/builds/blob/gh-pages/phar/wp-cli.phar?raw=true';
279
- data['url'] = [data['domain'], data['uri']].join('/');
280
- }
281
- else {
282
- data['extension'] = '-' + data['version'] + data['extension'];
283
- data['url'] = await getUrl(data);
284
- }
285
- return await addArchive(data);
286
- }
287
- exports.addWPCLI = addWPCLI;
288
- async function getData(release, php_version, os_version) {
289
- var _a, _b, _c, _d;
290
- const json_file = await utils.readFile('tools.json', 'src/configs');
291
- const json_objects = JSON.parse(json_file);
292
- release = release.replace(/\s+/g, '');
293
- const parts = release.split(':');
294
- const tool = parts[0];
295
- const version = parts[1];
296
- let data;
297
- if (Object.keys(json_objects).includes(tool)) {
298
- data = json_objects[tool];
299
- data['tool'] = tool;
300
- }
301
- else {
302
- const key = Object.keys(json_objects).find((key) => {
303
- return json_objects[key]['alias'] == tool;
304
- });
305
- if (key) {
306
- data = json_objects[key];
307
- data['tool'] = key;
308
- }
309
- else {
310
- data = {
311
- tool: tool.split('/')[1],
312
- repository: tool,
313
- type: 'composer'
314
- };
315
- data = !tool.includes('/') ? { tool: tool } : data;
316
- }
317
- }
318
- data['github'] = 'https://github.com';
319
- (_a = data['domain']) !== null && _a !== void 0 ? _a : (data['domain'] = data['github']);
320
- (_b = data['extension']) !== null && _b !== void 0 ? _b : (data['extension'] = '.phar');
321
- data['os_version'] = os_version;
322
- data['php_version'] = php_version;
323
- data['prefix'] = data['github'] === data['domain'] ? 'releases' : '';
324
- data['verb'] = data['github'] === data['domain'] ? 'download' : '';
325
- (_c = data['fetch_latest']) !== null && _c !== void 0 ? _c : (data['fetch_latest'] = 'false');
326
- data['version_parameter'] = JSON.stringify(data['version_parameter']) || '';
327
- (_d = data['version_prefix']) !== null && _d !== void 0 ? _d : (data['version_prefix'] = '');
328
- data['release'] = await getRelease(release, data);
329
- data['version'] = version
330
- ? await getVersion(version, data)
331
- : await getLatestVersion(data);
332
- return data;
333
- }
334
- exports.getData = getData;
335
- exports.functionRecord = {
336
- composer: addComposer,
337
- deployer: addDeployer,
338
- dev_tools: addDevTools,
339
- phive: addPhive,
340
- blackfire_player: addBlackfirePlayer,
341
- pecl: addPECL,
342
- phing: addPhing,
343
- phpunit: addPHPUnitTools,
344
- phpcpd: addPHPUnitTools,
345
- symfony: addSymfony,
346
- wp_cli: addWPCLI
347
- };
348
- async function addTools(tools_csv, php_version, os_version) {
349
- let script = '\n';
350
- if (tools_csv === 'none') {
351
- return '';
352
- }
353
- else {
354
- script += await utils.stepLog('Setup Tools', os_version);
355
- }
356
- const tools_list = await filterList(await utils.CSVArray(tools_csv));
357
- await utils.asyncForEach(tools_list, async function (release) {
358
- const data = await getData(release, php_version, os_version);
359
- script += '\n';
360
- switch (true) {
361
- case data['error'] !== undefined:
362
- script += await utils.addLog('$cross', data['tool'], data['error'], data['os_version']);
363
- break;
364
- case 'phar' === data['type']:
365
- data['url'] = await getUrl(data);
366
- script += await addArchive(data);
367
- break;
368
- case 'composer' === data['type']:
369
- script += await addPackage(data);
370
- break;
371
- case 'custom-package' === data['type']:
372
- script += await utils.customPackage(data['tool'].split('-')[0], 'tools', data['version'], data['os_version']);
373
- break;
374
- case 'custom-function' === data['type']:
375
- script += await exports.functionRecord[data['function']](data);
376
- break;
377
- case /^none$/.test(data['tool']):
378
- break;
379
- default:
380
- script += await utils.addLog('$cross', data['tool'], 'Tool ' + data['tool'] + ' is not supported', data['os_version']);
381
- break;
382
- }
383
- });
384
- return script;
385
- }
386
- exports.addTools = addTools;
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
5
+ }) : (function(o, m, k, k2) {
6
+ if (k2 === undefined) k2 = k;
7
+ o[k2] = m[k];
8
+ }));
9
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
10
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
11
+ }) : function(o, v) {
12
+ o["default"] = v;
13
+ });
14
+ var __importStar = (this && this.__importStar) || function (mod) {
15
+ if (mod && mod.__esModule) return mod;
16
+ var result = {};
17
+ if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
18
+ __setModuleDefault(result, mod);
19
+ return result;
20
+ };
21
+ var __importDefault = (this && this.__importDefault) || function (mod) {
22
+ return (mod && mod.__esModule) ? mod : { "default": mod };
23
+ };
24
+ Object.defineProperty(exports, "__esModule", { value: true });
25
+ exports.addTools = exports.functionRecord = exports.getData = exports.addWPCLI = exports.addPHPUnitTools = exports.addPhive = exports.addPhing = exports.addPECL = exports.addDevTools = exports.addDeployer = exports.addComposer = exports.addBlackfirePlayer = exports.addPackage = exports.addArchive = exports.getPharUrl = exports.getUrl = exports.filterList = exports.getRelease = exports.getVersion = exports.getLatestVersion = exports.getSemverVersion = void 0;
26
+ const path_1 = __importDefault(require("path"));
27
+ const fs_1 = __importDefault(require("fs"));
28
+ const fetch = __importStar(require("./fetch"));
29
+ const utils = __importStar(require("./utils"));
30
+ async function getSemverVersion(data) {
31
+ var _a;
32
+ const search = data['version_prefix'] + data['version'];
33
+ const url = `https://api.github.com/repos/${data['repository']}/git/matching-refs/tags%2F${search}.`;
34
+ const token = await utils.readEnv('COMPOSER_TOKEN');
35
+ const response = await fetch.fetch(url, token);
36
+ if (response.error || response.data === '[]') {
37
+ data['error'] = (_a = response.error) !== null && _a !== void 0 ? _a : `No version found with prefix ${search}.`;
38
+ return data['version'];
39
+ }
40
+ else {
41
+ const refs = JSON.parse(response['data']).reverse();
42
+ const ref = refs.find((i) => /.*\d+.\d+.\d+$/.test(i['ref']));
43
+ const tag = (ref || refs[0])['ref'].split('/').pop();
44
+ return tag.replace(/^v(\d)/, '$1');
45
+ }
46
+ }
47
+ exports.getSemverVersion = getSemverVersion;
48
+ async function getLatestVersion(data) {
49
+ if (!data['version'] && data['fetch_latest'] === 'false') {
50
+ return 'latest';
51
+ }
52
+ const resp = await fetch.fetch(`${data['github']}/${data['repository']}/releases.atom`);
53
+ if (resp['data']) {
54
+ const releases = [
55
+ ...resp['data'].matchAll(/releases\/tag\/([a-zA-Z]*)?(\d+.\d+.\d+)"/g)
56
+ ].map(match => match[2]);
57
+ return (releases
58
+ .sort((a, b) => a.localeCompare(b, undefined, { numeric: true }))
59
+ .pop() || 'latest');
60
+ }
61
+ return 'latest';
62
+ }
63
+ exports.getLatestVersion = getLatestVersion;
64
+ async function getVersion(version, data) {
65
+ const semver_regex = /^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$/;
66
+ const composer_regex = /^composer:(stable|preview|snapshot|[1|2])$/;
67
+ const constraint_regex = /[><=^~]+.*/;
68
+ const major_minor_regex = /^\d+(\.\d+)?$/;
69
+ data['version'] = version.replace(/v?(\d)/, '$1').replace(/\.x/, '');
70
+ switch (true) {
71
+ case composer_regex.test(data['release']):
72
+ case semver_regex.test(data['version']):
73
+ case constraint_regex.test(data['version']) && data['type'] === 'composer':
74
+ return data['version'];
75
+ case major_minor_regex.test(data['version']) && data['type'] === 'composer':
76
+ data['release'] = `${data['tool']}:${data['version']}.*`;
77
+ return `${data['version']}.*`;
78
+ case data['repository'] && major_minor_regex.test(data['version']):
79
+ return await getSemverVersion(data);
80
+ default:
81
+ return data['version'].replace(/[><=^~]*/, '');
82
+ }
83
+ }
84
+ exports.getVersion = getVersion;
85
+ async function getRelease(release, data) {
86
+ release = release.includes('/') ? release.split('/')[1] : release;
87
+ return release.includes(':')
88
+ ? [data['tool'], release.split(':')[1]].join(':')
89
+ : data['tool'];
90
+ }
91
+ exports.getRelease = getRelease;
92
+ async function filterList(tools_list) {
93
+ const regex_any = /^composer($|:.*)/;
94
+ const regex_valid = /^composer:?($|preview$|snapshot$|v?\d+(\.\d+)?$|v?\d+\.\d+\.\d+[\w-]*$)/;
95
+ const matches = tools_list.filter(tool => regex_valid.test(tool));
96
+ let composer = 'composer';
97
+ tools_list = tools_list.filter(tool => !regex_any.test(tool));
98
+ switch (true) {
99
+ case matches[0] == undefined:
100
+ break;
101
+ default:
102
+ composer = matches[matches.length - 1].replace(/v(\d\S*)/, '$1');
103
+ break;
104
+ }
105
+ tools_list.unshift(composer);
106
+ return tools_list;
107
+ }
108
+ exports.filterList = filterList;
109
+ async function getUrl(data) {
110
+ if (data['version'] === 'latest') {
111
+ return [
112
+ data['domain'],
113
+ data['repository'],
114
+ data['prefix'],
115
+ data['version'],
116
+ data['verb'],
117
+ data['tool'] + data['extension']
118
+ ]
119
+ .filter(Boolean)
120
+ .join('/');
121
+ }
122
+ else {
123
+ return [
124
+ data['domain'],
125
+ data['repository'],
126
+ data['prefix'],
127
+ data['verb'],
128
+ data['version_prefix'] + data['version'],
129
+ data['tool'] + data['extension']
130
+ ]
131
+ .filter(Boolean)
132
+ .join('/');
133
+ }
134
+ }
135
+ exports.getUrl = getUrl;
136
+ async function getPharUrl(data) {
137
+ if (data['version'] === 'latest') {
138
+ return data['domain'] + '/' + data['tool'] + '.phar';
139
+ }
140
+ else {
141
+ return (data['domain'] +
142
+ '/' +
143
+ data['tool'] +
144
+ '-' +
145
+ data['version_prefix'] +
146
+ data['version'] +
147
+ '.phar');
148
+ }
149
+ }
150
+ exports.getPharUrl = getPharUrl;
151
+ async function addArchive(data) {
152
+ return ((await utils.getCommand(data['os'], 'tool')) +
153
+ (await utils.joins(data['url'], data['tool'], data['version_parameter'])));
154
+ }
155
+ exports.addArchive = addArchive;
156
+ async function addPackage(data) {
157
+ const command = await utils.getCommand(data['os'], 'composertool');
158
+ const parts = data['repository'].split('/');
159
+ const args = await utils.joins(parts[1], data['release'], parts[0] + '/', data['scope']);
160
+ return command + args;
161
+ }
162
+ exports.addPackage = addPackage;
163
+ async function addBlackfirePlayer(data) {
164
+ if (/5\.[5-6]|7\.0/.test(data['php_version']) &&
165
+ data['version'] == 'latest') {
166
+ data['version'] = '1.9.3';
167
+ }
168
+ data['url'] = await getPharUrl(data);
169
+ return addArchive(data);
170
+ }
171
+ exports.addBlackfirePlayer = addBlackfirePlayer;
172
+ async function addComposer(data) {
173
+ const github = data['github'];
174
+ const getcomposer = data['domain'];
175
+ let cache_url = `${github}/shivammathur/composer-cache/releases/latest/download/composer-${data['php_version']}-${data['version'].replace('latest', 'stable')}.phar`;
176
+ let source_url = `${getcomposer}/composer.phar`;
177
+ switch (true) {
178
+ case /^snapshot$/.test(data['version']):
179
+ break;
180
+ case /^preview$|^[1-2]$/.test(data['version']):
181
+ source_url = `${getcomposer}/composer-${data['version']}.phar`;
182
+ break;
183
+ case /^\d+\.\d+\.\d+[\w-]*$/.test(data['version']):
184
+ cache_url = `${github}/${data['repository']}/releases/download/${data['version']}/composer.phar`;
185
+ source_url = `${getcomposer}/composer-${data['version']}.phar`;
186
+ break;
187
+ default:
188
+ source_url = `${getcomposer}/composer-stable.phar`;
189
+ }
190
+ const use_cache = (await utils.readEnv('NO_TOOLS_CACHE')) !== 'true';
191
+ data['url'] = use_cache ? `${cache_url},${source_url}` : source_url;
192
+ data['version_parameter'] = data['version'];
193
+ return await addArchive(data);
194
+ }
195
+ exports.addComposer = addComposer;
196
+ async function addDeployer(data) {
197
+ if (data['version'] === 'latest') {
198
+ data['url'] = data['domain'] + '/deployer.phar';
199
+ }
200
+ else {
201
+ data['url'] =
202
+ data['domain'] + '/releases/v' + data['version'] + '/deployer.phar';
203
+ }
204
+ return await addArchive(data);
205
+ }
206
+ exports.addDeployer = addDeployer;
207
+ async function addDevTools(data) {
208
+ switch (data['os']) {
209
+ case 'linux':
210
+ case 'darwin':
211
+ return 'add_devtools ' + data['tool'];
212
+ case 'win32':
213
+ return await utils.addLog('$tick', data['tool'], data['tool'] + ' is not a windows tool', 'win32');
214
+ default:
215
+ return await utils.log('Platform ' + data['os'] + ' is not supported', data['os'], 'error');
216
+ }
217
+ }
218
+ exports.addDevTools = addDevTools;
219
+ async function addPECL(data) {
220
+ return await utils.getCommand(data['os'], 'pecl');
221
+ }
222
+ exports.addPECL = addPECL;
223
+ async function addPhing(data) {
224
+ data['url'] =
225
+ data['domain'] + '/get/phing-' + data['version'] + data['extension'];
226
+ return await addArchive(data);
227
+ }
228
+ exports.addPhing = addPhing;
229
+ async function addPhive(data) {
230
+ switch (true) {
231
+ case /5\.[3-5]/.test(data['php_version']):
232
+ return await utils.addLog('$cross', 'phive', 'Phive is not supported on PHP ' + data['php_version'], data['os']);
233
+ case /5\.6|7\.0/.test(data['php_version']):
234
+ data['version'] = '0.12.1';
235
+ break;
236
+ case /7\.1/.test(data['php_version']):
237
+ data['version'] = '0.13.5';
238
+ break;
239
+ case /7\.2/.test(data['php_version']):
240
+ data['version'] = '0.14.5';
241
+ break;
242
+ case /^latest$/.test(data['version']):
243
+ data['version'] = await getLatestVersion(data);
244
+ break;
245
+ }
246
+ data['extension'] = '-' + data['version'] + data['extension'];
247
+ data['url'] = await getUrl(data);
248
+ return await addArchive(data);
249
+ }
250
+ exports.addPhive = addPhive;
251
+ async function addPHPUnitTools(data) {
252
+ data['url'] = await getPharUrl(data);
253
+ return await addArchive(data);
254
+ }
255
+ exports.addPHPUnitTools = addPHPUnitTools;
256
+ async function addWPCLI(data) {
257
+ if (data['version'] === 'latest') {
258
+ data['uri'] = 'wp-cli/builds/blob/gh-pages/phar/wp-cli.phar?raw=true';
259
+ data['url'] = [data['domain'], data['uri']].join('/');
260
+ }
261
+ else {
262
+ data['extension'] = '-' + data['version'] + data['extension'];
263
+ data['url'] = await getUrl(data);
264
+ }
265
+ return await addArchive(data);
266
+ }
267
+ exports.addWPCLI = addWPCLI;
268
+ async function getData(release, php_version, os) {
269
+ var _a, _b, _c, _d, _e;
270
+ const json_file_path = path_1.default.join(__dirname, '../src/configs/tools.json');
271
+ const json_file = fs_1.default.readFileSync(json_file_path, 'utf8');
272
+ const json_objects = JSON.parse(json_file);
273
+ release = release.replace(/\s+/g, '');
274
+ const parts = release.split(':');
275
+ const tool = parts[0];
276
+ const version = parts[1];
277
+ let data;
278
+ if (Object.keys(json_objects).includes(tool)) {
279
+ data = json_objects[tool];
280
+ data['tool'] = tool;
281
+ }
282
+ else {
283
+ const key = Object.keys(json_objects).find((key) => {
284
+ return json_objects[key]['alias'] == tool;
285
+ });
286
+ if (key) {
287
+ data = json_objects[key];
288
+ data['tool'] = key;
289
+ }
290
+ else {
291
+ data = {
292
+ tool: tool.split('/')[1],
293
+ repository: tool,
294
+ type: 'composer'
295
+ };
296
+ data = !tool.includes('/') ? { tool: tool } : data;
297
+ }
298
+ }
299
+ data['github'] = 'https://github.com';
300
+ (_a = data['domain']) !== null && _a !== void 0 ? _a : (data['domain'] = data['github']);
301
+ (_b = data['extension']) !== null && _b !== void 0 ? _b : (data['extension'] = '.phar');
302
+ data['os'] = os;
303
+ data['php_version'] = php_version;
304
+ data['prefix'] = data['github'] === data['domain'] ? 'releases' : '';
305
+ data['verb'] = data['github'] === data['domain'] ? 'download' : '';
306
+ (_c = data['fetch_latest']) !== null && _c !== void 0 ? _c : (data['fetch_latest'] = 'false');
307
+ (_d = data['scope']) !== null && _d !== void 0 ? _d : (data['scope'] = 'global');
308
+ data['version_parameter'] = JSON.stringify(data['version_parameter']) || '';
309
+ (_e = data['version_prefix']) !== null && _e !== void 0 ? _e : (data['version_prefix'] = '');
310
+ data['release'] = await getRelease(release, data);
311
+ data['version'] = version
312
+ ? await getVersion(version, data)
313
+ : await getLatestVersion(data);
314
+ return data;
315
+ }
316
+ exports.getData = getData;
317
+ exports.functionRecord = {
318
+ composer: addComposer,
319
+ deployer: addDeployer,
320
+ dev_tools: addDevTools,
321
+ phive: addPhive,
322
+ blackfire_player: addBlackfirePlayer,
323
+ pecl: addPECL,
324
+ phing: addPhing,
325
+ phpunit: addPHPUnitTools,
326
+ phpcpd: addPHPUnitTools,
327
+ wp_cli: addWPCLI
328
+ };
329
+ async function addTools(tools_csv, php_version, os) {
330
+ let script = '\n';
331
+ if (tools_csv === 'none') {
332
+ return '';
333
+ }
334
+ else {
335
+ script += await utils.stepLog('Setup Tools', os);
336
+ }
337
+ const tools_list = await filterList(await utils.CSVArray(tools_csv));
338
+ await utils.asyncForEach(tools_list, async function (release) {
339
+ const data = await getData(release, php_version, os);
340
+ script += '\n';
341
+ switch (true) {
342
+ case data['error'] !== undefined:
343
+ script += await utils.addLog('$cross', data['tool'], data['error'], data['os']);
344
+ break;
345
+ case 'phar' === data['type']:
346
+ data['url'] = await getUrl(data);
347
+ script += await addArchive(data);
348
+ break;
349
+ case 'composer' === data['type']:
350
+ script += await addPackage(data);
351
+ break;
352
+ case 'custom-package' === data['type']:
353
+ script += await utils.customPackage(data['tool'].split('-')[0], 'tools', data['version'], data['os']);
354
+ break;
355
+ case 'custom-function' === data['type']:
356
+ script += await exports.functionRecord[data['function']](data);
357
+ break;
358
+ case /^none$/.test(data['tool']):
359
+ break;
360
+ default:
361
+ script += await utils.addLog('$cross', data['tool'], 'Tool ' + data['tool'] + ' is not supported', data['os']);
362
+ break;
363
+ }
364
+ });
365
+ return script;
366
+ }
367
+ exports.addTools = addTools;
387
368
  //# sourceMappingURL=tools.js.map