navy 4.1.2-rc.2 → 5.0.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.
- package/lib/cli/config/index.js +57 -241
- package/lib/cli/config/wrapper.js +12 -36
- package/lib/cli/develop.js +63 -167
- package/lib/cli/doctor/clean-compose-files.js +19 -73
- package/lib/cli/doctor/index.js +34 -154
- package/lib/cli/doctor/invalid-compose-config.js +20 -110
- package/lib/cli/doctor/invalid-state.js +22 -115
- package/lib/cli/doctor/util.js +26 -93
- package/lib/cli/external-ip.js +9 -39
- package/lib/cli/health.js +18 -67
- package/lib/cli/https.js +92 -0
- package/lib/cli/import.js +22 -59
- package/lib/cli/index.js +11 -17
- package/lib/cli/lan-ip.js +18 -60
- package/lib/cli/launch.js +46 -127
- package/lib/cli/live.js +37 -111
- package/lib/cli/local-ip.js +16 -53
- package/lib/cli/logs.js +7 -35
- package/lib/cli/open.js +11 -45
- package/lib/cli/program.js +145 -167
- package/lib/cli/ps.js +36 -105
- package/lib/cli/refresh-config.js +18 -62
- package/lib/cli/run.js +8 -39
- package/lib/cli/status.js +41 -201
- package/lib/cli/updates.js +68 -160
- package/lib/cli/util/get-or-initialise-navy.js +14 -57
- package/lib/cli/util/import.js +33 -83
- package/lib/cli/util/index.js +10 -12
- package/lib/cli/util/reconfigure.js +12 -102
- package/lib/cli/wait-for-healthy.js +53 -100
- package/lib/config-provider.js +25 -127
- package/lib/config-providers/filesystem/index.js +58 -235
- package/lib/config-providers/npm/__tests__/util.js +3 -6
- package/lib/config-providers/npm/index.js +60 -231
- package/lib/config-providers/npm/util.js +6 -9
- package/lib/config.js +39 -76
- package/lib/driver-logging.js +23 -28
- package/lib/driver.js +5 -7
- package/lib/drivers/docker-compose/client.js +64 -172
- package/lib/drivers/docker-compose/index.js +153 -464
- package/lib/errors.js +27 -61
- package/lib/http-proxy.js +72 -158
- package/lib/index.js +26 -29
- package/lib/middleware/add-service-proxy-config.js +76 -0
- package/lib/middleware/develop.js +9 -23
- package/lib/middleware/helpers.js +20 -25
- package/lib/middleware/port-override.js +15 -37
- package/lib/middleware/set-env-vars.js +14 -18
- package/lib/middleware/set-image.js +12 -18
- package/lib/middleware/set-logging-driver.js +14 -18
- package/lib/middleware/tag-override.js +11 -19
- package/lib/navy/default-middleware.js +13 -27
- package/lib/navy/index.js +438 -1761
- package/lib/navy/middleware.js +15 -100
- package/lib/navy/plugin-interface.js +28 -108
- package/lib/navy/state.js +58 -147
- package/lib/navy/util.js +2 -1
- package/lib/service.js +5 -3
- package/lib/util/__tests__/external-ip.js +20 -96
- package/lib/util/__tests__/registry-client.js +11 -24
- package/lib/util/__tests__/service-host.js +19 -116
- package/lib/util/docker-client.js +10 -13
- package/lib/util/exec-async.js +9 -27
- package/lib/util/external-ip.js +48 -126
- package/lib/util/fs.js +7 -6
- package/lib/util/get-lan-ip.js +15 -52
- package/lib/util/has-update.js +23 -73
- package/lib/util/https.js +213 -0
- package/lib/util/navyrc.js +12 -50
- package/lib/util/registry-client.js +41 -112
- package/lib/util/service-host.js +40 -129
- package/lib/util/table.js +11 -21
- package/package.json +14 -14
- package/LICENSE +0 -21
- package/lib/middleware/add-virtual-hosts.js +0 -147
|
@@ -1,73 +1,29 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
2
4
|
|
|
3
5
|
Object.defineProperty(exports, "__esModule", {
|
|
4
6
|
value: true
|
|
5
7
|
});
|
|
8
|
+
exports.default = _default;
|
|
6
9
|
|
|
7
|
-
var
|
|
8
|
-
|
|
9
|
-
var _regenerator2 = _interopRequireDefault(_regenerator);
|
|
10
|
-
|
|
11
|
-
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
|
|
12
|
-
|
|
13
|
-
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
|
|
14
|
-
|
|
15
|
-
var _chalk = require('chalk');
|
|
16
|
-
|
|
17
|
-
var _chalk2 = _interopRequireDefault(_chalk);
|
|
18
|
-
|
|
19
|
-
var _invariant = require('invariant');
|
|
20
|
-
|
|
21
|
-
var _invariant2 = _interopRequireDefault(_invariant);
|
|
22
|
-
|
|
23
|
-
var _ = require('../');
|
|
24
|
-
|
|
25
|
-
var _driverLogging = require('../driver-logging');
|
|
26
|
-
|
|
27
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
28
|
-
|
|
29
|
-
exports.default = function () {
|
|
30
|
-
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(opts) {
|
|
31
|
-
var navy, configProvider;
|
|
32
|
-
return _regenerator2.default.wrap(function _callee$(_context) {
|
|
33
|
-
while (1) {
|
|
34
|
-
switch (_context.prev = _context.next) {
|
|
35
|
-
case 0:
|
|
36
|
-
navy = (0, _.getNavy)(opts.navy);
|
|
37
|
-
_context.next = 3;
|
|
38
|
-
return navy.getConfigProvider();
|
|
39
|
-
|
|
40
|
-
case 3:
|
|
41
|
-
configProvider = _context.sent;
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
(0, _invariant2.default)(configProvider, 'NO_CONFIG_PROVIDER: Couldn\'t determine config provider for navy %s', navy.name);
|
|
45
|
-
|
|
46
|
-
_context.next = 7;
|
|
47
|
-
return configProvider.refreshConfig();
|
|
48
|
-
|
|
49
|
-
case 7:
|
|
50
|
-
|
|
51
|
-
(0, _driverLogging.startDriverLogging)('Ensuring services are up to date...');
|
|
52
|
-
_context.next = 10;
|
|
53
|
-
return navy.reconfigure();
|
|
10
|
+
var _chalk = _interopRequireDefault(require("chalk"));
|
|
54
11
|
|
|
55
|
-
|
|
56
|
-
(0, _driverLogging.stopDriverLogging)();
|
|
12
|
+
var _invariant = _interopRequireDefault(require("invariant"));
|
|
57
13
|
|
|
58
|
-
|
|
14
|
+
var _ = require("../");
|
|
59
15
|
|
|
60
|
-
|
|
61
|
-
case 'end':
|
|
62
|
-
return _context.stop();
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}, _callee, this);
|
|
66
|
-
}));
|
|
16
|
+
var _driverLogging = require("../driver-logging");
|
|
67
17
|
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
18
|
+
async function _default(opts) {
|
|
19
|
+
const navy = (0, _.getNavy)(opts.navy);
|
|
20
|
+
const configProvider = await navy.getConfigProvider();
|
|
21
|
+
(0, _invariant.default)(configProvider, "NO_CONFIG_PROVIDER: Couldn't determine config provider for navy %s", navy.name);
|
|
22
|
+
await configProvider.refreshConfig();
|
|
23
|
+
(0, _driverLogging.startDriverLogging)('Ensuring services are up to date...');
|
|
24
|
+
await navy.reconfigure();
|
|
25
|
+
(0, _driverLogging.stopDriverLogging)();
|
|
26
|
+
console.log(_chalk.default.green(`Config refreshed for Navy "${opts.navy}"`));
|
|
27
|
+
}
|
|
72
28
|
|
|
73
29
|
module.exports = exports.default;
|
package/lib/cli/run.js
CHANGED
|
@@ -1,47 +1,16 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, "__esModule", {
|
|
4
4
|
value: true
|
|
5
5
|
});
|
|
6
|
+
exports.default = _default;
|
|
6
7
|
|
|
7
|
-
var
|
|
8
|
+
var _ = require("../");
|
|
8
9
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
var _ = require('../');
|
|
16
|
-
|
|
17
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
18
|
-
|
|
19
|
-
exports.default = function () {
|
|
20
|
-
var _ref = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(name, args, opts) {
|
|
21
|
-
var navy;
|
|
22
|
-
return _regenerator2.default.wrap(function _callee$(_context) {
|
|
23
|
-
while (1) {
|
|
24
|
-
switch (_context.prev = _context.next) {
|
|
25
|
-
case 0:
|
|
26
|
-
navy = (0, _.getNavy)(opts.navy);
|
|
27
|
-
_context.next = 3;
|
|
28
|
-
return navy.ensurePluginsLoaded();
|
|
29
|
-
|
|
30
|
-
case 3:
|
|
31
|
-
_context.next = 5;
|
|
32
|
-
return navy.invokeCommand(name, args);
|
|
33
|
-
|
|
34
|
-
case 5:
|
|
35
|
-
case 'end':
|
|
36
|
-
return _context.stop();
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
}, _callee, this);
|
|
40
|
-
}));
|
|
41
|
-
|
|
42
|
-
return function (_x, _x2, _x3) {
|
|
43
|
-
return _ref.apply(this, arguments);
|
|
44
|
-
};
|
|
45
|
-
}();
|
|
10
|
+
async function _default(name, args, opts) {
|
|
11
|
+
const navy = (0, _.getNavy)(opts.navy);
|
|
12
|
+
await navy.ensurePluginsLoaded();
|
|
13
|
+
await navy.invokeCommand(name, args);
|
|
14
|
+
}
|
|
46
15
|
|
|
47
16
|
module.exports = exports.default;
|
package/lib/cli/status.js
CHANGED
|
@@ -1,221 +1,61 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
2
4
|
|
|
3
5
|
Object.defineProperty(exports, "__esModule", {
|
|
4
6
|
value: true
|
|
5
7
|
});
|
|
8
|
+
exports.default = _default;
|
|
6
9
|
|
|
7
|
-
var
|
|
8
|
-
|
|
9
|
-
var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
|
|
10
|
-
|
|
11
|
-
var _regenerator = require('babel-runtime/regenerator');
|
|
12
|
-
|
|
13
|
-
var _regenerator2 = _interopRequireDefault(_regenerator);
|
|
14
|
-
|
|
15
|
-
var _promise = require('babel-runtime/core-js/promise');
|
|
16
|
-
|
|
17
|
-
var _promise2 = _interopRequireDefault(_promise);
|
|
18
|
-
|
|
19
|
-
var _stringify = require('babel-runtime/core-js/json/stringify');
|
|
20
|
-
|
|
21
|
-
var _stringify2 = _interopRequireDefault(_stringify);
|
|
22
|
-
|
|
23
|
-
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
|
|
24
|
-
|
|
25
|
-
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
|
|
26
|
-
|
|
27
|
-
var _chalk = require('chalk');
|
|
10
|
+
var _chalk = _interopRequireDefault(require("chalk"));
|
|
28
11
|
|
|
29
|
-
var
|
|
12
|
+
var _ = require("../");
|
|
30
13
|
|
|
31
|
-
var
|
|
14
|
+
var _table = _interopRequireDefault(require("../util/table"));
|
|
32
15
|
|
|
33
|
-
var
|
|
34
|
-
|
|
35
|
-
var _table2 = _interopRequireDefault(_table);
|
|
36
|
-
|
|
37
|
-
var _config = require('../config');
|
|
38
|
-
|
|
39
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
16
|
+
var _config = require("../config");
|
|
40
17
|
|
|
41
18
|
function formatNavyName(navy, defaultNavy) {
|
|
42
19
|
if (navy.name === defaultNavy) {
|
|
43
|
-
return navy.name
|
|
20
|
+
return `${navy.name} ${_chalk.default.cyan('(default)')}`;
|
|
44
21
|
}
|
|
45
22
|
|
|
46
23
|
return navy.name;
|
|
47
24
|
}
|
|
48
25
|
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
_context3.t0 = console;
|
|
70
|
-
_context3.t1 = _stringify2.default;
|
|
71
|
-
_context3.next = 8;
|
|
72
|
-
return _promise2.default.all(navies.map(function () {
|
|
73
|
-
var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(navy) {
|
|
74
|
-
var ps, state, configProvider, isActive;
|
|
75
|
-
return _regenerator2.default.wrap(function _callee$(_context) {
|
|
76
|
-
while (1) {
|
|
77
|
-
switch (_context.prev = _context.next) {
|
|
78
|
-
case 0:
|
|
79
|
-
_context.next = 2;
|
|
80
|
-
return navy.ps();
|
|
81
|
-
|
|
82
|
-
case 2:
|
|
83
|
-
ps = _context.sent;
|
|
84
|
-
_context.next = 5;
|
|
85
|
-
return navy.getState();
|
|
86
|
-
|
|
87
|
-
case 5:
|
|
88
|
-
state = _context.sent;
|
|
89
|
-
_context.next = 8;
|
|
90
|
-
return navy.getConfigProvider();
|
|
91
|
-
|
|
92
|
-
case 8:
|
|
93
|
-
configProvider = _context.sent;
|
|
94
|
-
isActive = ps.reduce(function (active, service) {
|
|
95
|
-
return active || service.status === 'running';
|
|
96
|
-
}, false);
|
|
97
|
-
_context.t0 = navy.name;
|
|
98
|
-
_context.t1 = isActive;
|
|
99
|
-
_context.t2 = ps;
|
|
100
|
-
_context.t3 = state;
|
|
101
|
-
_context.t4 = state.configProvider;
|
|
102
|
-
_context.next = 17;
|
|
103
|
-
return configProvider.getLocationDisplayName();
|
|
104
|
-
|
|
105
|
-
case 17:
|
|
106
|
-
_context.t5 = _context.sent;
|
|
107
|
-
_context.next = 20;
|
|
108
|
-
return navy.url('[service]');
|
|
109
|
-
|
|
110
|
-
case 20:
|
|
111
|
-
_context.t6 = _context.sent;
|
|
112
|
-
return _context.abrupt('return', {
|
|
113
|
-
name: _context.t0,
|
|
114
|
-
isActive: _context.t1,
|
|
115
|
-
services: _context.t2,
|
|
116
|
-
state: _context.t3,
|
|
117
|
-
configProvider: _context.t4,
|
|
118
|
-
configLocation: _context.t5,
|
|
119
|
-
url: _context.t6
|
|
120
|
-
});
|
|
121
|
-
|
|
122
|
-
case 22:
|
|
123
|
-
case 'end':
|
|
124
|
-
return _context.stop();
|
|
125
|
-
}
|
|
126
|
-
}
|
|
127
|
-
}, _callee, _this);
|
|
128
|
-
}));
|
|
129
|
-
|
|
130
|
-
return function (_x2) {
|
|
131
|
-
return _ref2.apply(this, arguments);
|
|
132
|
-
};
|
|
133
|
-
}()));
|
|
134
|
-
|
|
135
|
-
case 8:
|
|
136
|
-
_context3.t2 = _context3.sent;
|
|
137
|
-
_context3.t3 = (0, _context3.t1)(_context3.t2, null, 2);
|
|
138
|
-
return _context3.abrupt('return', _context3.t0.log.call(_context3.t0, _context3.t3));
|
|
139
|
-
|
|
140
|
-
case 11:
|
|
141
|
-
_context3.next = 13;
|
|
142
|
-
return (0, _config.getConfig)();
|
|
143
|
-
|
|
144
|
-
case 13:
|
|
145
|
-
config = _context3.sent;
|
|
146
|
-
defaultNavy = config.defaultNavy;
|
|
147
|
-
_context3.next = 17;
|
|
148
|
-
return _promise2.default.all(navies.map(function () {
|
|
149
|
-
var _ref3 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee2(navy) {
|
|
150
|
-
var ps, state, configProvider, isActive;
|
|
151
|
-
return _regenerator2.default.wrap(function _callee2$(_context2) {
|
|
152
|
-
while (1) {
|
|
153
|
-
switch (_context2.prev = _context2.next) {
|
|
154
|
-
case 0:
|
|
155
|
-
_context2.next = 2;
|
|
156
|
-
return navy.ps();
|
|
157
|
-
|
|
158
|
-
case 2:
|
|
159
|
-
ps = _context2.sent;
|
|
160
|
-
_context2.next = 5;
|
|
161
|
-
return navy.getState();
|
|
162
|
-
|
|
163
|
-
case 5:
|
|
164
|
-
state = _context2.sent;
|
|
165
|
-
_context2.next = 8;
|
|
166
|
-
return navy.getConfigProvider();
|
|
167
|
-
|
|
168
|
-
case 8:
|
|
169
|
-
configProvider = _context2.sent;
|
|
170
|
-
isActive = ps.reduce(function (active, service) {
|
|
171
|
-
return active || service.status === 'running';
|
|
172
|
-
}, false);
|
|
173
|
-
_context2.t0 = formatNavyName(navy, defaultNavy);
|
|
174
|
-
_context2.t1 = isActive ? _chalk2.default.green('yes') : _chalk2.default.red('no');
|
|
175
|
-
_context2.t2 = ps.length.toString();
|
|
176
|
-
_context2.t3 = state.configProvider;
|
|
177
|
-
_context2.next = 16;
|
|
178
|
-
return configProvider.getLocationDisplayName();
|
|
179
|
-
|
|
180
|
-
case 16:
|
|
181
|
-
_context2.t4 = _context2.sent;
|
|
182
|
-
_context2.next = 19;
|
|
183
|
-
return navy.url(_chalk2.default.dim('service'));
|
|
184
|
-
|
|
185
|
-
case 19:
|
|
186
|
-
_context2.t5 = _context2.sent;
|
|
187
|
-
return _context2.abrupt('return', [_context2.t0, _context2.t1, _context2.t2, _context2.t3, _context2.t4, _context2.t5]);
|
|
188
|
-
|
|
189
|
-
case 21:
|
|
190
|
-
case 'end':
|
|
191
|
-
return _context2.stop();
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
}, _callee2, _this);
|
|
195
|
-
}));
|
|
196
|
-
|
|
197
|
-
return function (_x3) {
|
|
198
|
-
return _ref3.apply(this, arguments);
|
|
199
|
-
};
|
|
200
|
-
}()));
|
|
201
|
-
|
|
202
|
-
case 17:
|
|
203
|
-
rows = _context3.sent;
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
console.log((0, _table2.default)([['NAME', 'ACTIVE', 'SERVICES', 'CONFIG PROVIDER', 'CONFIG LOCATION', 'URL']].concat((0, _toConsumableArray3.default)(rows))));
|
|
26
|
+
async function _default(opts) {
|
|
27
|
+
const navies = await (0, _.getLaunchedNavies)();
|
|
28
|
+
|
|
29
|
+
if (opts.json) {
|
|
30
|
+
return console.log(JSON.stringify(await Promise.all(navies.map(async navy => {
|
|
31
|
+
const ps = await navy.ps();
|
|
32
|
+
const state = await navy.getState();
|
|
33
|
+
const configProvider = await navy.getConfigProvider();
|
|
34
|
+
const isActive = ps.reduce((active, service) => active || service.status === 'running', false);
|
|
35
|
+
return {
|
|
36
|
+
name: navy.name,
|
|
37
|
+
isActive,
|
|
38
|
+
services: ps,
|
|
39
|
+
state,
|
|
40
|
+
configProvider: state.configProvider,
|
|
41
|
+
configLocation: await configProvider.getLocationDisplayName(),
|
|
42
|
+
url: await navy.url('[service]')
|
|
43
|
+
};
|
|
44
|
+
})), null, 2));
|
|
45
|
+
}
|
|
207
46
|
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
47
|
+
const config = await (0, _config.getConfig)();
|
|
48
|
+
const {
|
|
49
|
+
defaultNavy
|
|
50
|
+
} = config;
|
|
51
|
+
const rows = await Promise.all(navies.map(async navy => {
|
|
52
|
+
const ps = await navy.ps();
|
|
53
|
+
const state = await navy.getState();
|
|
54
|
+
const configProvider = await navy.getConfigProvider();
|
|
55
|
+
const isActive = ps.reduce((active, service) => active || service.status === 'running', false);
|
|
56
|
+
return [formatNavyName(navy, defaultNavy), isActive ? _chalk.default.green('yes') : _chalk.default.red('no'), ps.length.toString(), state.configProvider, await configProvider.getLocationDisplayName(), await navy.url(_chalk.default.dim('service'))];
|
|
214
57
|
}));
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
return _ref.apply(this, arguments);
|
|
218
|
-
};
|
|
219
|
-
}();
|
|
58
|
+
console.log((0, _table.default)([['NAME', 'ACTIVE', 'SERVICES', 'CONFIG PROVIDER', 'CONFIG LOCATION', 'URL'], ...rows]));
|
|
59
|
+
}
|
|
220
60
|
|
|
221
61
|
module.exports = exports.default;
|
package/lib/cli/updates.js
CHANGED
|
@@ -1,190 +1,98 @@
|
|
|
1
|
-
|
|
1
|
+
"use strict";
|
|
2
|
+
|
|
3
|
+
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
2
4
|
|
|
3
5
|
Object.defineProperty(exports, "__esModule", {
|
|
4
6
|
value: true
|
|
5
7
|
});
|
|
8
|
+
exports.default = _default;
|
|
6
9
|
|
|
7
|
-
var
|
|
8
|
-
|
|
9
|
-
var _regenerator2 = _interopRequireDefault(_regenerator);
|
|
10
|
-
|
|
11
|
-
var _promise = require('babel-runtime/core-js/promise');
|
|
12
|
-
|
|
13
|
-
var _promise2 = _interopRequireDefault(_promise);
|
|
14
|
-
|
|
15
|
-
var _toConsumableArray2 = require('babel-runtime/helpers/toConsumableArray');
|
|
16
|
-
|
|
17
|
-
var _toConsumableArray3 = _interopRequireDefault(_toConsumableArray2);
|
|
18
|
-
|
|
19
|
-
var _asyncToGenerator2 = require('babel-runtime/helpers/asyncToGenerator');
|
|
20
|
-
|
|
21
|
-
var _asyncToGenerator3 = _interopRequireDefault(_asyncToGenerator2);
|
|
22
|
-
|
|
23
|
-
var _chalk = require('chalk');
|
|
24
|
-
|
|
25
|
-
var _chalk2 = _interopRequireDefault(_chalk);
|
|
26
|
-
|
|
27
|
-
var _readline = require('readline');
|
|
10
|
+
var _chalk = _interopRequireDefault(require("chalk"));
|
|
28
11
|
|
|
29
|
-
var
|
|
12
|
+
var _readline = _interopRequireDefault(require("readline"));
|
|
30
13
|
|
|
31
|
-
var _cliSpinners = require(
|
|
14
|
+
var _cliSpinners = require("cli-spinners");
|
|
32
15
|
|
|
33
|
-
var _ = require(
|
|
16
|
+
var _ = require("../");
|
|
34
17
|
|
|
35
|
-
var _table = require(
|
|
18
|
+
var _table = _interopRequireDefault(require("../util/table"));
|
|
36
19
|
|
|
37
|
-
var
|
|
20
|
+
var _hasUpdate = _interopRequireDefault(require("../util/has-update"));
|
|
38
21
|
|
|
39
|
-
|
|
22
|
+
const debug = require('debug')('navy:updates');
|
|
40
23
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
|
|
44
|
-
|
|
45
|
-
var debug = require('debug')('navy:updates');
|
|
46
|
-
|
|
47
|
-
var spinnerIndex = 0;
|
|
48
|
-
var spinnerFrame = _cliSpinners.dots.frames[0];
|
|
24
|
+
let spinnerIndex = 0;
|
|
25
|
+
let spinnerFrame = _cliSpinners.dots.frames[0];
|
|
49
26
|
|
|
50
27
|
function renderStatus(status) {
|
|
51
28
|
if (status == null) {
|
|
52
|
-
return
|
|
29
|
+
return _chalk.default.yellow(spinnerFrame) + ' ' + _chalk.default.dim('Checking...');
|
|
53
30
|
} else if (status === true) {
|
|
54
|
-
return
|
|
31
|
+
return _chalk.default.yellow('• Update available');
|
|
55
32
|
} else if (status === 'UNKNOWN_REMOTE') {
|
|
56
|
-
return
|
|
33
|
+
return _chalk.default.red('• Not found');
|
|
57
34
|
} else if (status === 'UNKNOWN_ERROR') {
|
|
58
|
-
return
|
|
35
|
+
return _chalk.default.red('• Internal error');
|
|
59
36
|
} else if (status === 'NO_IMAGE') {
|
|
60
|
-
return
|
|
37
|
+
return _chalk.default.red('• No image for service');
|
|
61
38
|
} else {
|
|
62
|
-
return
|
|
39
|
+
return _chalk.default.green('✔ Up to date');
|
|
63
40
|
}
|
|
64
41
|
}
|
|
65
42
|
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
43
|
+
async function _default(opts) {
|
|
44
|
+
const navy = (0, _.getNavy)(opts.navy);
|
|
45
|
+
const navyFile = await navy.getNavyFile();
|
|
46
|
+
const ps = await navy.ps();
|
|
47
|
+
const updateStatus = {};
|
|
48
|
+
let drawnLines = 0;
|
|
49
|
+
|
|
50
|
+
function draw() {
|
|
51
|
+
drawnLines = 0;
|
|
52
|
+
const buffer = (0, _table.default)([['NAME', 'IMAGE', 'UPDATES'], ...ps.map(service => [service.name, service.image, renderStatus(updateStatus[service.id])])]);
|
|
53
|
+
drawnLines = buffer.split('\n').length;
|
|
54
|
+
console.log(buffer);
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
function redraw() {
|
|
58
|
+
_readline.default.clearLine(process.stdout, 0);
|
|
59
|
+
|
|
60
|
+
_readline.default.cursorTo(process.stdout, 0);
|
|
78
61
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
_readline2.default.clearLine(process.stdout, 0);
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
draw();
|
|
85
|
-
};
|
|
86
|
-
|
|
87
|
-
draw = function draw() {
|
|
88
|
-
drawnLines = 0;
|
|
89
|
-
|
|
90
|
-
var buffer = (0, _table2.default)([['NAME', 'IMAGE', 'UPDATES']].concat((0, _toConsumableArray3.default)(ps.map(function (service) {
|
|
91
|
-
return [service.name, service.image, renderStatus(updateStatus[service.id])];
|
|
92
|
-
}))));
|
|
93
|
-
|
|
94
|
-
drawnLines = buffer.split('\n').length;
|
|
95
|
-
console.log(buffer);
|
|
96
|
-
};
|
|
97
|
-
|
|
98
|
-
navy = (0, _.getNavy)(opts.navy);
|
|
99
|
-
_context2.next = 5;
|
|
100
|
-
return navy.getNavyFile();
|
|
101
|
-
|
|
102
|
-
case 5:
|
|
103
|
-
navyFile = _context2.sent;
|
|
104
|
-
_context2.next = 8;
|
|
105
|
-
return navy.ps();
|
|
106
|
-
|
|
107
|
-
case 8:
|
|
108
|
-
ps = _context2.sent;
|
|
109
|
-
updateStatus = {};
|
|
110
|
-
drawnLines = 0;
|
|
111
|
-
spinner = setInterval(function () {
|
|
112
|
-
spinnerIndex++;
|
|
113
|
-
|
|
114
|
-
if (spinnerIndex >= _cliSpinners.dots.frames.length) {
|
|
115
|
-
spinnerIndex = 0;
|
|
116
|
-
}
|
|
117
|
-
|
|
118
|
-
spinnerFrame = _cliSpinners.dots.frames[spinnerIndex];
|
|
119
|
-
|
|
120
|
-
redraw();
|
|
121
|
-
}, _cliSpinners.dots.interval);
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
draw();
|
|
125
|
-
|
|
126
|
-
_context2.next = 15;
|
|
127
|
-
return _promise2.default.all(ps.map(function () {
|
|
128
|
-
var _ref2 = (0, _asyncToGenerator3.default)( /*#__PURE__*/_regenerator2.default.mark(function _callee(service) {
|
|
129
|
-
return _regenerator2.default.wrap(function _callee$(_context) {
|
|
130
|
-
while (1) {
|
|
131
|
-
switch (_context.prev = _context.next) {
|
|
132
|
-
case 0:
|
|
133
|
-
_context.prev = 0;
|
|
134
|
-
|
|
135
|
-
if (!(!service || !service.raw || !service.raw.Image)) {
|
|
136
|
-
_context.next = 3;
|
|
137
|
-
break;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
return _context.abrupt('return', updateStatus[service.id] = 'NO_IMAGE');
|
|
141
|
-
|
|
142
|
-
case 3:
|
|
143
|
-
_context.next = 5;
|
|
144
|
-
return (0, _hasUpdate2.default)(service.image, service.raw.Image, navyFile);
|
|
145
|
-
|
|
146
|
-
case 5:
|
|
147
|
-
updateStatus[service.id] = _context.sent;
|
|
148
|
-
_context.next = 12;
|
|
149
|
-
break;
|
|
150
|
-
|
|
151
|
-
case 8:
|
|
152
|
-
_context.prev = 8;
|
|
153
|
-
_context.t0 = _context['catch'](0);
|
|
154
|
-
|
|
155
|
-
debug('Error checking update for', service.name, _context.t0.stack || _context.t0.message);
|
|
156
|
-
updateStatus[service.id] = 'UNKNOWN_ERROR';
|
|
157
|
-
|
|
158
|
-
case 12:
|
|
159
|
-
case 'end':
|
|
160
|
-
return _context.stop();
|
|
161
|
-
}
|
|
162
|
-
}
|
|
163
|
-
}, _callee, _this, [[0, 8]]);
|
|
164
|
-
}));
|
|
165
|
-
|
|
166
|
-
return function (_x2) {
|
|
167
|
-
return _ref2.apply(this, arguments);
|
|
168
|
-
};
|
|
169
|
-
}()));
|
|
170
|
-
|
|
171
|
-
case 15:
|
|
172
|
-
|
|
173
|
-
redraw();
|
|
62
|
+
for (let i = 0; i < drawnLines; i++) {
|
|
63
|
+
_readline.default.moveCursor(process.stdout, 0, -1);
|
|
174
64
|
|
|
175
|
-
|
|
65
|
+
_readline.default.clearLine(process.stdout, 0);
|
|
66
|
+
}
|
|
176
67
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
68
|
+
draw();
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
const spinner = setInterval(() => {
|
|
72
|
+
spinnerIndex++;
|
|
73
|
+
|
|
74
|
+
if (spinnerIndex >= _cliSpinners.dots.frames.length) {
|
|
75
|
+
spinnerIndex = 0;
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
spinnerFrame = _cliSpinners.dots.frames[spinnerIndex];
|
|
79
|
+
redraw();
|
|
80
|
+
}, _cliSpinners.dots.interval);
|
|
81
|
+
draw();
|
|
82
|
+
await Promise.all(ps.map(async service => {
|
|
83
|
+
try {
|
|
84
|
+
if (!service || !service.raw || !service.raw.Image) {
|
|
85
|
+
return updateStatus[service.id] = 'NO_IMAGE';
|
|
181
86
|
}
|
|
182
|
-
}, _callee2, this);
|
|
183
|
-
}));
|
|
184
87
|
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
88
|
+
updateStatus[service.id] = await (0, _hasUpdate.default)(service.image, service.raw.Image, navyFile);
|
|
89
|
+
} catch (ex) {
|
|
90
|
+
debug('Error checking update for', service.name, ex.stack || ex.message);
|
|
91
|
+
updateStatus[service.id] = 'UNKNOWN_ERROR';
|
|
92
|
+
}
|
|
93
|
+
}));
|
|
94
|
+
redraw();
|
|
95
|
+
clearInterval(spinner);
|
|
96
|
+
}
|
|
189
97
|
|
|
190
98
|
module.exports = exports.default;
|