UNPKG

2.46 kBJavaScriptView Raw
1#!/usr/bin/env node
2
3const 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
13const 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
22program
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
28program.parse(process.argv);
29
30checkParams(program);
31
32const formatMMSS = s => (s - (s %= 60)) / 60 + (9 < s ? ':' : ':0') + s;
33const duration = (t0, t1) => {
34 const duration = Math.round((t1 - t0) / 1000);
35 return formatMMSS(duration);
36};
37
38const t0 = performance.now();
39
40const spinner = ora({ text: `Deploying to: ${program.url}`, stream: process.stdout, spinner: 'bouncingBar' }).start();
41
42const gateway = new Gateway(program);
43
44const 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
50const 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 ServerError.deploy(JSON.parse(response.error));
58 reject();
59 } else {
60 resolve();
61 }
62 });
63 })();
64 });
65};
66
67gateway
68 .push(formData)
69 .then(getDeploymentStatus)
70 .then(() => {
71 const t1 = performance.now();
72 spinner.stopAndPersist().succeed(`Deploy succeeded after ${duration(t0, t1)}`);
73 })
74 .catch((error) => {
75 const t1 = performance.now();
76 logger.Error(error);
77 spinner.fail(`Deploy failed after ${duration(t0, t1)}`);
78 process.exit(1);
79 });