-
Notifications
You must be signed in to change notification settings - Fork 11
Expand file tree
/
Copy pathupdate-cli.js
More file actions
85 lines (75 loc) · 2.25 KB
/
update-cli.js
File metadata and controls
85 lines (75 loc) · 2.25 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import { isLatest } from '../services/npmjs';
import apiUrls from '../config/services';
import msg from '../user_messages';
import { spawn } from 'child-process-promise';
import { version } from '../../package.json';
import { getDefaultPackageManager } from '../clients/default-package-manager';
import confirm from '../services/confirmer';
import * as cache from '../services/cache';
import { spinify } from '../services/spinner';
import 'colors';
const packageManager = getDefaultPackageManager();
async function confirmUpdate() {
if ((await cache.getValue('updateConfirmed')) === false) {
return false;
}
const updateConfirmed = await confirm(msg.version.updateRequired());
await cache.setValue('updateConfirmed', false, 24 * 3600);
return updateConfirmed;
}
export default async function() {
if (
await spinify(
isLatest(apiUrls.cliAppUri, version),
'Checking for CLI update...',
)
) {
return false;
}
const updateConfirmed = await confirmUpdate();
if (!updateConfirmed) {
console.log(
'Warning: This is an outdated version of the Shoutem CLI.'.bold.yellow,
);
console.log(
`Install the new one with: 'npm install -g @shoutem/cli' or 'yarn global add @shoutem/cli'. You might need to run it with 'sudo' prefix.`
.yellow,
);
return false;
}
try {
if (packageManager === 'npm') {
await spawn(packageManager, ['install', '-g', '@shoutem/cli'], {
stdio: 'inherit',
});
} else {
await spawn(packageManager, ['global', 'add', '@shoutem/cli'], {
stdio: 'inherit',
});
}
} catch (err) {
if (process.platform !== 'win32') {
console.log(
'Current user does not have permissions to update Shoutem CLI. Using sudo...',
);
if (packageManager === 'npm') {
await spawn('sudo', [packageManager, 'install', '-g', '@shoutem/cli'], {
stdio: 'inherit',
});
} else {
await spawn('sudo', [packageManager, 'global', 'add', '@shoutem/cli'], {
stdio: 'inherit',
});
}
} else {
throw err;
}
}
console.log('Update complete.');
await spawn(
'shoutem',
process.argv.filter((_, index) => index > 1),
{ stdio: 'inherit' },
);
return true;
}