cloudron 4.12.7 → 4.13.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/bin/cloudron +24 -29
- package/bin/cloudron-appstore +0 -1
- package/bin/cloudron-backup +0 -1
- package/bin/cloudron-env +0 -1
- package/package.json +11 -14
- package/src/actions.js +766 -1005
- package/src/appstore-actions.js +38 -40
- package/src/build-actions.js +22 -22
- package/src/completion.js +0 -2
- package/src/helper.js +2 -2
- package/src/templates/Dockerfile.ejs +1 -1
package/src/appstore-actions.js
CHANGED
|
@@ -15,8 +15,6 @@ var superagent = require('superagent'),
|
|
|
15
15
|
exit = helper.exit,
|
|
16
16
|
manifestFormat = require('cloudron-manifestformat');
|
|
17
17
|
|
|
18
|
-
require('colors');
|
|
19
|
-
|
|
20
18
|
exports = module.exports = {
|
|
21
19
|
login: login,
|
|
22
20
|
logout: logout,
|
|
@@ -67,7 +65,7 @@ function superagentEnd(requestFactory, callback) {
|
|
|
67
65
|
function authenticate(options, callback) {
|
|
68
66
|
if (!options.hideBanner) {
|
|
69
67
|
const webDomain = config.appStoreOrigin().replace('https://api.', '');
|
|
70
|
-
console.log(`${webDomain} login
|
|
68
|
+
console.log(`${webDomain} login` + ` (If you do not have one, sign up at https://${webDomain}/console.html#/register)`);
|
|
71
69
|
}
|
|
72
70
|
|
|
73
71
|
var email = options.email || readlineSync.question('Email: ', {});
|
|
@@ -79,7 +77,7 @@ function authenticate(options, callback) {
|
|
|
79
77
|
if (error && !error.response) exit(error);
|
|
80
78
|
|
|
81
79
|
if (result.statusCode === 401 && result.body.message.indexOf('TOTP') !== -1) {
|
|
82
|
-
if (result.body.message === 'TOTP token missing') console.log('A 2FA TOTP Token is required for this account.'
|
|
80
|
+
if (result.body.message === 'TOTP token missing') console.log('A 2FA TOTP Token is required for this account.');
|
|
83
81
|
|
|
84
82
|
options.totpToken = readlineSync.question('2FA token: ', {});
|
|
85
83
|
options.email = email;
|
|
@@ -90,7 +88,7 @@ function authenticate(options, callback) {
|
|
|
90
88
|
}
|
|
91
89
|
|
|
92
90
|
if (result.statusCode !== 200) {
|
|
93
|
-
console.log('Login failed.'
|
|
91
|
+
console.log('Login failed.');
|
|
94
92
|
|
|
95
93
|
options.hideBanner = true;
|
|
96
94
|
options.email = '';
|
|
@@ -101,7 +99,7 @@ function authenticate(options, callback) {
|
|
|
101
99
|
|
|
102
100
|
config.setAppStoreToken(result.body.accessToken);
|
|
103
101
|
|
|
104
|
-
console.log('Login successful.'
|
|
102
|
+
console.log('Login successful.');
|
|
105
103
|
|
|
106
104
|
if (typeof callback === 'function') callback();
|
|
107
105
|
});
|
|
@@ -113,7 +111,7 @@ function login(options) {
|
|
|
113
111
|
|
|
114
112
|
function logout() {
|
|
115
113
|
config.setAppStoreToken(null);
|
|
116
|
-
console.log('Done.'
|
|
114
|
+
console.log('Done.');
|
|
117
115
|
}
|
|
118
116
|
|
|
119
117
|
function info(options) {
|
|
@@ -123,16 +121,16 @@ function info(options) {
|
|
|
123
121
|
superagentEnd(function () {
|
|
124
122
|
return superagent.get(createUrl('/api/v1/developers/apps/' + id + '/versions/' + version)).query({ accessToken: config.appStoreToken() });
|
|
125
123
|
}, function (error, result) {
|
|
126
|
-
if (error && !error.response) exit(util.format('Failed to list apps: %s', error.message
|
|
124
|
+
if (error && !error.response) exit(util.format('Failed to list apps: %s', error.message));
|
|
127
125
|
if (result.statusCode !== 200) exit(util.format('Failed to list apps: %s message: %s', result.statusCode, result.text));
|
|
128
126
|
|
|
129
127
|
var manifest = result.body.manifest;
|
|
130
|
-
console.log('id: %s', manifest.id
|
|
131
|
-
console.log('title: %s', manifest.title
|
|
132
|
-
console.log('tagline: %s', manifest.tagline
|
|
133
|
-
console.log('description: %s', manifest.description
|
|
134
|
-
console.log('website: %s', manifest.website
|
|
135
|
-
console.log('contactEmail: %s', manifest.contactEmail
|
|
128
|
+
console.log('id: %s', manifest.id);
|
|
129
|
+
console.log('title: %s', manifest.title);
|
|
130
|
+
console.log('tagline: %s', manifest.tagline);
|
|
131
|
+
console.log('description: %s', manifest.description);
|
|
132
|
+
console.log('website: %s', manifest.website);
|
|
133
|
+
console.log('contactEmail: %s', manifest.contactEmail);
|
|
136
134
|
});
|
|
137
135
|
});
|
|
138
136
|
}
|
|
@@ -146,7 +144,7 @@ function listVersions(options) {
|
|
|
146
144
|
superagentEnd(function () {
|
|
147
145
|
return superagent.get(createUrl('/api/v1/developers/apps/' + id + '/versions')).query({ accessToken: config.appStoreToken() });
|
|
148
146
|
}, function (error, result) {
|
|
149
|
-
if (error && !error.response) exit(util.format('Failed to list versions: %s', error.message
|
|
147
|
+
if (error && !error.response) exit(util.format('Failed to list versions: %s', error.message));
|
|
150
148
|
if (result.statusCode === 404) exit('This app is not listed in appstore');
|
|
151
149
|
if (result.statusCode !== 200) exit(util.format('Failed to list versions: %s message: %s', result.statusCode, result.text));
|
|
152
150
|
|
|
@@ -183,13 +181,13 @@ function addApp(manifest, baseDir, callback) {
|
|
|
183
181
|
.query({ accessToken: config.appStoreToken() })
|
|
184
182
|
.send({ id: manifest.id });
|
|
185
183
|
}, function (error, result) {
|
|
186
|
-
if (error && !error.response) return exit(util.format('Failed to create app: %s', error.message
|
|
184
|
+
if (error && !error.response) return exit(util.format('Failed to create app: %s', error.message));
|
|
187
185
|
if (result.statusCode !== 201 && result.statusCode !== 409) {
|
|
188
186
|
return exit(util.format('Failed to create app: %s message: %s', result.statusCode, result.text));
|
|
189
187
|
}
|
|
190
188
|
|
|
191
189
|
if (result.statusCode === 201) {
|
|
192
|
-
console.log('New application added to the appstore with id %s.'
|
|
190
|
+
console.log('New application added to the appstore with id %s.', manifest.id);
|
|
193
191
|
}
|
|
194
192
|
|
|
195
193
|
callback();
|
|
@@ -263,7 +261,7 @@ function addVersion(manifest, baseDir, callback) {
|
|
|
263
261
|
}, function (error, result) {
|
|
264
262
|
if (error && !error.response) return callback(new Error(util.format('Failed to publish version: %s', error.message)));
|
|
265
263
|
if (result.statusCode === 409) return callback('This version already exists. Use --force to overwrite.');
|
|
266
|
-
if (result.statusCode !== 204) return callback(new Error(util.format('Failed to publish version (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message
|
|
264
|
+
if (result.statusCode !== 204) return callback(new Error(util.format('Failed to publish version (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message : result.text)));
|
|
267
265
|
|
|
268
266
|
callback();
|
|
269
267
|
});
|
|
@@ -312,7 +310,7 @@ function updateVersion(manifest, baseDir, callback) {
|
|
|
312
310
|
}, function (error, result) {
|
|
313
311
|
if (error && !error.response) return callback(new Error(util.format('Failed to publish version: %s', error.message)));
|
|
314
312
|
if (result.statusCode !== 204) {
|
|
315
|
-
return callback(new Error(util.format('Failed to publish version (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message
|
|
313
|
+
return callback(new Error(util.format('Failed to publish version (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message : result.text)));
|
|
316
314
|
}
|
|
317
315
|
|
|
318
316
|
callback();
|
|
@@ -324,7 +322,7 @@ function delVersion(manifest, force) {
|
|
|
324
322
|
assert(typeof force === 'boolean');
|
|
325
323
|
|
|
326
324
|
if (!force) {
|
|
327
|
-
console.log('This will delete the version %s of app %s from the appstore!'
|
|
325
|
+
console.log('This will delete the version %s of app %s from the appstore!', manifest.version, manifest.id);
|
|
328
326
|
var reallyDelete = readlineSync.question(util.format('Really do this? [y/N]: '), {});
|
|
329
327
|
if (reallyDelete.toUpperCase() !== 'Y') exit();
|
|
330
328
|
}
|
|
@@ -332,10 +330,10 @@ function delVersion(manifest, force) {
|
|
|
332
330
|
superagentEnd(function () {
|
|
333
331
|
return superagent.del(createUrl('/api/v1/developers/apps/' + manifest.id + '/versions/' + manifest.version)).query({ accessToken: config.appStoreToken() });
|
|
334
332
|
}, function (error, result) {
|
|
335
|
-
if (error && !error.response) return exit(util.format('Failed to unpublish version: %s', error.message
|
|
336
|
-
if (result.statusCode !== 204) exit(util.format('Failed to unpublish version (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message
|
|
333
|
+
if (error && !error.response) return exit(util.format('Failed to unpublish version: %s', error.message));
|
|
334
|
+
if (result.statusCode !== 204) exit(util.format('Failed to unpublish version (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message : result.text));
|
|
337
335
|
|
|
338
|
-
console.log('version unpublished.'
|
|
336
|
+
console.log('version unpublished.');
|
|
339
337
|
});
|
|
340
338
|
}
|
|
341
339
|
|
|
@@ -348,10 +346,10 @@ function revokeVersion(appstoreId, version) {
|
|
|
348
346
|
.query({ accessToken: config.appStoreToken() })
|
|
349
347
|
.send({ });
|
|
350
348
|
}, function (error, result) {
|
|
351
|
-
if (error && !error.response) return exit(util.format('Failed to revoke version: %s', error.message
|
|
352
|
-
if (result.statusCode !== 200) exit(util.format('Failed to revoke version (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message
|
|
349
|
+
if (error && !error.response) return exit(util.format('Failed to revoke version: %s', error.message));
|
|
350
|
+
if (result.statusCode !== 200) exit(util.format('Failed to revoke version (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message : result.text));
|
|
353
351
|
|
|
354
|
-
console.log('version revoked.'
|
|
352
|
+
console.log('version revoked.');
|
|
355
353
|
});
|
|
356
354
|
}
|
|
357
355
|
|
|
@@ -364,10 +362,10 @@ function approveVersion(appstoreId, version) {
|
|
|
364
362
|
.query({ accessToken: config.appStoreToken() })
|
|
365
363
|
.send({ });
|
|
366
364
|
}, function (error, result) {
|
|
367
|
-
if (error && !error.response) return exit(util.format('Failed to approve version: %s', error.message
|
|
368
|
-
if (result.statusCode !== 200) exit(util.format('Failed to approve version (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message
|
|
365
|
+
if (error && !error.response) return exit(util.format('Failed to approve version: %s', error.message));
|
|
366
|
+
if (result.statusCode !== 200) exit(util.format('Failed to approve version (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message : result.text));
|
|
369
367
|
|
|
370
|
-
console.log('Approved.'
|
|
368
|
+
console.log('Approved.');
|
|
371
369
|
console.log('');
|
|
372
370
|
});
|
|
373
371
|
}
|
|
@@ -378,7 +376,7 @@ function delApp(appId, force) {
|
|
|
378
376
|
assert(typeof force === 'boolean');
|
|
379
377
|
|
|
380
378
|
if (!force) {
|
|
381
|
-
console.log('This will delete app %s from the appstore!'
|
|
379
|
+
console.log('This will delete app %s from the appstore!', appId);
|
|
382
380
|
var reallyDelete = readlineSync.question(util.format('Really do this? [y/N]: '), {});
|
|
383
381
|
if (reallyDelete.toUpperCase() !== 'Y') exit();
|
|
384
382
|
}
|
|
@@ -386,10 +384,10 @@ function delApp(appId, force) {
|
|
|
386
384
|
superagentEnd(function () {
|
|
387
385
|
return superagent.del(createUrl('/api/v1/developers/apps/' + appId)).query({ accessToken: config.appStoreToken() });
|
|
388
386
|
}, function (error, result) {
|
|
389
|
-
if (error && !error.response) return exit(util.format('Failed to unpublish app: %s', error.message
|
|
390
|
-
if (result.statusCode !== 204) exit(util.format('Failed to unpublish app (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message
|
|
387
|
+
if (error && !error.response) return exit(util.format('Failed to unpublish app: %s', error.message));
|
|
388
|
+
if (result.statusCode !== 204) exit(util.format('Failed to unpublish app (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message : result.text));
|
|
391
389
|
|
|
392
|
-
console.log('App unpublished.'
|
|
390
|
+
console.log('App unpublished.');
|
|
393
391
|
});
|
|
394
392
|
}
|
|
395
393
|
|
|
@@ -402,14 +400,14 @@ function submitAppForReview(manifest, callback) {
|
|
|
402
400
|
.query({ accessToken: config.appStoreToken() })
|
|
403
401
|
.send({ });
|
|
404
402
|
}, function (error, result) {
|
|
405
|
-
if (error && !error.response) exit(util.format('Failed to submit app for review: %s', error.message
|
|
403
|
+
if (error && !error.response) exit(util.format('Failed to submit app for review: %s', error.message));
|
|
406
404
|
if (result.statusCode === 404) {
|
|
407
|
-
console.log('No version %s found. Please use %s first.', manifest.version
|
|
408
|
-
exit('Failed to submit app for review.'
|
|
405
|
+
console.log('No version %s found. Please use %s first.', manifest.version, 'cloudron appstore upload');
|
|
406
|
+
exit('Failed to submit app for review.');
|
|
409
407
|
}
|
|
410
|
-
if (result.statusCode !== 200) return exit(util.format('Failed to submit app (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message
|
|
408
|
+
if (result.statusCode !== 200) return exit(util.format('Failed to submit app (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message : result.text));
|
|
411
409
|
|
|
412
|
-
console.log('App submitted for review.'
|
|
410
|
+
console.log('App submitted for review.');
|
|
413
411
|
console.log('You will receive an email when approved.');
|
|
414
412
|
|
|
415
413
|
callback();
|
|
@@ -520,8 +518,8 @@ function listPublishedApps(options) {
|
|
|
520
518
|
.query({ accessToken: config.appStoreToken() })
|
|
521
519
|
.send({ });
|
|
522
520
|
}, function (error, result) {
|
|
523
|
-
if (error && !error.response) return exit(util.format('Failed to get list of published apps: %s', error.message
|
|
524
|
-
if (result.statusCode !== 200) return exit(util.format('Failed to get list of published apps (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message
|
|
521
|
+
if (error && !error.response) return exit(util.format('Failed to get list of published apps: %s', error.message));
|
|
522
|
+
if (result.statusCode !== 200) return exit(util.format('Failed to get list of published apps (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message : result.text));
|
|
525
523
|
|
|
526
524
|
if (result.body.apps.length === 0) return console.log('No apps published.');
|
|
527
525
|
|
package/src/build-actions.js
CHANGED
|
@@ -43,7 +43,7 @@ function authenticateBuildService(options, callback) {
|
|
|
43
43
|
|
|
44
44
|
var buildServiceConfig = config.getBuildServiceConfig();
|
|
45
45
|
|
|
46
|
-
if (!options.hideBanner) console.log('Build Service login'
|
|
46
|
+
if (!options.hideBanner) console.log('Build Service login' + ` (${buildServiceConfig.url}):`);
|
|
47
47
|
|
|
48
48
|
var username = options.username || readlineSync.question('Username: ', {});
|
|
49
49
|
var password = options.password || readlineSync.question('Password: ', { noEchoBack: true });
|
|
@@ -56,7 +56,7 @@ function authenticateBuildService(options, callback) {
|
|
|
56
56
|
if (error && !error.response) exit(error);
|
|
57
57
|
|
|
58
58
|
if (result.statusCode !== 200 && result.statusCode !== 201) {
|
|
59
|
-
console.log('Login failed.'
|
|
59
|
+
console.log('Login failed.');
|
|
60
60
|
|
|
61
61
|
options.hideBanner = true;
|
|
62
62
|
options.username = '';
|
|
@@ -68,7 +68,7 @@ function authenticateBuildService(options, callback) {
|
|
|
68
68
|
buildServiceConfig.token = result.body.accessToken;
|
|
69
69
|
config.setBuildServiceConfig(buildServiceConfig);
|
|
70
70
|
|
|
71
|
-
console.log('Login successful.'
|
|
71
|
+
console.log('Login successful.');
|
|
72
72
|
|
|
73
73
|
if (typeof callback === 'function') callback();
|
|
74
74
|
});
|
|
@@ -120,11 +120,11 @@ function followBuildLog(buildId, raw, callback) {
|
|
|
120
120
|
if (data.stream) { // build log
|
|
121
121
|
process.stdout.write(data.stream);
|
|
122
122
|
} else if (data.message) {
|
|
123
|
-
console.log(data.message
|
|
123
|
+
console.log(data.message);
|
|
124
124
|
} else if (data.errorDetail) {
|
|
125
|
-
console.log(data.errorDetail.message ? data.errorDetail.message
|
|
125
|
+
console.log(data.errorDetail.message ? data.errorDetail.message : data.errorDetail);
|
|
126
126
|
} else if (typeof data.error === 'string') {
|
|
127
|
-
console.log(data.error
|
|
127
|
+
console.log(data.error);
|
|
128
128
|
} else if (data.error) {
|
|
129
129
|
console.error(data.error);
|
|
130
130
|
}
|
|
@@ -188,16 +188,16 @@ function buildLocal(manifest, sourceDir, appConfig, options) {
|
|
|
188
188
|
|
|
189
189
|
if (options.push) {
|
|
190
190
|
console.log();
|
|
191
|
-
console.log(`Pushing ${dockerImage}
|
|
191
|
+
console.log(`Pushing ${dockerImage}`);
|
|
192
192
|
|
|
193
193
|
safe.child_process.execSync(`docker push ${dockerImage}`, { stdio: 'inherit' });
|
|
194
|
-
if (safe.error) exit('Failed to push image (are you logged in? if not, use "docker login")'
|
|
194
|
+
if (safe.error) exit('Failed to push image (are you logged in? if not, use "docker login")');
|
|
195
195
|
}
|
|
196
196
|
|
|
197
197
|
let result = safe.child_process.execSync(`docker inspect --format="{{index .RepoDigests 0}}" ${dockerImage}`, { encoding: 'utf8' });
|
|
198
|
-
if (safe.error) exit('Failed to inspect image'
|
|
198
|
+
if (safe.error) exit('Failed to inspect image');
|
|
199
199
|
let match = /.*@sha256:(.*)/.exec(result.trim());
|
|
200
|
-
if (!match) exit('Failed to detect sha256'
|
|
200
|
+
if (!match) exit('Failed to detect sha256');
|
|
201
201
|
|
|
202
202
|
appConfig.dockerImage = `${dockerImage}`;
|
|
203
203
|
appConfig.dockerImageSha256 = match[1]; // stash this separately for now
|
|
@@ -205,7 +205,7 @@ function buildLocal(manifest, sourceDir, appConfig, options) {
|
|
|
205
205
|
}
|
|
206
206
|
|
|
207
207
|
function buildRemote(manifest, sourceDir, appConfig, options) {
|
|
208
|
-
console.log('Using build service', config.getBuildServiceConfig().url
|
|
208
|
+
console.log('Using build service', config.getBuildServiceConfig().url);
|
|
209
209
|
|
|
210
210
|
let tag;
|
|
211
211
|
if (options.tag) {
|
|
@@ -219,7 +219,7 @@ function buildRemote(manifest, sourceDir, appConfig, options) {
|
|
|
219
219
|
|
|
220
220
|
const dockerImage = `${appConfig.repository}:${tag}`;
|
|
221
221
|
|
|
222
|
-
console.log('Building %s', dockerImage
|
|
222
|
+
console.log('Building %s', dockerImage);
|
|
223
223
|
|
|
224
224
|
var sourceArchiveFilePath = path.join(os.tmpdir(), path.basename(sourceDir) + '.tar.gz');
|
|
225
225
|
var dockerignoreFilePath = path.join(sourceDir, '.dockerignore');
|
|
@@ -259,9 +259,9 @@ function buildRemote(manifest, sourceDir, appConfig, options) {
|
|
|
259
259
|
.field('buildArgs', JSON.stringify(buildArgsObject))
|
|
260
260
|
.attach('sourceArchive', sourceArchiveFilePath);
|
|
261
261
|
}, function (error, result) {
|
|
262
|
-
if (error && !error.response) return exit(util.format('Failed to build app: %s', error.message
|
|
263
|
-
if (result.statusCode === 413) exit('Failed to build app. The app source is too large.\nPlease adjust your .dockerignore file to only include neccessary files.'
|
|
264
|
-
if (result.statusCode !== 201) exit(util.format('Failed to build app (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message
|
|
262
|
+
if (error && !error.response) return exit(util.format('Failed to build app: %s', error.message));
|
|
263
|
+
if (result.statusCode === 413) exit('Failed to build app. The app source is too large.\nPlease adjust your .dockerignore file to only include neccessary files.');
|
|
264
|
+
if (result.statusCode !== 201) exit(util.format('Failed to build app (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message : result.text));
|
|
265
265
|
|
|
266
266
|
var buildId = result.body.id;
|
|
267
267
|
|
|
@@ -273,16 +273,16 @@ function buildRemote(manifest, sourceDir, appConfig, options) {
|
|
|
273
273
|
return superagent.get(`${buildServiceConfig.url}/api/v1/builds/${buildId}`)
|
|
274
274
|
.query({ accessToken: buildServiceConfig.token });
|
|
275
275
|
}, function (error, result) {
|
|
276
|
-
if (error && !error.response) return exit(util.format('Failed to build app: %s', error.message
|
|
277
|
-
if (result.statusCode !== 200) exit(util.format('Failed to build app (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message
|
|
278
|
-
if (result.body.status !== 'success') exit('Failed to build app. See log output above.'
|
|
276
|
+
if (error && !error.response) return exit(util.format('Failed to build app: %s', error.message));
|
|
277
|
+
if (result.statusCode !== 200) exit(util.format('Failed to build app (statusCode %s): \n%s', result.statusCode, result.body && result.body.message ? result.body.message : result.text));
|
|
278
|
+
if (result.body.status !== 'success') exit('Failed to build app. See log output above.');
|
|
279
279
|
|
|
280
280
|
appConfig.dockerImage = dockerImage;
|
|
281
281
|
// appConfig.dockerImageSha256 = match[1]; // stash this separately for now
|
|
282
282
|
config.setAppConfig(sourceDir, appConfig);
|
|
283
283
|
|
|
284
|
-
console.log(dockerImage
|
|
285
|
-
console.log('\nBuild successful'
|
|
284
|
+
console.log(dockerImage);
|
|
285
|
+
console.log('\nBuild successful');
|
|
286
286
|
|
|
287
287
|
exit();
|
|
288
288
|
});
|
|
@@ -299,7 +299,7 @@ function build(options) {
|
|
|
299
299
|
if (!manifestFilePath) return exit('No CloudronManifest.json found');
|
|
300
300
|
|
|
301
301
|
const result = manifestFormat.parseFile(manifestFilePath);
|
|
302
|
-
if (result.error) return exit('Error in CloudronManifest.json: ' + result.error.message
|
|
302
|
+
if (result.error) return exit('Error in CloudronManifest.json: ' + result.error.message);
|
|
303
303
|
|
|
304
304
|
let manifest = result.manifest;
|
|
305
305
|
const sourceDir = path.dirname(manifestFilePath);
|
|
@@ -336,7 +336,7 @@ function build(options) {
|
|
|
336
336
|
if (typeof options.setRepository === 'string') {
|
|
337
337
|
repository = options.setRepository;
|
|
338
338
|
} else {
|
|
339
|
-
repository = readlineSync.question(`Enter repository (e.g registry/username/${manifest.id || path.basename(sourceDir)}): `, {});
|
|
339
|
+
repository = readlineSync.question(`Enter docker repository (e.g registry/username/${manifest.id || path.basename(sourceDir)}): `, {});
|
|
340
340
|
if (!repository) exit('No repository provided');
|
|
341
341
|
console.log();
|
|
342
342
|
}
|
package/src/completion.js
CHANGED
package/src/helper.js
CHANGED
|
@@ -14,8 +14,8 @@ exports = module.exports = {
|
|
|
14
14
|
};
|
|
15
15
|
|
|
16
16
|
function exit(error) {
|
|
17
|
-
if (error instanceof Error) console.log(error.message
|
|
18
|
-
else if (error) console.log(util.format.apply(null, Array.prototype.slice.call(arguments))
|
|
17
|
+
if (error instanceof Error) console.log(error.message);
|
|
18
|
+
else if (error) console.log(util.format.apply(null, Array.prototype.slice.call(arguments)));
|
|
19
19
|
|
|
20
20
|
process.exit(error ? 1 : 0);
|
|
21
21
|
}
|