setup-php 2.36.0 → 2.37.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.
- package/README.md +15 -12
- package/lib/config.js +5 -2
- package/lib/config.js.map +1 -1
- package/lib/core.d.ts +8 -0
- package/lib/core.js +55 -0
- package/lib/core.js.map +1 -0
- package/lib/extensions.js +9 -8
- package/lib/extensions.js.map +1 -1
- package/lib/fetch.js +25 -70
- package/lib/fetch.js.map +1 -1
- package/lib/install.js +3 -3
- package/lib/install.js.map +1 -1
- package/lib/tools.d.ts +50 -21
- package/lib/tools.js +211 -150
- package/lib/tools.js.map +1 -1
- package/lib/utils.d.ts +3 -0
- package/lib/utils.js +62 -26
- package/lib/utils.js.map +1 -1
- package/package.json +20 -20
- package/src/config.ts +5 -2
- package/src/configs/brew_extensions +19 -0
- package/src/configs/composer-gh-auth-no-op +3 -0
- package/src/configs/composer-gh-auth-warn +1 -0
- package/src/configs/os_releases.csv +4 -1
- package/src/core.ts +112 -0
- package/src/extensions.ts +16 -15
- package/src/fetch.ts +28 -42
- package/src/install.ts +6 -3
- package/src/scripts/darwin.sh +12 -6
- package/src/scripts/extensions/couchbase.sh +13 -2
- package/src/scripts/extensions/firebird.sh +6 -23
- package/src/scripts/extensions/gearman.sh +1 -1
- package/src/scripts/extensions/http.ps1 +7 -5
- package/src/scripts/extensions/phalcon.ps1 +3 -21
- package/src/scripts/extensions/phalcon.sh +2 -0
- package/src/scripts/extensions/relay.sh +5 -2
- package/src/scripts/extensions/source.sh +3 -1
- package/src/scripts/extensions/sqlsrv.ps1 +2 -0
- package/src/scripts/extensions/sqlsrv.sh +2 -0
- package/src/scripts/linux.sh +49 -9
- package/src/scripts/tools/add_tools.ps1 +75 -27
- package/src/scripts/tools/add_tools.sh +67 -23
- package/src/scripts/tools/blackfire.sh +1 -1
- package/src/scripts/tools/brew.sh +130 -0
- package/src/scripts/tools/grpc_php_plugin.sh +2 -2
- package/src/scripts/tools/ppa.sh +5 -1
- package/src/scripts/unix.sh +7 -3
- package/src/scripts/win32.ps1 +17 -11
- package/src/tools.ts +349 -203
- package/src/utils.ts +81 -34
package/lib/tools.js
CHANGED
|
@@ -37,6 +37,8 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
37
37
|
};
|
|
38
38
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
39
|
exports.functionRecord = void 0;
|
|
40
|
+
exports.skipGitHubAuthForComposerVersion = skipGitHubAuthForComposerVersion;
|
|
41
|
+
exports.cleanComposerAuthJson = cleanComposerAuthJson;
|
|
40
42
|
exports.getSemverVersion = getSemverVersion;
|
|
41
43
|
exports.getLatestVersion = getLatestVersion;
|
|
42
44
|
exports.getVersion = getVersion;
|
|
@@ -64,6 +66,38 @@ const cv = __importStar(require("compare-versions"));
|
|
|
64
66
|
const fetch = __importStar(require("./fetch"));
|
|
65
67
|
const packagist = __importStar(require("./packagist"));
|
|
66
68
|
const utils = __importStar(require("./utils"));
|
|
69
|
+
function skipGitHubAuthForComposerVersion(version) {
|
|
70
|
+
if (!/^\d+\.\d+\.\d+(?:-[\w-]+)?$/.test(version)) {
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
return fs_1.default
|
|
74
|
+
.readFileSync(path_1.default.join(__dirname, '../src/configs/composer-gh-auth-no-op'), 'utf8')
|
|
75
|
+
.trim()
|
|
76
|
+
.split(/\r?\n/)
|
|
77
|
+
.some(range => {
|
|
78
|
+
const [min, max] = range.trim().split(/\s+/);
|
|
79
|
+
return (cv.compareVersions(version, min) >= 0 &&
|
|
80
|
+
cv.compareVersions(version, max) < 0);
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
function cleanComposerAuthJson() {
|
|
84
|
+
try {
|
|
85
|
+
const auth_json = process.env['COMPOSER_AUTH_JSON'] || '';
|
|
86
|
+
if (!auth_json.includes('github-oauth'))
|
|
87
|
+
return;
|
|
88
|
+
const auth = JSON.parse(auth_json);
|
|
89
|
+
delete auth['github-oauth'];
|
|
90
|
+
if (!Object.keys(auth).length) {
|
|
91
|
+
delete process.env['COMPOSER_AUTH_JSON'];
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
process.env['COMPOSER_AUTH_JSON'] = JSON.stringify(auth);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
}
|
|
67
101
|
async function getSemverVersion(data) {
|
|
68
102
|
const fixSemver = (t) => {
|
|
69
103
|
if (/^\d+\.\d+\.\d+(-|$)/.test(t))
|
|
@@ -77,11 +111,11 @@ async function getSemverVersion(data) {
|
|
|
77
111
|
(await utils.readEnv('COMPOSER_TOKEN'));
|
|
78
112
|
const response = await fetch.fetch(url, github_token);
|
|
79
113
|
if (response.error || response.data === '[]') {
|
|
80
|
-
data
|
|
81
|
-
return data
|
|
114
|
+
data.error = response.error ?? `No version found with prefix ${search}.`;
|
|
115
|
+
return data.version;
|
|
82
116
|
}
|
|
83
117
|
else {
|
|
84
|
-
const refs = JSON.parse(response
|
|
118
|
+
const refs = JSON.parse(response.data);
|
|
85
119
|
const tags = refs
|
|
86
120
|
.map((i) => (i.ref?.split('/').pop() ?? '').replace(/^v(?=\d)/, ''))
|
|
87
121
|
.filter((t) => t.length > 0);
|
|
@@ -91,7 +125,7 @@ async function getSemverVersion(data) {
|
|
|
91
125
|
fixedToOriginal.set(f, t);
|
|
92
126
|
return f;
|
|
93
127
|
});
|
|
94
|
-
fixed.
|
|
128
|
+
const sorted = fixed.toSorted((a, b) => {
|
|
95
129
|
try {
|
|
96
130
|
return cv.compareVersions(b, a);
|
|
97
131
|
}
|
|
@@ -99,49 +133,51 @@ async function getSemverVersion(data) {
|
|
|
99
133
|
return b.localeCompare(a, 'en', { numeric: true, sensitivity: 'base' });
|
|
100
134
|
}
|
|
101
135
|
});
|
|
102
|
-
return fixedToOriginal.get(
|
|
136
|
+
return fixedToOriginal.get(sorted[0]) ?? sorted[0];
|
|
103
137
|
}
|
|
104
138
|
}
|
|
105
139
|
async function getLatestVersion(data) {
|
|
106
|
-
if (!data
|
|
140
|
+
if (!data.version && data.fetch_latest === 'false') {
|
|
107
141
|
return 'latest';
|
|
108
142
|
}
|
|
109
|
-
|
|
110
|
-
|
|
143
|
+
if (data.fetch_latest === 'true' && !data.repository) {
|
|
144
|
+
return 'latest';
|
|
145
|
+
}
|
|
146
|
+
const resp = await fetch.fetch(`${data.github}/${data.repository}/releases.atom`);
|
|
147
|
+
if (resp.data) {
|
|
111
148
|
const releases = [
|
|
112
|
-
...resp
|
|
149
|
+
...resp.data.matchAll(/releases\/tag\/([a-zA-Z]*)?(\d+\.\d+\.\d+)"/g)
|
|
113
150
|
].map(match => match[2]);
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
.pop() || 'latest');
|
|
151
|
+
const sorted = releases.toSorted((a, b) => a.localeCompare(b, undefined, { numeric: true }));
|
|
152
|
+
return sorted.at(-1) || 'latest';
|
|
117
153
|
}
|
|
118
154
|
return 'latest';
|
|
119
155
|
}
|
|
120
156
|
async function getVersion(version, data) {
|
|
121
157
|
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-]+)*))?$/;
|
|
122
|
-
const composer_regex = /^composer:(stable|preview|snapshot|[
|
|
158
|
+
const composer_regex = /^composer:(stable|preview|snapshot|[12])$/;
|
|
123
159
|
const constraint_regex = /[><=^~]+.*/;
|
|
124
160
|
const major_minor_regex = /^\d+(\.\d+)?$/;
|
|
125
|
-
data
|
|
161
|
+
data.version = version.replace(/v?(\d)/, '$1').replace(/\.x/, '');
|
|
126
162
|
switch (true) {
|
|
127
|
-
case composer_regex.test(data
|
|
128
|
-
case semver_regex.test(data
|
|
129
|
-
case constraint_regex.test(data
|
|
130
|
-
return data
|
|
131
|
-
case major_minor_regex.test(data
|
|
132
|
-
data
|
|
133
|
-
return `${data
|
|
134
|
-
case data
|
|
163
|
+
case composer_regex.test(data.release):
|
|
164
|
+
case semver_regex.test(data.version):
|
|
165
|
+
case constraint_regex.test(data.version) && data.type === 'composer':
|
|
166
|
+
return data.version;
|
|
167
|
+
case major_minor_regex.test(data.version) && data.type === 'composer':
|
|
168
|
+
data.release = `${data.tool}:${data.version}.*`;
|
|
169
|
+
return `${data.version}.*`;
|
|
170
|
+
case !!data.repository && major_minor_regex.test(data.version):
|
|
135
171
|
return await getSemverVersion(data);
|
|
136
172
|
default:
|
|
137
|
-
return data
|
|
173
|
+
return data.version.replace(/[^a-zA-Z0-9_.:@+,/-]/g, '');
|
|
138
174
|
}
|
|
139
175
|
}
|
|
140
176
|
async function getRelease(release, data) {
|
|
141
177
|
release = release.includes('/') ? release.split('/')[1] : release;
|
|
142
178
|
return release.includes(':')
|
|
143
|
-
? [data
|
|
144
|
-
: data
|
|
179
|
+
? [data.tool, release.split(':')[1]].join(':')
|
|
180
|
+
: data.tool;
|
|
145
181
|
}
|
|
146
182
|
async function filterList(tools_list) {
|
|
147
183
|
const regex_any = /^composer($|:.*)/;
|
|
@@ -153,104 +189,108 @@ async function filterList(tools_list) {
|
|
|
153
189
|
case matches[0] == undefined:
|
|
154
190
|
break;
|
|
155
191
|
default:
|
|
156
|
-
composer = matches
|
|
192
|
+
composer = matches.at(-1).replace(/v(\d\S*)/, '$1');
|
|
157
193
|
break;
|
|
158
194
|
}
|
|
159
195
|
tools_list.unshift(composer);
|
|
160
196
|
return tools_list;
|
|
161
197
|
}
|
|
162
198
|
async function getUrl(data) {
|
|
163
|
-
|
|
199
|
+
const version = data.version ?? 'latest';
|
|
200
|
+
if (version === 'latest' || version === '') {
|
|
164
201
|
return [
|
|
165
|
-
data
|
|
166
|
-
data
|
|
167
|
-
data
|
|
168
|
-
|
|
169
|
-
data
|
|
170
|
-
data
|
|
202
|
+
data.domain,
|
|
203
|
+
data.repository,
|
|
204
|
+
data.prefix,
|
|
205
|
+
'latest',
|
|
206
|
+
data.verb,
|
|
207
|
+
data.tool + data.extension
|
|
171
208
|
]
|
|
172
209
|
.filter(Boolean)
|
|
173
210
|
.join('/');
|
|
174
211
|
}
|
|
175
212
|
else {
|
|
176
213
|
return [
|
|
177
|
-
data
|
|
178
|
-
data
|
|
179
|
-
data
|
|
180
|
-
data
|
|
181
|
-
data
|
|
182
|
-
data
|
|
214
|
+
data.domain,
|
|
215
|
+
data.repository,
|
|
216
|
+
data.prefix,
|
|
217
|
+
data.verb,
|
|
218
|
+
data.version_prefix + data.version,
|
|
219
|
+
data.tool + data.extension
|
|
183
220
|
]
|
|
184
221
|
.filter(Boolean)
|
|
185
222
|
.join('/');
|
|
186
223
|
}
|
|
187
224
|
}
|
|
188
225
|
async function getPharUrl(data) {
|
|
189
|
-
if (data
|
|
190
|
-
return data
|
|
226
|
+
if (data.version === 'latest') {
|
|
227
|
+
return data.domain + '/' + data.tool + '.phar';
|
|
191
228
|
}
|
|
192
229
|
else {
|
|
193
|
-
return (data
|
|
230
|
+
return (data.domain +
|
|
194
231
|
'/' +
|
|
195
|
-
data
|
|
232
|
+
data.tool +
|
|
196
233
|
'-' +
|
|
197
|
-
data
|
|
198
|
-
data
|
|
234
|
+
data.version_prefix +
|
|
235
|
+
data.version +
|
|
199
236
|
'.phar');
|
|
200
237
|
}
|
|
201
238
|
}
|
|
202
239
|
async function addArchive(data) {
|
|
203
|
-
return ((await utils.getCommand(data
|
|
204
|
-
(await utils.joins(data
|
|
240
|
+
return ((await utils.getCommand(data.os, 'tool')) +
|
|
241
|
+
(await utils.joins(data.url, data.tool, data.version_parameter)));
|
|
205
242
|
}
|
|
206
243
|
async function addPackage(data) {
|
|
207
|
-
const command = await utils.getCommand(data
|
|
208
|
-
const parts = data
|
|
209
|
-
const args =
|
|
244
|
+
const command = await utils.getCommand(data.os, 'composer_tool');
|
|
245
|
+
const parts = data.repository.split('/');
|
|
246
|
+
const args = [parts[1], data.release, parts[0] + '/', data.scope]
|
|
247
|
+
.map(a => utils.safeArg(a, data.os))
|
|
248
|
+
.join(' ');
|
|
210
249
|
return command + args;
|
|
211
250
|
}
|
|
212
251
|
async function addBlackfirePlayer(data) {
|
|
213
|
-
switch (data
|
|
252
|
+
switch (data.os) {
|
|
214
253
|
case 'win32':
|
|
215
|
-
return await utils.addLog('$cross', data
|
|
254
|
+
return await utils.addLog('$cross', data.tool, data.tool + ' is not a windows tool', 'win32');
|
|
216
255
|
default:
|
|
217
|
-
if (data
|
|
218
|
-
if (/5\.[5-6]|7\.0/.test(data
|
|
219
|
-
data
|
|
256
|
+
if (data.version == 'latest') {
|
|
257
|
+
if (/5\.[5-6]|7\.0/.test(data.php_version)) {
|
|
258
|
+
data.version = '1.9.3';
|
|
220
259
|
}
|
|
221
|
-
else if (/7\.[1-4]|8\.0/.test(data
|
|
222
|
-
data
|
|
260
|
+
else if (/7\.[1-4]|8\.0/.test(data.php_version)) {
|
|
261
|
+
data.version = '1.22.0';
|
|
223
262
|
}
|
|
224
263
|
}
|
|
225
|
-
data
|
|
264
|
+
data.url = await getPharUrl(data);
|
|
226
265
|
return addArchive(data);
|
|
227
266
|
}
|
|
228
267
|
}
|
|
229
268
|
async function addCastor(data) {
|
|
230
|
-
data
|
|
231
|
-
data
|
|
232
|
-
data
|
|
233
|
-
data
|
|
234
|
-
? data
|
|
269
|
+
data.tool = 'castor.' + data.os.replace('win32', 'windows') + '-amd64';
|
|
270
|
+
data.url = await getUrl(data);
|
|
271
|
+
data.tool = 'castor';
|
|
272
|
+
data.version_parameter = fs_1.default.existsSync('castor.php')
|
|
273
|
+
? data.version_parameter
|
|
235
274
|
: '';
|
|
236
275
|
return await addArchive(data);
|
|
237
276
|
}
|
|
238
277
|
async function addComposer(data) {
|
|
239
|
-
const channel = data
|
|
240
|
-
const github = data
|
|
241
|
-
const getcomposer = data
|
|
278
|
+
const channel = data.version.replace('latest', 'stable');
|
|
279
|
+
const github = data.github;
|
|
280
|
+
const getcomposer = data.domain;
|
|
242
281
|
const cds = 'https://dl.cloudsmith.io';
|
|
243
282
|
const spc = 'https://artifacts.setup-php.com';
|
|
244
|
-
const filename = `composer-${data
|
|
283
|
+
const filename = `composer-${data.php_version}-${channel}.phar`;
|
|
245
284
|
const releases_url = `${github}/shivammathur/composer-cache/releases/latest/download/${filename}`;
|
|
246
285
|
const cds_url = `${cds}/public/shivammathur/composer-cache/raw/files/${filename}`;
|
|
247
286
|
const spc_url = `${spc}/composer/${filename}`;
|
|
248
287
|
const lts_url = `${getcomposer}/download/latest-2.2.x/composer.phar`;
|
|
249
|
-
const is_lts = /^5\.[3-6]$|^7\.[0-1]$/.test(data
|
|
288
|
+
const is_lts = /^5\.[3-6]$|^7\.[0-1]$/.test(data.php_version);
|
|
250
289
|
const channel_source_url = `${getcomposer}/composer-${channel}.phar`;
|
|
251
290
|
const version_source_url = `${getcomposer}/download/${channel}/composer.phar`;
|
|
252
291
|
let cache_url = `${releases_url},${spc_url},${cds_url}`;
|
|
253
292
|
let source_url = `${getcomposer}/composer.phar`;
|
|
293
|
+
let skip_composer_github_auth = '';
|
|
254
294
|
switch (true) {
|
|
255
295
|
case /^snapshot$/.test(channel):
|
|
256
296
|
source_url = is_lts ? lts_url : source_url;
|
|
@@ -261,106 +301,108 @@ async function addComposer(data) {
|
|
|
261
301
|
case /^1$/.test(channel):
|
|
262
302
|
source_url = channel_source_url;
|
|
263
303
|
break;
|
|
264
|
-
case /^\d+\.\d+\.\d+[\w-]
|
|
265
|
-
|
|
304
|
+
case /^\d+\.\d+\.\d+(?:-[\w-]+)?$/.test(data.version):
|
|
305
|
+
if (skipGitHubAuthForComposerVersion(data.version)) {
|
|
306
|
+
cleanComposerAuthJson();
|
|
307
|
+
skip_composer_github_auth = ' true';
|
|
308
|
+
}
|
|
309
|
+
cache_url = `${github}/${data.repository}/releases/download/${data.version}/composer.phar`;
|
|
266
310
|
source_url = version_source_url;
|
|
267
311
|
break;
|
|
268
312
|
default:
|
|
269
313
|
source_url = is_lts ? lts_url : channel_source_url;
|
|
270
314
|
}
|
|
271
315
|
const use_cache = (await utils.readEnv('NO_TOOLS_CACHE')) !== 'true';
|
|
272
|
-
data
|
|
273
|
-
data
|
|
316
|
+
data.url = use_cache ? `${cache_url},${source_url}` : source_url;
|
|
317
|
+
data.version_parameter = data.version + skip_composer_github_auth;
|
|
274
318
|
return await addArchive(data);
|
|
275
319
|
}
|
|
276
320
|
async function addDeployer(data) {
|
|
277
|
-
if (data
|
|
278
|
-
data
|
|
321
|
+
if (data.version === 'latest') {
|
|
322
|
+
data.url = data.domain + '/deployer.phar';
|
|
279
323
|
}
|
|
280
324
|
else {
|
|
281
325
|
const manifest = await fetch.fetch('https://deployer.org/manifest.json');
|
|
282
326
|
const version_data = JSON.parse(manifest.data);
|
|
283
327
|
const version_key = Object.keys(version_data).find((key) => {
|
|
284
|
-
return version_data[key]
|
|
328
|
+
return version_data[key].version === data.version;
|
|
285
329
|
});
|
|
286
330
|
if (version_key) {
|
|
287
|
-
data
|
|
331
|
+
data.url = version_data[version_key].url;
|
|
288
332
|
}
|
|
289
333
|
else {
|
|
290
|
-
return await utils.addLog('$cross', 'deployer', 'Version missing in deployer manifest', data
|
|
334
|
+
return await utils.addLog('$cross', 'deployer', 'Version missing in deployer manifest', data.os);
|
|
291
335
|
}
|
|
292
336
|
}
|
|
293
337
|
return await addArchive(data);
|
|
294
338
|
}
|
|
295
339
|
async function addDevTools(data) {
|
|
296
|
-
switch (data
|
|
340
|
+
switch (data.os) {
|
|
297
341
|
case 'linux':
|
|
298
342
|
case 'darwin':
|
|
299
|
-
return 'add_devtools ' + data
|
|
343
|
+
return 'add_devtools ' + data.tool;
|
|
300
344
|
case 'win32':
|
|
301
|
-
return await utils.addLog('$tick', data
|
|
345
|
+
return await utils.addLog('$tick', data.tool, data.tool + ' is not a windows tool', 'win32');
|
|
302
346
|
default:
|
|
303
|
-
return await utils.log('Platform ' + data
|
|
347
|
+
return await utils.log('Platform ' + data.os + ' is not supported', data.os, 'error');
|
|
304
348
|
}
|
|
305
349
|
}
|
|
306
350
|
async function addPECL(data) {
|
|
307
|
-
return await utils.getCommand(data
|
|
351
|
+
return await utils.getCommand(data.os, 'pecl');
|
|
308
352
|
}
|
|
309
353
|
async function addPhing(data) {
|
|
310
|
-
data
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
data
|
|
315
|
-
data
|
|
316
|
-
data['url'] += ',' + (await getUrl(data));
|
|
354
|
+
data.url = data.domain + '/get/phing-' + data.version + data.extension;
|
|
355
|
+
if (data.version != 'latest') {
|
|
356
|
+
[data.prefix, data.verb] = ['releases', 'download'];
|
|
357
|
+
data.domain = data.github;
|
|
358
|
+
data.extension = '-' + data.version + data.extension;
|
|
359
|
+
data.url += ',' + (await getUrl(data));
|
|
317
360
|
}
|
|
318
361
|
return await addArchive(data);
|
|
319
362
|
}
|
|
320
363
|
async function addPhive(data) {
|
|
321
364
|
switch (true) {
|
|
322
|
-
case /5\.[3-5]/.test(data
|
|
323
|
-
return await utils.addLog('$cross', 'phive', 'Phive is not supported on PHP ' + data
|
|
324
|
-
case /5\.6|7\.0/.test(data
|
|
325
|
-
data
|
|
365
|
+
case /5\.[3-5]/.test(data.php_version):
|
|
366
|
+
return await utils.addLog('$cross', 'phive', 'Phive is not supported on PHP ' + data.php_version, data.os);
|
|
367
|
+
case /5\.6|7\.0/.test(data.php_version):
|
|
368
|
+
data.version = '0.12.1';
|
|
326
369
|
break;
|
|
327
|
-
case /7\.1/.test(data
|
|
328
|
-
data
|
|
370
|
+
case /7\.1/.test(data.php_version):
|
|
371
|
+
data.version = '0.13.5';
|
|
329
372
|
break;
|
|
330
|
-
case /7\.2/.test(data
|
|
331
|
-
data
|
|
373
|
+
case /7\.2/.test(data.php_version):
|
|
374
|
+
data.version = '0.14.5';
|
|
332
375
|
break;
|
|
333
|
-
case /7\.3|7\.4/.test(data
|
|
334
|
-
data
|
|
376
|
+
case /7\.3|7\.4/.test(data.php_version):
|
|
377
|
+
data.version = '0.15.3';
|
|
335
378
|
break;
|
|
336
|
-
case /^latest$/.test(data
|
|
337
|
-
data
|
|
379
|
+
case /^latest$/.test(data.version):
|
|
380
|
+
data.version = await getLatestVersion(data);
|
|
338
381
|
break;
|
|
339
382
|
}
|
|
340
|
-
data
|
|
341
|
-
data
|
|
383
|
+
data.extension = '-' + data.version + data.extension;
|
|
384
|
+
data.url = await getUrl(data);
|
|
342
385
|
return await addArchive(data);
|
|
343
386
|
}
|
|
344
387
|
async function addPHPUnitTools(data) {
|
|
345
|
-
if (data
|
|
346
|
-
data
|
|
347
|
-
(await packagist.search(data
|
|
348
|
-
'latest';
|
|
388
|
+
if (data.version === 'latest') {
|
|
389
|
+
data.version =
|
|
390
|
+
(await packagist.search(data.packagist, data.php_version)) ?? 'latest';
|
|
349
391
|
}
|
|
350
|
-
data
|
|
351
|
-
if (data
|
|
352
|
-
data
|
|
392
|
+
data.url = await getPharUrl(data);
|
|
393
|
+
if (data.url.match(/-\d+/)) {
|
|
394
|
+
data.url += ',' + data.url.replace(/-(\d+)\.\d+\.\d+/, '-$1');
|
|
353
395
|
}
|
|
354
396
|
return await addArchive(data);
|
|
355
397
|
}
|
|
356
398
|
async function addWPCLI(data) {
|
|
357
|
-
if (data
|
|
358
|
-
data
|
|
359
|
-
data
|
|
399
|
+
if (data.version === 'latest') {
|
|
400
|
+
data.uri = 'wp-cli/builds/blob/gh-pages/phar/wp-cli.phar?raw=true';
|
|
401
|
+
data.url = [data.domain, data.uri].join('/');
|
|
360
402
|
}
|
|
361
403
|
else {
|
|
362
|
-
data
|
|
363
|
-
data
|
|
404
|
+
data.extension = '-' + data.version + data.extension;
|
|
405
|
+
data.url = await getUrl(data);
|
|
364
406
|
}
|
|
365
407
|
return await addArchive(data);
|
|
366
408
|
}
|
|
@@ -372,44 +414,59 @@ async function getData(release, php_version, os) {
|
|
|
372
414
|
const parts = release.split(':');
|
|
373
415
|
const tool = parts[0];
|
|
374
416
|
const version = parts[1];
|
|
375
|
-
let
|
|
376
|
-
if (Object.
|
|
377
|
-
|
|
378
|
-
data['tool'] = tool;
|
|
417
|
+
let config;
|
|
418
|
+
if (Object.hasOwn(json_objects, tool)) {
|
|
419
|
+
config = { ...json_objects[tool], tool };
|
|
379
420
|
}
|
|
380
421
|
else {
|
|
381
422
|
const key = Object.keys(json_objects).find((key) => {
|
|
382
|
-
return json_objects[key]
|
|
423
|
+
return json_objects[key].alias == tool;
|
|
383
424
|
});
|
|
384
425
|
if (key) {
|
|
385
|
-
|
|
386
|
-
data['tool'] = key;
|
|
426
|
+
config = { ...json_objects[key], tool: key };
|
|
387
427
|
}
|
|
388
|
-
else {
|
|
389
|
-
|
|
428
|
+
else if (tool.includes('/')) {
|
|
429
|
+
config = {
|
|
390
430
|
tool: tool.split('/')[1],
|
|
391
431
|
repository: tool,
|
|
392
432
|
type: 'composer'
|
|
393
433
|
};
|
|
394
|
-
|
|
434
|
+
}
|
|
435
|
+
else {
|
|
436
|
+
config = { tool };
|
|
395
437
|
}
|
|
396
438
|
}
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
data
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
439
|
+
const github = 'https://github.com';
|
|
440
|
+
const domain = config.domain ?? github;
|
|
441
|
+
const data = {
|
|
442
|
+
tool: config.tool,
|
|
443
|
+
version: '',
|
|
444
|
+
url: '',
|
|
445
|
+
os,
|
|
446
|
+
php_version,
|
|
447
|
+
github,
|
|
448
|
+
domain,
|
|
449
|
+
extension: config.extension ?? '.phar',
|
|
450
|
+
repository: config.repository ?? '',
|
|
451
|
+
prefix: domain === github ? 'releases' : '',
|
|
452
|
+
verb: domain === github ? 'download' : '',
|
|
453
|
+
fetch_latest: config.fetch_latest ?? 'false',
|
|
454
|
+
scope: config.scope ?? 'global',
|
|
455
|
+
version_parameter: config.version_parameter != null
|
|
456
|
+
? JSON.stringify(config.version_parameter)
|
|
457
|
+
: '',
|
|
458
|
+
version_prefix: config.version_prefix ?? '',
|
|
459
|
+
release: '',
|
|
460
|
+
packagist: config.packagist ?? config.repository ?? '',
|
|
461
|
+
type: config.type,
|
|
462
|
+
function: config.function,
|
|
463
|
+
alias: config.alias
|
|
464
|
+
};
|
|
465
|
+
data.release = await getRelease(release, data);
|
|
466
|
+
data.version = version
|
|
411
467
|
? await getVersion(version, data)
|
|
412
468
|
: await getLatestVersion(data);
|
|
469
|
+
data.url = await getUrl(data);
|
|
413
470
|
return data;
|
|
414
471
|
}
|
|
415
472
|
exports.functionRecord = {
|
|
@@ -438,26 +495,30 @@ async function addTools(tools_csv, php_version, os) {
|
|
|
438
495
|
const data = await getData(release, php_version, os);
|
|
439
496
|
script += '\n';
|
|
440
497
|
switch (true) {
|
|
441
|
-
case data
|
|
442
|
-
script += await utils.addLog('$cross', data
|
|
498
|
+
case data.error !== undefined:
|
|
499
|
+
script += await utils.addLog('$cross', data.tool, data.error, data.os);
|
|
443
500
|
break;
|
|
444
|
-
case 'phar' === data
|
|
445
|
-
data['url'] = await getUrl(data);
|
|
501
|
+
case 'phar' === data.type:
|
|
446
502
|
script += await addArchive(data);
|
|
447
503
|
break;
|
|
448
|
-
case 'composer' === data
|
|
504
|
+
case 'composer' === data.type:
|
|
449
505
|
script += await addPackage(data);
|
|
450
506
|
break;
|
|
451
|
-
case 'custom-package' === data
|
|
452
|
-
script += await utils.customPackage(data
|
|
507
|
+
case 'custom-package' === data.type:
|
|
508
|
+
script += await utils.customPackage(data.tool.split('-')[0], 'tools', data.version, data.os);
|
|
453
509
|
break;
|
|
454
|
-
case 'custom-function' === data
|
|
455
|
-
|
|
510
|
+
case 'custom-function' === data.type:
|
|
511
|
+
if (!data.function) {
|
|
512
|
+
script += await utils.addLog('$cross', data.tool, data.tool + ' has no function defined. Please report this issue.', data.os);
|
|
513
|
+
}
|
|
514
|
+
else {
|
|
515
|
+
script += await exports.functionRecord[data.function](data);
|
|
516
|
+
}
|
|
456
517
|
break;
|
|
457
|
-
case /^none$/.test(data
|
|
518
|
+
case /^none$/.test(data.tool):
|
|
458
519
|
break;
|
|
459
520
|
default:
|
|
460
|
-
script += await utils.addLog('$cross', data
|
|
521
|
+
script += await utils.addLog('$cross', data.tool, 'Tool ' + data.tool + ' is not supported', data.os);
|
|
461
522
|
break;
|
|
462
523
|
}
|
|
463
524
|
});
|