1 | #!/usr/bin/env node
|
2 |
|
3 | const program = require('commander'),
|
4 | fetchAuthData = require('./lib/settings').fetchSettings,
|
5 | spawn = require('child_process').spawn,
|
6 | ora = require('ora'),
|
7 | command = require('./lib/command'),
|
8 | logger = require('./lib/logger'),
|
9 | Gateway = require('./lib/proxy'),
|
10 | assets = require('./lib/assets'),
|
11 | version = require('./package.json').version;
|
12 |
|
13 | const uploadArchive = (env, usingDeploymentService) => {
|
14 | const options = usingDeploymentService ? ['--without-assets'] : [];
|
15 | return new Promise((resolve, reject) => {
|
16 | const archive = spawn(command('marketplace-kit-archive'), options, {
|
17 | stdio: 'inherit'
|
18 | });
|
19 |
|
20 | archive.on('close', code => {
|
21 | if (code === 1) {
|
22 | logger.Error('Deploy failed.');
|
23 | reject(e);
|
24 | }
|
25 |
|
26 | const push = spawn(command('marketplace-kit-push'), [], {
|
27 | stdio: 'inherit',
|
28 | env: env
|
29 | });
|
30 |
|
31 | push.on('close', (exitCode) => {
|
32 | if (exitCode === 1) {
|
33 | logger.Error('Deploy failed.');
|
34 | reject(false);
|
35 | } else if(exitCode === 0) {
|
36 | resolve(true);
|
37 | }
|
38 | });
|
39 | });
|
40 | });
|
41 | };
|
42 |
|
43 | const deploy = async(env, authData, params) => {
|
44 | await uploadArchive(env, params.directAssetsUpload);
|
45 | if (params.directAssetsUpload){
|
46 | const spinner = ora({ text: 'Uploading assets', stream: process.stdout, spinner: 'bouncingBar' }).start();
|
47 | await assets.deployAssets(new Gateway(authData));
|
48 |
|
49 | spinner.stopAndPersist().succeed('Assets uploaded');
|
50 | }
|
51 | };
|
52 |
|
53 | PARTNER_PORTAL_HOST = process.env.PARTNER_PORTAL_HOST || 'https://portal.apps.near-me.com';
|
54 |
|
55 | program
|
56 | .version(version)
|
57 | .arguments('[environment]', 'name of environment. Example: staging')
|
58 | .option('-f --force', 'force update. Removes instance-admin lock')
|
59 | .option('-d --direct-assets-upload', 'Uploads assets straight to S3 servers')
|
60 | .option('-p --partial-deploy', 'Partial deployment, does not remove data from directories missing from the build')
|
61 | .option('-c --config-file <config-file>', 'config file path', '.marketplace-kit')
|
62 | .action(async (environment, params) => {
|
63 | process.env.CONFIG_FILE_PATH = params.configFile;
|
64 | if (params.force) process.env.FORCE = params.force;
|
65 | if (params.partialDeploy) process.env.PARTIAL_DEPLOY = params.partialDeploy;
|
66 | const authData = fetchAuthData(environment, program);
|
67 | const env = Object.assign(process.env, {
|
68 | MARKETPLACE_EMAIL: authData.email,
|
69 | MARKETPLACE_TOKEN: authData.token,
|
70 | MARKETPLACE_URL: authData.url,
|
71 | MARKETPLACE_ENV: environment
|
72 | });
|
73 |
|
74 | try{
|
75 | await deploy(env, authData, params);
|
76 | process.exit(0);
|
77 | } catch(error) {
|
78 | process.exit(1);
|
79 | }
|
80 | });
|
81 |
|
82 | program.parse(process.argv);
|