@@ -3392,13 +3392,16 @@ var __importStar = (this && this.__importStar) || function (mod) {
3392
3392
return result;
3393
3393
};
3394
3394
Object.defineProperty(exports, "__esModule", { value: true });
3395
+ exports.run = exports.latest_version = void 0;
3395
3396
const httpm = __importStar(__webpack_require__(539));
3396
3397
const cache = __importStar(__webpack_require__(692));
3397
3398
const core = __importStar(__webpack_require__(470));
3398
3399
const exec = __importStar(__webpack_require__(986));
3399
3400
const io = __importStar(__webpack_require__(1));
3400
3401
const path = __importStar(__webpack_require__(622));
3401
3402
const fs = __importStar(__webpack_require__(747));
3403
+ const baseUrl = 'https://download.tarantool.org/tarantool/release/' +
3404
+ core.getInput('tarantool-version', { required: true });
3402
3405
async function capture(cmd, options) {
3403
3406
let output = '';
3404
3407
await exec.exec(cmd, [], {
@@ -3411,21 +3414,84 @@ async function capture(cmd, options) {
3411
3414
});
3412
3415
return output.trim();
3413
3416
}
3417
+ let _lsb_release;
3418
+ async function lsb_release() {
3419
+ if (!_lsb_release) {
3420
+ _lsb_release = capture('lsb_release -c -s', { silent: true });
3421
+ }
3422
+ return _lsb_release;
3423
+ }
3424
+ let _httpc;
3425
+ async function http_get(url) {
3426
+ if (!_httpc) {
3427
+ _httpc = new httpm.HttpClient('httpc');
3428
+ }
3429
+ core.info('HTTP GET ' + url);
3430
+ return _httpc.get(url);
3431
+ }
3414
3432
async function dpkg_list() {
3415
3433
const cmd = 'sudo dpkg-query -W -f "${binary:Package}\\n"';
3416
3434
const output = await capture(cmd, { silent: true });
3417
3435
let ret = new Set();
3418
3436
output.split('\n').forEach(l => ret.add(l));
3419
3437
return ret;
3420
3438
}
3439
+ function semver_max(a, b) {
3440
+ const re = /[.-]/;
3441
+ var pa = a.split(re);
3442
+ var pb = b.split(re);
3443
+ for (var i = 0;; i++) {
3444
+ var na = Number(pa[i]);
3445
+ var nb = Number(pb[i]);
3446
+ if (na > nb)
3447
+ return a;
3448
+ if (nb > na)
3449
+ return b;
3450
+ if (!isNaN(na) && isNaN(nb))
3451
+ return a;
3452
+ if (isNaN(na) && !isNaN(nb))
3453
+ return b;
3454
+ if (isNaN(na) && isNaN(nb))
3455
+ return pa[i] >= pb[i] ? a : b;
3456
+ }
3457
+ }
3458
+ async function latest_version() {
3459
+ const repo = baseUrl + '/ubuntu/dists/' + (await lsb_release());
3460
+ return http_get(`${repo}/main/binary-amd64/Packages`)
3461
+ .then(response => {
3462
+ if (response.message.statusCode !== 200) {
3463
+ throw new Error(`server replied ${response.message.statusCode}`);
3464
+ }
3465
+ return response.readBody();
3466
+ })
3467
+ .then(output => {
3468
+ let ret = '';
3469
+ output
3470
+ .split('\n\n')
3471
+ .filter(paragraph => paragraph.startsWith('Package: tarantool\n'))
3472
+ .forEach(paragraph => {
3473
+ const match = paragraph.match(/^Version: (.+)$/m);
3474
+ const version = match ? match[1] : ret;
3475
+ ret = semver_max(ret, version);
3476
+ });
3477
+ return ret;
3478
+ });
3479
+ }
3480
+ exports.latest_version = latest_version;
3421
3481
async function run_linux() {
3422
3482
try {
3423
- const httpc = new httpm.HttpClient('httpc');
3424
- const t_version = core.getInput('tarantool-version', { required: true });
3425
- const lsb_release = await capture('lsb_release -c -s', { silent: true });
3483
+ const distro = await lsb_release();
3426
3484
const cache_dir = 'cache-tarantool';
3427
- const cache_key = core.getInput('cache-key') ||
3428
- `tarantool-setup-${t_version}-${lsb_release}`;
3485
+ core.startGroup('Checking latest tarantool version');
3486
+ const version = await latest_version();
3487
+ core.info(`${version}`);
3488
+ core.endGroup();
3489
+ if (core.getInput('cache-key')) {
3490
+ core.warning("Setup-tarantool input 'cache-key' is deprecated");
3491
+ }
3492
+ let cache_key = `tarantool-setup-${distro}-${version}`;
3493
+ // This for testing only
3494
+ cache_key += process.env['TARANTOOL_CACHE_KEY_SUFFIX'] || '';
3429
3495
if (await cache.restoreCache([cache_dir], cache_key)) {
3430
3496
core.info(`Cache restored from key: ${cache_key}`);
3431
3497
await exec.exec(`sudo rsync -aK "${cache_dir}/" /`);
@@ -3435,20 +3501,17 @@ async function run_linux() {
3435
3501
else {
3436
3502
core.info(`Cache not found for input key: ${cache_key}`);
3437
3503
}
3438
- const baseUrl = 'https://download.tarantool.org/tarantool/release/' + t_version;
3439
3504
await core.group('Adding gpg key', async () => {
3440
- const url = baseUrl + '/gpgkey';
3441
- core.info('curl ' + url);
3442
- const response = await httpc.get(url);
3505
+ const response = await http_get(baseUrl + '/gpgkey');
3443
3506
if (response.message.statusCode !== 200) {
3444
- throw new Error(' server replied ${response.message.statusCode}' );
3507
+ throw new Error(` server replied ${response.message.statusCode}` );
3445
3508
}
3446
3509
const gpgkey = Buffer.from(await response.readBody());
3447
3510
await exec.exec('sudo apt-key add - ', [], { input: gpgkey });
3448
3511
});
3449
3512
await core.group('Setting up repository', async () => {
3450
3513
await exec.exec('sudo tee /etc/apt/sources.list.d/tarantool.list', [], {
3451
- input: Buffer.from(`deb ${baseUrl}/ubuntu/ ${lsb_release } main\n`)
3514
+ input: Buffer.from(`deb ${baseUrl}/ubuntu/ ${distro } main\n`)
3452
3515
});
3453
3516
});
3454
3517
await core.group('Running apt-get update', async () => {
@@ -3495,8 +3558,7 @@ async function run() {
3495
3558
}
3496
3559
await exec.exec('tarantool --version');
3497
3560
}
3498
- run();
3499
- exports.default = run;
3561
+ exports.run = run;
3500
3562
3501
3563
3502
3564
/***/ }),
0 commit comments