1 | #!/usr/bin/env node
|
2 |
|
3 |
|
4 |
|
5 | 'use strict';
|
6 |
|
7 | const program = require('commander');
|
8 | const getVisitor = require('../lib/visitor').getVisitor;
|
9 | const notifier = require('../lib/update-notifier');
|
10 | const { autoExit } = require('../lib/unref-timeout');
|
11 | const { parsePairs } = require('../lib/build/parser');
|
12 |
|
13 | program
|
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 |
|
39 | if (program.args.length > 1) {
|
40 | console.error();
|
41 | console.error(" error: unexpected argument '%s'", program.args[1]);
|
42 | program.help();
|
43 | }
|
44 |
|
45 | const 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 |
|
55 | notifier.notify();
|
56 |
|
57 | getVisitor().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 | });
|