UNPKG

2.6 kBJavaScriptView Raw
1#!/usr/bin/env node
2
3const program = require('commander'),
4 fetchAuthData = require('./lib/settings').fetchSettings,
5 spawn = require('child_process').spawn,
6 command = require('./lib/command'),
7 logger = require('./lib/logger'),
8 validate = require('./lib/validators'),
9 Gateway = require('./lib/proxy'),
10 deployServiceClient = require('./lib/deployServiceClient'),
11 version = require('./package.json').version;
12
13const uploadArchive = (env, usingDeploymentService) => {
14 const options = usingDeploymentService ? ['--without-assets'] : [];
15 const archive = spawn(command('marketplace-kit-archive'), options, {
16 stdio: 'inherit'
17 });
18
19 archive.on('close', code => {
20 if (code === 1) {
21 logger.Error('Deploy failed.');
22 process.exit(1);
23 }
24
25 const push = spawn(command('marketplace-kit-push'), [], {
26 stdio: 'inherit',
27 env: env
28 });
29
30 push.on('close', exitCode => {
31 if (exitCode === 1) {
32 logger.Error('Deploy failed.');
33 process.exit(1);
34 } else if(exitCode === 0) {
35 process.exit(0);
36 }
37 });
38 });
39};
40
41program
42 .version(version)
43 .arguments('[environment]', 'name of environment. Example: staging')
44 .option('-f --force', 'force update. Removes instance-admin lock')
45 .option('-d --direct-assets-upload', 'Uploads assets straight to S3 servers')
46 .option('-p --partial-deploy', 'Partial deployment, does not remove data from directories missing from the build')
47 .option('-c --config-file <config-file>', 'config file path', '.marketplace-kit')
48 .action((environment, params) => {
49 process.env.CONFIG_FILE_PATH = params.configFile;
50 if (params.force) process.env.FORCE = params.force;
51 if (params.partialDeploy) process.env.PARTIAL_DEPLOY = params.partialDeploy;
52 const authData = fetchAuthData(environment, program);
53 const env = Object.assign(process.env, {
54 MARKETPLACE_EMAIL: authData.email,
55 MARKETPLACE_TOKEN: authData.token,
56 MARKETPLACE_URL: authData.url,
57 MARKETPLACE_ENV: environment
58 });
59
60 if (params.directAssetsUpload) {
61 const gateway = new Gateway(authData);
62 deployServiceClient.deployAssets(gateway).then(
63 () => {
64 logger.Success('Assets deployed to S3. Uploading manifest.');
65 uploadArchive(env, true);
66 },
67 err => {
68 logger.Debug(err);
69 logger.Warn('Communication problem with deployment service, using classic deployment.');
70 uploadArchive(env, false);
71 }
72 );
73 } else {
74 uploadArchive(env, false);
75 }
76 });
77
78program.parse(process.argv);