cob-cli 2.52.0-beta-1 → 2.52.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/bin/cob-cli.js CHANGED
@@ -10,10 +10,7 @@ const init = require("../lib/commands/init");
10
10
  const customize = require("../lib/commands/customize");
11
11
  const test = require("../lib/commands/test");
12
12
  const deploy = require("../lib/commands/deploy");
13
- const cleanup = require("../lib/commands/cleanup");
14
- const package = require("../lib/commands/package");
15
13
  const updateFromServer = require("../lib/commands/updateFromServer");
16
- const tagDefs = require("../lib/commands/tagDefs.js");
17
14
  const getDefs = require("../lib/commands/getDefs");
18
15
  const generateMermaid = require("../lib/commands/generateMermaid");
19
16
  const { upgradeRepo } = require("../lib/commands/upgradeRepo");
@@ -76,30 +73,12 @@ program
76
73
  .description('Deploy customization to the server')
77
74
  .action( deploy );
78
75
 
79
- program
80
- .command('cleanup')
81
- .option('-e --environment <name>', 'environment to use')
82
- .option('-s --servername <servername>', 'use <servername>.cultofbits.pt (i.e. name without the FQDN)')
83
- .option('-l --localOnly', 'only clean local state, skip server cleanup')
84
- .option('-V --verbose', 'verbose execution of tasks', increaseVerbosity, 0)
85
- .description('Clean up repository state after an interrupted test or deploy')
86
- .action( cleanup );
87
-
88
- program
89
- .command('package')
90
- .option('-e --environment <name>', 'environment to use')
91
- .option('-V --verbose', 'verbose execution of tasks', increaseVerbosity, 0)
92
- .description('Package customization for out-of-band deploying')
93
- .action( package );
94
-
95
76
  program
96
77
  .command('updateFromServer')
97
78
  .description('Updates local copy with current files on server, in case of changes made out of standard process.')
98
79
  .option('-e --environment <name>', 'environment to use')
99
80
  .option('-s --servername <servername>', 'use <servername>.cultofbits.pt (i.e. name without the FQDN)')
100
81
  .option('-V --verbose', 'verbose execution of tasks', increaseVerbosity, 0)
101
- .option('-c --code', 'By adding this flag you indicate that you want to bring the code and not the data')
102
- .option('--cookie <path>', '')
103
82
  .action( updateFromServer );
104
83
 
105
84
  program
@@ -112,16 +91,6 @@ program
112
91
  .option('-e --environment <name>', 'environment to use')
113
92
  .description('Updates local copy with definitions on server')
114
93
  .action( getDefs );
115
-
116
- program
117
- .command('tagDefs')
118
- .description('Allows the user to tag un-tagged Changes in Definitions configured on exported solutions.')
119
- .option('-e --environment <name>', 'environment to use')
120
- .option('-s --servername <servername>', 'use <servername>.cultofbits.pt (i.e. name without the FQDN)')
121
- .option('-V --verbose', 'verbose execution of tasks', increaseVerbosity, 0)
122
- .option('--all', 'tag all Definitions of all exported solutions. Use with care!')
123
- .option('--cookie <path>', '')
124
- .action( tagDefs );
125
94
 
126
95
  program
127
96
  .command('generateMermaid')
@@ -4,47 +4,40 @@ const { confirmExecutionOfChanges } = require("../task_lists/common_syncFiles");
4
4
  const { validateDeployConditions } = require("../task_lists/deploy_validate");
5
5
  const { executeTasks } = require("../task_lists/deploy_execute");
6
6
  const { checkRepoVersion } = require("../commands/upgradeRepo");
7
- const { saveOperationState, clearOperationState, checkNoInterruptedRun } = require("../task_lists/common_operationState");
8
7
 
