CLI refactor with commander (#6058)

* CLI refactor with commander

- Modularized the functionality
- All functionality done directly from `./nodebb` now
(still available from `app` for backwards compatibility)
- Moved all CLI code from `./nodebb` to `src/cli`
- Fixed `nodebb.bat` to work from any location, like `./nodebb`, and
also hides command output
- Overwrite some commander methods to add CLI color support
- Added `./nodebb info` for quick info including git hash, NodeBB
version, node version, and some database info
- Refactored `./nodebb reset` to allow multiple resets at once
- Changed `./nodebb restart` to essentially stop and start, as Windows
doesn't support signals
- Added `-l, --log` option which works on `./nodebb start` and `./nodebb
restart` to show logging, like `./nodebb slog`
- Expanded `-d, --dev` option which works on them as well, like
`./nodebb dev`
- Improvements to self-help. `./nodebb build -h` will output all
possible targets
- `./nodebb reset` explains usage better

* Fix some style inconsistencies

* Fix prestart being required before modules installed

* Fix travis failures

* Fix `help` command to output help for subcommands

* Pick steps of the upgrade process to run

* Fix formatting for upgrade help

* Fix web installer
This commit is contained in:
Peter Jaszkowiak
2017-11-23 08:55:03 -07:00
committed by Barış Soner Uşaklı
parent c731661a39
commit ae24bca16e
16 changed files with 1233 additions and 847 deletions

59
src/cli/setup.js Normal file
View File

@@ -0,0 +1,59 @@
'use strict';
var winston = require('winston');
var async = require('async');
var install = require('../../install/web').install;
function setup() {
var install = require('../install');
var build = require('../meta/build');
var prestart = require('../prestart');
winston.info('NodeBB Setup Triggered via Command Line');
process.stdout.write('\nWelcome to NodeBB!\n');
process.stdout.write('\nThis looks like a new installation, so you\'ll have to answer a few questions about your environment before we can proceed.\n');
process.stdout.write('Press enter to accept the default setting (shown in brackets).\n');
async.series([
install.setup,
prestart.loadConfig,
build.buildAll,
], function (err, data) {
// Disregard build step data
data = data[0];
var separator = ' ';
if (process.stdout.columns > 10) {
for (var x = 0, cols = process.stdout.columns - 10; x < cols; x += 1) {
separator += '=';
}
}
process.stdout.write('\n' + separator + '\n\n');
if (err) {
winston.error('There was a problem completing NodeBB setup', err);
throw err;
} else {
if (data.hasOwnProperty('password')) {
process.stdout.write('An administrative user was automatically created for you:\n');
process.stdout.write(' Username: ' + data.username + '\n');
process.stdout.write(' Password: ' + data.password + '\n');
process.stdout.write('\n');
}
process.stdout.write('NodeBB Setup Completed. Run \'./nodebb start\' to manually start your NodeBB server.\n');
// If I am a child process, notify the parent of the returned data before exiting (useful for notifying
// hosts of auto-generated username/password during headless setups)
if (process.send) {
process.send(data);
}
}
process.exit();
});
}
exports.setup = setup;
exports.webInstall = install;