UNPKG

2.75 kBJavaScriptView Raw
1#!/usr/bin/env node
2
3/* eslint-disable quotes */
4
5'use strict';
6
7const program = require('commander');
8const getVisitor = require('../lib/visitor').getVisitor;
9const notifier = require('../lib/update-notifier');
10const { autoExit } = require('../lib/unref-timeout');
11const { parsePairs } = require('../lib/build/parser');
12
13program
14 .name('fun deploy')
15 .usage('[options] [resource]')
16 .description(`
17 Deploy a serverless application.
18
19 use 'fun deploy' to deploy all resources
20 use 'fun deploy serviceName' to deploy all functions under a service
21 use 'fun deploy functionName' to deploy only a function resource
22
23 with '--only-config' parameter, will only update resource config without updating the function code
24
25 use '--parameter-override', A parameter structures that specify input parameters for your stack template.
26 If you're updating a stack and you don't specify a parameter, the command uses the stack's existing value.
27 For new stacks, you must specify parameters that don't have a default value. Syntax: parameterkey=parametervalue.
28 `)
29
30
31 .option('-t, --template [template]', 'The path of fun template file.')
32 .option('-c, --only-config', 'Update only configuration flags')
33 .option('-y, --assume-yes', 'Automatic yes to prompts. Assume "yes" as answer to all prompts and run non-interactively.\n')
34 .option('--use-ros', 'Deploy resources using ROS')
35 .option('--stack-name <stackName>', 'The name of the ROS stack')
36 .option('-p, --parameter-override <parameter>', `A parameter structures that specify input parameters for your stack template.`, parsePairs)
37 .parse(process.argv);
38
39if (program.args.length > 1) {
40 console.error();
41 console.error(" error: unexpected argument '%s'", program.args[1]);
42 program.help();
43}
44
45const context = {
46 resourceName: program.args[0],
47 onlyConfig: program.onlyConfig || false,
48 template: program.template,
49 useRos: program.useRos,
50 stackName: program.stackName,
51 assumeYes: program.assumeYes || false,
52 parameterOverride: program.parameterOverride
53};
54
55notifier.notify();
56
57getVisitor().then(visitor => {
58
59 let ea;
60
61 if (context.useRos) {
62 ea = 'ros';
63 } else {
64 ea = context.resourceName ? `deploy ${ context.resourceName }` : 'deploy';
65 }
66
67 visitor.pageview('/fun/deploy').send();
68
69 require('../lib/commands/deploy')(context)
70 .then(() => {
71 visitor.event({
72 ec: 'deploy',
73 ea,
74 el: 'success',
75 dp: '/fun/deploy'
76 }).send();
77
78 autoExit();
79 })
80 .catch(error => {
81 visitor.event({
82 ec: 'deploy',
83 ea,
84 el: 'error',
85 dp: '/fun/deploy'
86 }).send();
87
88 require('../lib/exception-handler')(error);
89 });
90});