1 | const decrypter = require('../../libs/crypt/dec.js');
|
2 | const encrypter = require('../../libs/crypt/enc.js');
|
3 | const oldDataExpectedPath = path.join(process.cwd(),".deploy");
|
4 | const saltPath = path.join(process.cwd(),".salt");
|
5 | const salt = fs.fileExists(saltPath) ? fs.readFileSync(saltPath,"utf-8") : false;
|
6 | var savedAnswers = {};
|
7 |
|
8 | module.exports = function (save,data) {
|
9 |
|
10 | if(save && data) return new Promise((resolve,reject)=>{
|
11 | inquirer.prompt([
|
12 | {
|
13 | type:"confirm",
|
14 | message:"Would you like to save the deployment setting for later use?",
|
15 | name:"saveSetting"
|
16 | },
|
17 | {
|
18 | type:"input",
|
19 | name:"name",
|
20 | default:"production",
|
21 | message:"What name would you give to the server we've just deployed to?",
|
22 | when:(answers) => answers.saveSetting,
|
23 | }
|
24 | ])
|
25 | .then((answers)=>{
|
26 | if(answers.saveSetting) {
|
27 | var fileData = getOldData();
|
28 | fileData[answers.name] = data;
|
29 | fs.writeFileSync(oldDataExpectedPath,encrypter(JSON.stringify(fileData),salt));
|
30 | resolve();
|
31 | }
|
32 | else resolve();
|
33 | })
|
34 | .catch((err)=>{
|
35 | reject(err);
|
36 | });
|
37 | });
|
38 |
|
39 | else return new Promise((resolve,reject)=>{
|
40 |
|
41 | msgs.neu("Before starting to deploy your application, make sure that you have:");
|
42 | msgs.neu(" - Git installed on your remote server");
|
43 | msgs.neu(" - A remote git repository (on github)");
|
44 | msgs.neu(" - A remote server, connectible via SSH");
|
45 |
|
46 | savedAnswers = getOldData();
|
47 | var availableServers = [];
|
48 | for (var serverName in savedAnswers) {
|
49 | if(savedAnswers.hasOwnProperty(serverName)) availableServers.push(serverName);
|
50 | }
|
51 |
|
52 | var questions = [
|
53 | {
|
54 | name:"message",
|
55 | message:"Enter your commit message",
|
56 | default:"new commit"
|
57 | },
|
58 | {
|
59 | type:"confirm",
|
60 | name:"use_old",
|
61 | message:"Would you like to use the saved deployment setting?",
|
62 | when:availableServers.length > 0,
|
63 | },
|
64 | {
|
65 | type:"list",
|
66 | name:"serverName",
|
67 | message:"Which server's setting would you like to use?",
|
68 | choices:availableServers,
|
69 | when:function(answers){
|
70 | return availableServers.length > 0 && answers.use_old;
|
71 | }
|
72 | },
|
73 | {
|
74 | name:"repo_url",
|
75 | validate:function (input) {
|
76 | return new Promise((resolve,reject)=>{
|
77 | if(input.toLowerCase().startsWith("https://")) resolve(true);
|
78 | else reject("The url doesn't appear to be HTTPS");
|
79 | });
|
80 | },
|
81 | message:"Enter the repository URL (HTTPS required)",
|
82 | when:theres_no_old_data_or_dont_want_to_use_it
|
83 | },
|
84 | {
|
85 | name:"repo_user",
|
86 | message:"Enter your remote git account username",
|
87 | default:"none",
|
88 | when:theres_no_old_data_or_dont_want_to_use_it
|
89 | },
|
90 | {
|
91 | type:"password",
|
92 | name:"repo_password",
|
93 | message:"Enter your remote git account password",
|
94 | default:"none",
|
95 | when:theres_no_old_data_or_dont_want_to_use_it
|
96 | },
|
97 | {
|
98 | name:"repo_branch",
|
99 | message:"Enter your remote git repository branch",
|
100 | default:"master",
|
101 | when:theres_no_old_data_or_dont_want_to_use_it
|
102 | },
|
103 | {
|
104 | name:"server_hostname",
|
105 | message:"Enter your remote server host",
|
106 | when:theres_no_old_data_or_dont_want_to_use_it
|
107 | },
|
108 | {
|
109 | name:"server_path",
|
110 | message:"Enter the directory on your on which the application lies (or should be laid)",
|
111 | when:theres_no_old_data_or_dont_want_to_use_it
|
112 | },
|
113 | {
|
114 | type:"list",
|
115 | name:"server_authType",
|
116 | message:"How do you connect to your server",
|
117 | choices:[
|
118 | {
|
119 | name:"Using SSH key with (or without a pass phrase)",
|
120 | value:"key",
|
121 | short:"key",
|
122 | },
|
123 | {
|
124 | name:"Using a username and password",
|
125 | value:"password",
|
126 | short:"password",
|
127 | },
|
128 | ],
|
129 | when:theres_no_old_data_or_dont_want_to_use_it
|
130 | },
|
131 | {
|
132 | name:"server_key",
|
133 | message:"Enter the path to a file holding the server key",
|
134 | when:(answers) => theres_no_old_data_or_dont_want_to_use_it(answers) && answers.server_authType === "key"
|
135 | },
|
136 | {
|
137 | name:"server_passphrase",
|
138 | message:"Enter your pass phrase (leave empty if you don't use one)",
|
139 | when:(answers) => theres_no_old_data_or_dont_want_to_use_it(answers) && answers.server_authType === "key"
|
140 | },
|
141 | {
|
142 | name:"server_username",
|
143 | message:"Enter your username",
|
144 | when:(answers) => theres_no_old_data_or_dont_want_to_use_it(answers) && answers.server_authType === "password"
|
145 | },
|
146 | {
|
147 | type:"password",
|
148 | name:"server_password",
|
149 | message:"Enter your password",
|
150 | when:(answers) => theres_no_old_data_or_dont_want_to_use_it(answers) && answers.server_authType === "password"
|
151 | }
|
152 | ];
|
153 |
|
154 | inquirer.prompt(questions)
|
155 | .then((answers)=>{
|
156 | savedAnswers.message = answers.message;
|
157 | if(answers.use_old) return resolve(savedAnswers[answers.serverName]);
|
158 | else return resolve(answers);
|
159 | })
|
160 | .catch((err)=>{
|
161 | reject(err);
|
162 | });
|
163 | });
|
164 | };
|
165 |
|
166 | function getOldData() {
|
167 | try {
|
168 | return JSON.parse(decrypter(fs.readFileSync(oldDataExpectedPath,"utf-8"),salt));
|
169 | } catch(e) {
|
170 | return {};
|
171 | }
|
172 | }
|
173 |
|
174 | function theres_no_old_data_or_dont_want_to_use_it(answers) {
|
175 | return (Object.keys(savedAnswers).length === 0) || (!answers.use_old);
|
176 | } |
\ | No newline at end of file |