1 | #!/usr/bin/env node
|
2 |
|
3 | const program = require('commander'),
|
4 | fs = require('fs'),
|
5 | { performance } = require('perf_hooks'),
|
6 | ora = require('ora'),
|
7 | validate = require('./lib/validators'),
|
8 | Gateway = require('./lib/proxy'),
|
9 | ServerError = require('./lib/ServerError'),
|
10 | logger = require('./lib/logger'),
|
11 | version = require('./package.json').version;
|
12 |
|
13 | const checkParams = params => {
|
14 | validate.existence({ argumentValue: params.token, argumentName: 'token', fail: program.help.bind(program) });
|
15 | validate.existence({ argumentValue: params.url, argumentName: 'url', fail: program.help.bind(program) });
|
16 |
|
17 | if (params.url.slice(-1) != '/') {
|
18 | params.url = params.url + '/';
|
19 | }
|
20 | };
|
21 |
|
22 | program
|
23 | .version(version)
|
24 | .option('--email <email>', 'developer email', process.env.MARKETPLACE_EMAIL)
|
25 | .option('--token <token>', 'authentication token', process.env.MARKETPLACE_TOKEN)
|
26 | .option('--url <url>', 'marketplace url', process.env.MARKETPLACE_URL);
|
27 |
|
28 | program.parse(process.argv);
|
29 |
|
30 | checkParams(program);
|
31 |
|
32 | const formatMMSS = s => (s - (s %= 60)) / 60 + (9 < s ? ':' : ':0') + s;
|
33 | const duration = (t0, t1) => {
|
34 | const duration = Math.round((t1 - t0) / 1000);
|
35 | return formatMMSS(duration);
|
36 | };
|
37 |
|
38 | const t0 = performance.now();
|
39 |
|
40 | const spinner = ora({ text: `Deploying to: ${program.url}`, stream: process.stdout, spinner: 'bouncingBar' }).start();
|
41 |
|
42 | const gateway = new Gateway(program);
|
43 |
|
44 | const formData = {
|
45 | 'marketplace_builder[force_mode]': process.env.FORCE || 'false',
|
46 | 'marketplace_builder[partial_deploy]': process.env.PARTIAL_DEPLOY || 'false',
|
47 | 'marketplace_builder[zip_file]': fs.createReadStream('./tmp/marketplace-release.zip')
|
48 | };
|
49 |
|
50 | const getDeploymentStatus = id => {
|
51 | return new Promise((resolve, reject) => {
|
52 | (getStatus = () => {
|
53 | gateway.getStatus(id).then(response => {
|
54 | if (response.status === 'ready_for_import') {
|
55 | setTimeout(getStatus, 1500);
|
56 | } else if (response.status === 'error') {
|
57 | const t1 = performance.now();
|
58 | ServerError.deploy(JSON.parse(response.error));
|
59 | spinner.fail(`Deploy failed after ${duration(t0, t1)}`);
|
60 | reject();
|
61 | } else {
|
62 | resolve(response);
|
63 | }
|
64 | });
|
65 | })();
|
66 | });
|
67 | };
|
68 |
|
69 | gateway
|
70 | .push(formData)
|
71 | .then(response => {
|
72 | getDeploymentStatus(response.id).then(() => {
|
73 | const t1 = performance.now();
|
74 | spinner.stopAndPersist().succeed(`Deploy succeeded after ${duration(t0, t1)}`);
|
75 | }).catch(() => process.exit(1));
|
76 | })
|
77 | .catch(() => {
|
78 | spinner.stopAndPersist().fail('Deploy failed');
|
79 | process.exit(1);
|
80 | });
|