9
8
  async function deploy(args) {
10
- checkRepoVersion()
11
- const cmdEnv = await getCurrentCommandEnviroment(args)
12
- await checkNoInterruptedRun()
13
- saveOperationState(cmdEnv.name, cmdEnv.servername)
14
- if(args.resync) args.force = true;
9
+ try {
10
+ checkRepoVersion()
11
+ const cmdEnv = await getCurrentCommandEnviroment(args)
12
+ if(args.resync) args.force = true;
15
13
 
16
- console.log(`Checking conditions to deploy ${cmdEnv.branchStr} to ${cmdEnv.serverStr}...` );
14
+ console.log(`Checking conditions to deploy ${cmdEnv.branchStr} to ${cmdEnv.serverStr}...` );
17
15
 
18
- try {
19
16
  await validateDeployConditions(cmdEnv,args).run()
20
- } catch (err) {
21
- // we should clear the operation state
22
- clearOperationState();
23
- throw err
24
- }
25
-
26
- await cmdEnv.applyCurrentCommandEnvironmentChanges()
27
- let changes = [];
28
- try {
29
- changes = await confirmExecutionOfChanges(cmdEnv)
30
- } catch (err) {
31
- await cmdEnv.unApplyCurrentCommandEnvironmentChanges()
32
- clearOperationState()
33
- throw err
34
- }
35
17
 
36
- if(changes.length == 0) {
37
- if(!args.force) {
18
+ await cmdEnv.applyCurrentCommandEnvironmentChanges()
19
+ let changes = [];
20
+ try {
21
+ changes = await confirmExecutionOfChanges(cmdEnv)
22
+ } catch (err) {
38
23
  await cmdEnv.unApplyCurrentCommandEnvironmentChanges()
39
- clearOperationState()
40
- throw new Error("Canceled:".yellow + " nothing todo\n")
24
+ throw err
25
+ }
26
+
27
+ if(changes.length == 0) {
28
+ if(!args.force) {
29
+ await cmdEnv.unApplyCurrentCommandEnvironmentChanges()
30
+ throw new Error("Canceled:".yellow + " nothing todo\n")
31
+ }
32
+ console.log(" Just updating deploy information.")
41
33
  }
42
- console.log(" Just updating deploy information.")
43
- }
44
34
 
45
- await executeTasks(cmdEnv, args).run();
35
+ await executeTasks(cmdEnv, args).run();
46
36
 
47
- clearOperationState()
48
- console.log("\nDone!".green, "\nEnjoy!")
37
+ console.log("\nDone!".green, "\nEnjoy!")
38
+
39
+ } catch(err) {
40
+ console.error("\n",err.message);
41
+ }
49
42
  }
50
- module.exports = deploy;
43
+ module.exports = deploy;
@@ -6,33 +6,19 @@ const { otherFilesContiousReload } = require("../task_lists/test_otherFilesConti
6
6
  const { getCurrentCommandEnviroment } = require("../task_lists/common_enviromentHandler");
7
7
  const { getKeypress } = require("../task_lists/common_helpers");
8
8
  const { checkRepoVersion } = require("../commands/upgradeRepo");
9
- const { saveOperationState, clearOperationState, checkNoInterruptedRun } = require("../task_lists/common_operationState");
10
9
 
11
- async function test (args) {
10
+ async function test (args) {
12
11
  let restoreChanges, error = "";
13
12
  let cmdEnv
14
13
  let spawned
15
- let stateSaved = false
16
- let envChangesApplied = false
17
-
18
- let rejectOnSignal;
19
- const signalPromise = new Promise((_, reject) => { rejectOnSignal = reject; });
20
- const handleSignal = () => rejectOnSignal(new Error('signal'));
21
- process.once('SIGTERM', handleSignal);
22
- process.once('SIGHUP', handleSignal);
23
-
24
14
  try {
25
15
  checkRepoVersion()
26
16
  console.log("Start testing… ")
27
17
  cmdEnv = await getCurrentCommandEnviroment(args)
28
- await checkNoInterruptedRun()
29
- saveOperationState(cmdEnv.name, cmdEnv.servername)
30
- stateSaved = true
31
18
 
32
19
  if(!args.localOnly) {
33
- await validateTestingConditions(cmdEnv, args)
20
+ await validateTestingConditions(cmdEnv, args)
34
21
  await cmdEnv.applyCurrentCommandEnvironmentChanges()
35
- envChangesApplied = true
36
22
  restoreChanges = await otherFilesContiousReload(cmdEnv)
37
23
  } else {
38
24
  await cmdEnv.applyCurrentCommandEnvironmentChanges()
@@ -41,22 +27,16 @@ async function test (args) {
41
27
 
42
28
  let key;
43
29
  do {
44
- key = await Promise.race([getKeypress(), signalPromise, spawned.failed]);
45
- if(key == "o") opn(`http://localhost:${spawned.port}/recordm/index.html`)
46
- } while( key != "q" && key != "ctrl+c" )
30
+ key = await getKeypress()
31
+ if(key == "o") opn("http://localhost:8040/recordm/index.html")
32
+ } while( key != "q" && key != "ctrl+c" )
47
33
 
48
- } catch (err) {
49
- if(err.message !== 'signal' && err.message !== 'processes-failed') {
50
- error = err.message
51
- console.log("\n",error)
52
- }
34
+ } catch (err) {
35
+ error = err.message
36
+ console.log("\n",error)
53
37
  } finally {
54
- process.off('SIGTERM', handleSignal);
55
- process.off('SIGHUP', handleSignal);
56
- try { process.stdin.setRawMode(false); } catch {}
57
38
  restoreChanges && await restoreChanges()
58
- envChangesApplied && cmdEnv && await cmdEnv.unApplyCurrentCommandEnvironmentChanges() // Repõe as configurações
59
- if (stateSaved) clearOperationState()
39
+ cmdEnv && await cmdEnv.unApplyCurrentCommandEnvironmentChanges() // Repõe as configurações
60
40
  spawned && await spawned.stop();
61
41
  // Dá tempo aos subprocessos para morrer (acho que já não é preciso)
62
42
  setTimeout(() => {
@@ -1,167 +1,31 @@
1
1
  require('colors');
2
2
  const { getCurrentCommandEnviroment } = require("../task_lists/common_enviromentHandler");
3
3
  const { copyFiles } = require("../task_lists/common_syncFiles");
4
- const { promptCredentials, readYamlFile } = require("../task_lists/common_helpers.js");
5
4
  const { validateUpdateFromServerConditions } = require("../task_lists/updateFromServer_validate");
6
- const { getGroupsFromServer } = require("../task_lists/updateFromServer_groups");
7
- const { getDefinitionsFromServer } = require("../task_lists/updateFromServer_definitions");
8
- const { getInstancesFromServer } = require("../task_lists/updateFromServer_instances");
9
- const { getKibanaFromServer } = require("../task_lists/updateFromServer_kibana");
10
- const { getDomainsFromServer } = require("../task_lists/updateFromServer_domains");
11
5
  const { checkRepoVersion } = require("../commands/upgradeRepo");
12
- const axios = require('axios');
13
- const tough = require('tough-cookie');
14
- const fs = require("fs/promises");
15
- const axiosCookieJarSupport = require('axios-cookiejar-support')
16
- const path = require('path')
17
- const FileCookieStore = require('file-cookie-store');
18
6
 
19
7
  async function updateFromServer(args) {
20
8
  try {
21
9
  checkRepoVersion()
22
10
  const cmdEnv = await getCurrentCommandEnviroment(args)
23
11
 
24
- if (args.code) {
12
+ await validateUpdateFromServerConditions(cmdEnv).run()
25
13
 
26
- await validateUpdateFromServerConditions(cmdEnv).run()
14
+ console.log("\nOk to proceed. Getting files from server's live directories...");
15
+ await cmdEnv.applyCurrentCommandEnvironmentChanges()
16
+ let changes = await copyFiles(cmdEnv, "serverLive", "localCopy", args)
17
+ await cmdEnv.unApplyCurrentCommandEnvironmentChanges()
27
18
 
28
- console.log("\nOk to proceed. Getting files from server's live directories...");
29
- await cmdEnv.applyCurrentCommandEnvironmentChanges()
30
- let changes = await copyFiles(cmdEnv, "serverLive", "localCopy", args)
31
- await cmdEnv.unApplyCurrentCommandEnvironmentChanges()
32
-
33
- if (changes.length == 0) {
34
- console.log("\nFinished.".green, "Nothing todo, no changes detected.");
35
- } else {
36
- console.log("\n " + changes.join("\n "));
37
- console.log("\nUpdate done!".yellow, "Check", "git status".bold.blue, "and", "git diff".bold.blue, "to see the resulting differences.");
38
- console.log("Notice that", "any changes since last deploy migth be lost.".underline)
39
- console.log("Notice also that you will need to do a", "cob-cli deploy --force".bold.blue, "on next deploy.")
40
- }
19
+ if(changes.length == 0) {
20
+ console.log("\nFinished.".green,"Nothing todo, no changes detected.");
41
21
  } else {
42
-
43
- axiosCookieJarSupport.wrapper(axios)
44
- axios.defaults.ignoreCookieErrors = true
45
- axios.defaults.withCredentials = true
46
- const cookieJar = new tough.CookieJar()
47
- axios.defaults.jar = cookieJar
48
-
49
- if( args.cookie ) {
50
- const p = path.resolve(args.cookie);
51
- const cookieFile = new FileCookieStore(p, {auto_sync: false, force_parse: true});
52
- try{
53
- let c = await new Promise((resolve, reject) => {
54
- cookieFile.findCookie(`${cmdEnv.servername}.cultofbits.com`, '/', 'cobtoken', (err, result) => {
55
- if(err != null) reject(err);
56
- else resolve(result)
57
- })
58
- });
59
- if(!c){
60
- throw Error( `couldn't find a cookie for ${cmdEnv.servername} in ${p}`)
61
- }
62
- cookieJar.setCookie(c.toString(), `https://${cmdEnv.servername}.cultofbits.com`)
63
- } catch(e){
64
- console.error(e)
65
- return
66
- }
67
-
68
- } else {
69
- const credentials = await promptCredentials()
70
- await axios.post(`https://${cmdEnv.servername}.cultofbits.com/recordm/security/auth`, credentials, {
71
- headers: {
72
- "Content-Type": "application/json",
73
- },
74
- })
75
- }
76
-
77
- console.log("\n Removing existing Data")
78
- try{ await fs.access("others/solutionsData") } catch { await fs.mkdir("others/solutionsData") }
79
- const dataFiles = await fs.readdir("others/solutionsData");
80
- for (const file of dataFiles) {
81
- const filePath = path.join("others/solutionsData", file);
82
- await fs.rm(filePath, {recursive: true, force: true} )
83
- }
84
-
85
- const solutions = await readYamlFile("solutions.yml")
86
-
87
- for (const solution of solutions) {
88
-
89
- console.log("\nStarting updateFromServer of solution " + solution.name)
90
-
91
- const dataPath = `others/solutionsData/${solution.name}`
92
- fs.mkdir(dataPath, { recursive: true })
93
-
94
- if (solution.permissions) {
95
- await getGroupsFromServer(
96
- cmdEnv.servername,
97
- solution.groups,
98
- dataPath + "/permissions.json",
99
- solution.name,
100
- args
101
- )
102
- }
103
-
104
- if (solution.definitions) {
105
- const definitionPath = dataPath + '/definitions/'
106
- fs.mkdir(definitionPath, { recursive: true })
107
- const viewsPath = dataPath + '/views/'
108
- fs.mkdir(viewsPath, { recursive: true })
109
- await getDefinitionsFromServer(
110
- cmdEnv.servername,
111
- solution.definitions,
112
- definitionPath,
113
- viewsPath,
114
- solution.name,
115
- args
116
- ).run()
117
- }
118
-
119
- if (solution.instances) {
120
- const instancesPath = dataPath + '/instances/'
121
- fs.mkdir(instancesPath, { recursive: true })
122
- await getInstancesFromServer(
123
- cmdEnv.servername,
124
- solution.instances,
125
- instancesPath,
126
- solution.name,
127
- args
128
- )
129
- }
130
-
131
- if(solution.kibana){
132
- const kibanaPath = dataPath + '/kibana/'
133
- fs.mkdir(kibanaPath, { recursive: true })
134
- await getKibanaFromServer(
135
- cmdEnv.servername,
136
- solution.kibana.spaces,
137
- kibanaPath,
138
- solution.name,
139
- args
140
- )
141
- }
142
-
143
- if(solution.domains){
144
- const domainsPath = dataPath + '/domains/'
145
- fs.mkdir(domainsPath, { recursive: true })
146
- await getDomainsFromServer(
147
- cmdEnv.servername,
148
- solution.domains.filter,
149
- domainsPath,
150
- solution.name,
151
- args
152
- )
153
- }
154
-
155
- }
156
-
157
- await fs.writeFile('others/solutionsData/_index', solutions.map(c => c.name).join('\n'), 'utf-8')
22
+ console.log("\n " + changes.join("\n "));
23
+ console.log("\nUpdate done!".yellow,"Check","git status".bold.blue,"and","git diff".bold.blue,"to see the resulting differences.");
24
+ console.log("Notice that","any changes since last deploy migth be lost.".underline)
25
+ console.log("Notice also that you will need to do a","cob-cli deploy --force".bold.blue,"on next deploy.")
158
26
  }
159
-
160
-
161
- } catch (err) {
162
- console.error("\n", err.message);
27
+ } catch(err) {
28
+ console.error("\n",err.message);
163
29
  }
164
30
  }
165
-
166
-
167
31
  module.exports = updateFromServer;
@@ -5,7 +5,6 @@ const git = require('simple-git');
5
5
  const fs = require('fs-extra');
6
6
  const { getCurrentBranch } = require("./common_releaseManager");
7
7
  const { SERVER_COB_CLI_DIRECTORY } = require("./common_helpers")
8
- const { getSshArgs } = require("./common_helpers")
9
8
 
10
9
  const SERVER_LAST_ENV_FILE = SERVER_COB_CLI_DIRECTORY + "lastDeployEnv";
11
10
 
@@ -67,7 +66,7 @@ exports.getCurrentCommandEnviroment = getCurrentCommandEnviroment;
67
66
 
68
67
  /* ************************************ */
69
68
  async function _applySpecific(environmentName) {
70
- const envSpecificFiles = await fg(['**/*.ENV__'+ environmentName +'__.*'], { onlyFiles: false, dot: true });
69
+ const envSpecificFiles = await fg(['**/*.ENV__'+ environmentName +'__.*'], { onlyFiles: false, dot: true });
71
70
 
72
71
  for( let envSpecificFile of envSpecificFiles ) {
73
72
  let prodFile = envSpecificFile.replace(/\.ENV__.*__/,"")
@@ -75,7 +74,7 @@ async function _applySpecific(environmentName) {
75
74
  if(!fs.existsSync(deleteFile)) {
76
75
  if(fs.existsSync(prodFile)) {
77
76
  let backupFile = envSpecificFile.replace(/\.ENV__.*__/,".ENV__ORIGINAL_BACKUP__")
78
- await git().raw(["update-index","--assume-unchanged", prodFile]).catch(() => {})
77
+ await git().raw(["update-index","--assume-unchanged", prodFile])
79
78
  fs.renameSync(prodFile, backupFile)
80
79
  } else {
81
80
  fs.appendFileSync('.git/info/exclude', "\n" + prodFile)
@@ -83,7 +82,7 @@ async function _applySpecific(environmentName) {
83
82
  }
84
83
  }
85
84
  fs.renameSync(envSpecificFile, prodFile)
86
- await git().raw(["update-index","--assume-unchanged", envSpecificFile]).catch(() => {})
85
+ await git().raw(["update-index","--assume-unchanged", envSpecificFile])
87
86
  }
88
87
  }
89
88
 
@@ -95,11 +94,11 @@ async function _undoSpecific(environmentName) {
95
94
  let prodFile = changedFile.replace(/\.ENV__.*__/,"")
96
95
  let originalEnvSpecificFile = changedFile.replace(/\.ENV__.*__/,'.ENV__' + environmentName + '__')
97
96
  fs.renameSync(prodFile, originalEnvSpecificFile)
98
- await git().raw(["update-index","--no-assume-unchanged", originalEnvSpecificFile]).catch(() => {})
99
-
97
+ await git().raw(["update-index","--no-assume-unchanged", originalEnvSpecificFile])
98
+
100
99
  if( changedFile.indexOf("\.ENV__ORIGINAL_BACKUP__") > 0 ) {
101
100
  fs.renameSync(changedFile, prodFile)
102
- await git().raw(["update-index","--no-assume-unchanged", prodFile]).catch(() => {})
101
+ await git().raw(["update-index","--no-assume-unchanged", prodFile])
103
102
  }
104
103
  if( changedFile.indexOf("\.ENV__DELETE__") > 0 ) {
105
104
  flagDeleteExclude = true
@@ -121,8 +120,6 @@ function _getDefaultServerForEnvironment(environmentName) {
121
120
 
122
121
  /* ************************************ */
123
122
  function _getServerSSHFQDN(servername) {
124
- // return IPs as-is
125
- if (servername.includes(".")) return servername;
126
123
  return servername + ".cultofbits.pt";
127
124
  }
128
125
 
@@ -134,19 +131,16 @@ function _getServerHTTPsFQDN(servername) {
134
131
  /* ************************************ */
135
132
  async function _getLastEnvironmentDeployed(server) {
136
133
  try {
137
- let result = await execa('ssh', [...getSshArgs(server), "cat " + SERVER_LAST_ENV_FILE ]);
134
+ let result = await execa('ssh', [server, "cat " + SERVER_LAST_ENV_FILE ]);
138
135
  return result.stdout;
139
136
  } catch (error) {
140
- if (error.exitCode === 255) {
141
- throw new Error(`SSH connection to '${server}' failed: ${error.shortMessage}`);
142
- }
143
137
  return "prod"
144
138
  }
145
139
  }
146
140
 
147
141
  /* ************************************ */
148
142
  async function _setLastEnvironmentDeployed(server, environmentName) {
149
- await execa('ssh', [...getSshArgs(server), "echo '" + environmentName + "' > " + SERVER_LAST_ENV_FILE ]);
143
+ await execa('ssh', [server, "echo '" + environmentName + "' > " + SERVER_LAST_ENV_FILE ]);
150
144
  }
151
145
 
152
146
  /* ************************************ */
@@ -1,43 +1,5 @@
1
- const inquirer = require("inquirer")
2
- const readline = require('readline');
3
- const yaml = require('js-yaml');
4
- const fs = require("fs/promises");
5
- const { getSshArgs } = require("./ssh");
6
-
7
1
  const SERVER_COB_CLI_DIRECTORY = "/opt/cob-cli/";
8
2
 
9
- /* ************************************ */
10
- function getSshArgs(server) {
11
- const args = [
12
- "-o", "StrictHostKeyChecking=no",
13
- "-o", "PreferredAuthentications=publickey",
14
- "-o", "BatchMode=yes",
15
- ];
16
-
17
- if (process.env.COB_SSH_PORT) args.push("-p", process.env.COB_SSH_PORT);
18
- if (process.env.COB_SSH_IDENTITY) args.push("-i", process.env.COB_SSH_IDENTITY);
19
-
20
- const target = process.env.COB_SSH_USER ? `${process.env.COB_SSH_USER}@${server}` : server;
21
- args.push(target);
22
-
23
- return args;
24
- }
25
-
26
- /* ************************************ */
27
- function getServerAddress(server) {
28
- return process.env.COB_SSH_USER ? `${process.env.COB_SSH_USER}@${server}` : server;
29
- }
30
-
31
- /* ************************************ */
32
- function getRsyncSsh() {
33
- let cmd = "ssh -o ConnectTimeout=30 -o ServerAliveInterval=30 -o ServerAliveCountMax=30 -o StrictHostKeyChecking=no";
34
-
35
- if (process.env.COB_SSH_IDENTITY) cmd += ` -i '${process.env.COB_SSH_IDENTITY}'`;
36
- if (process.env.COB_SSH_PORT) cmd += ` -p ${process.env.COB_SSH_PORT}`;
37
-
38
- return cmd;
39
- }
40
-
41
3
  /* **************************************************************************************** */
42
4
  async function checkWorkingCopyCleanliness(testNotDetached=true) {
43
5
  const git = require('simple-git');
@@ -70,81 +32,40 @@ async function checkWorkingCopyCleanliness(testNotDetached=true) {
70
32
  function checkConnectivity(server) {
71
33
  const execa = require('execa');
72
34
  return execa('ssh', [
35
+ "-o", "StrictHostKeyChecking=no",
36
+ "-o", "PreferredAuthentications=publickey",
37
+ "-o", "BatchMode=yes",
73
38
  "-o", "ConnectTimeout=15",
74
- ...getSshArgs(server),
39
+ server,
75
40
  "test -w /etc/recordm/services/com.cultofbits.web.integration.properties && exit || exit 1"
76
41
  ])
77
42
  }
78
43
 
79
-
80
44
  /* ************************************ */
81
- let readlineSetup = false
82
45
  function getKeypress() {
83
- if (!readlineSetup) {
84
- readline.emitKeypressEvents(process.stdin);
85
- readlineSetup = true
86
- }
46
+ const readline = require('readline');
47
+
87
48
  process.stdin.setRawMode(true);
49
+ readline.emitKeypressEvents(process.stdin);
88
50
  const rl = readline.createInterface({
89
51
  input: process.stdin
90
52
  });
91
-
92
- return new Promise(resolve => {
93
- const listener = function(letter,key){
94
- if(key.name == "return") {
95
- console.log("")
96
-
97
- } else {
98
- if(key.ctrl && key.name == 'c') letter = "ctrl+c"
99
- rl.input.removeListener('keypress', listener)
100
- rl.close();
101
- process.stdin.setRawMode(false);
102
- resolve(letter && letter.toLowerCase() || key.name);
103
- }
53
+ return new Promise(resolve => rl.input.on("keypress", (letter,key) => {
54
+ if(key.name == "return") {
55
+ console.log("")
56
+ } else {
57
+ if(key.ctrl && key.name == 'c') letter = "ctrl+c"
58
+ rl.close();
59
+ process.stdin.setRawMode(false);
60
+ resolve(letter && letter.toLowerCase() || key.name);
104
61
  }
105
- rl.input.on("keypress", listener)
106
- })
107
- }
108
-
109
- /* ************************************ */
110
- async function promptCredentials() {
111
- const answers = await inquirer.prompt([
112
- {
113
- type: 'text',
114
- message: 'Enter username:',
115
- name: 'username',
116
- },
117
- {
118
- type: 'password',
119
- message: 'Enter password:',
120
- name: 'password',
121
- mask: '*',
122
- },
123
- ])
124
-
125
- return answers
126
- };
127
-
128
- /* ************************************ */
129
- async function readYamlFile(filename) {
130
- try {
131
- const data = await fs.readFile(filename, 'utf-8');
132
- const config = yaml.load(data);
133
- return config
134
- } catch (error) {
135
- console.error('Error reading YAML file:', error.message);
136
- }
62
+ }))
137
63
  }
138
64
 
139
65
  /* ************************************ */
140
66
  module.exports = {
141
67
  SERVER_COB_CLI_DIRECTORY : SERVER_COB_CLI_DIRECTORY,
142
- getSshArgs: getSshArgs,
143
- getServerAddress: getServerAddress,
144
- getRsyncSsh: getRsyncSsh,
145
68
  checkConnectivity: checkConnectivity,
146
69
  checkWorkingCopyCleanliness: checkWorkingCopyCleanliness,
147
- getKeypress: getKeypress,
148
- promptCredentials: promptCredentials,
149
- readYamlFile: readYamlFile
70
+ getKeypress: getKeypress
150
71
  };
@@ -1,9 +1,10 @@
1
1
  const execa = require('execa');
2
+ const fs = require('fs-extra');
2
3
  const git = require('simple-git');
3
4
 
4
5
  const SERVER_CHANGELOG = "/opt/cob-cli/DEPLOYLOG.md";
5
6
  const LAST_SHA_FILE = "lastDeploySha"
6
- const { SERVER_COB_CLI_DIRECTORY, getSshArgs } = require("./common_helpers");
7
+ const { SERVER_COB_CLI_DIRECTORY } = require("./common_helpers");
7
8
  const SERVER_LAST_SHA_FILE = SERVER_COB_CLI_DIRECTORY + LAST_SHA_FILE;
8
9
 
9
10
  /* ************************************ */
@@ -43,18 +44,18 @@ async function registerRelease(cmdEnv) {
43
44
  const dateTimeStr = date.toISOString().slice(0,16).replace(/T/," ")
44
45
  const deploySignature = cmdEnv.servername + "_" + dateStr
45
46
  const newDeployText = `${dateTimeStr} ${user} [${currentSha}/${cmdEnv.currentBranch}]`
46
- await execa('ssh', [...getSshArgs(cmdEnv.server), "echo $'" + newDeployText + "\n" + diffs.replace(/'/g,"\\'") + "' >> " + SERVER_CHANGELOG])
47
+ await execa('ssh', [cmdEnv.server, "echo $'" + newDeployText + "\n" + diffs.replace(/'/g,"\\'") + "' >> " + SERVER_CHANGELOG])
47
48
 
48
49
  if (diffs) {
49
50
  // Add deploy tags to repo
50
- await git().fetch(["--tags","-f"]) // Apenas para ter certeza que temos todas as tags
51
+ git().fetch(["--tags","-f"]) // Apenas para ter certeza que temos todas as tags
51
52
  try {
52
53
  await git().silent(true).tag([deploySignature, "-d"])
53
54
  } catch {}
54
55
 
55
56
  await git().addAnnotatedTag(deploySignature, newDeployText )
56
57
  await git().push(["-f", "origin", deploySignature])
57
- await git().fetch(["--tags","-f"]) // Apenas para ter certeza que temos todas as tags
58
+ git().fetch(["--tags","-f"]) // Apenas para ter certeza que temos todas as tags
58
59
  }
59
60
  _setLastDeployedSha(cmdEnv.server, currentSha);
60
61
  }
@@ -64,12 +65,9 @@ exports.registerRelease = registerRelease;
64
65
  async function getLastDeployedSha(server) {
65
66
  let result
66
67
  try {
67
- result = await execa('ssh', [...getSshArgs(server), "cat " + SERVER_LAST_SHA_FILE ]);
68
+ result = await execa('ssh', [server, "cat " + SERVER_LAST_SHA_FILE ]);
68
69
  } catch (error) {
69
- if (error.exitCode === 255) {
70
- throw new Error(`SSH connection to '${server}' failed: ${error.shortMessage}`);
71
- }
72
- await execa('ssh', [...getSshArgs(server), "mkdir -p " + SERVER_COB_CLI_DIRECTORY ]);
70
+ await execa('ssh', [server, "mkdir -p " + SERVER_COB_CLI_DIRECTORY ]);
73
71
  return null
74
72
  }
75
73
  return result.stdout;
@@ -78,7 +76,7 @@ exports.getLastDeployedSha = getLastDeployedSha;
78
76
 
79
77
  /* ************************************ */
80
78
  function _setLastDeployedSha(server, lastSha) {
81
- execa('ssh', [...getSshArgs(server), "echo '" + lastSha + "' > " + SERVER_LAST_SHA_FILE ]);
79
+ execa('ssh', [server, "echo '" + lastSha + "' > " + SERVER_LAST_SHA_FILE ]);
82
80
  }
83
81
 
84
82
  /* ************************************ */