From c143a85d615f7e493b2bcaa98422707e3cf49e5b Mon Sep 17 00:00:00 2001 From: Matthias Osswald Date: Tue, 16 Jul 2019 10:36:40 +0200 Subject: [PATCH] [FEATURE] Log CLI version when using --verbose option --- bin/ui5.js | 4 +++- lib/cli/middlewares/logger.js | 2 ++ lib/cli/version.js | 11 +++++++++++ test/lib/cli/middlewares/logger.js | 14 ++++++++++++++ 4 files changed, 30 insertions(+), 1 deletion(-) create mode 100644 lib/cli/version.js diff --git a/bin/ui5.js b/bin/ui5.js index 2097e65c..847d506e 100755 --- a/bin/ui5.js +++ b/bin/ui5.js @@ -48,7 +48,9 @@ setTimeout(() => { // Explicitly set CLI version as the yargs default might // be wrong in case a local CLI installation is used // Also add CLI location - cli.version(`${pkg.version} (from ${__filename})`); + const version = `${pkg.version} (from ${__filename})`; + require("../lib/cli/version").set(version); + cli.version(version); // Explicitly set script name to prevent windows from displaying "ui5.js" cli.scriptName("ui5"); diff --git a/lib/cli/middlewares/logger.js b/lib/cli/middlewares/logger.js index 65c6bf95..05f053f7 100644 --- a/lib/cli/middlewares/logger.js +++ b/lib/cli/middlewares/logger.js @@ -13,6 +13,8 @@ function init(argv) { } if (argv.verbose) { logger.setLevel("verbose"); + const version = require("../version").get(); + logger.getLogger("cli:middlewares:base").verbose(`using @ui5/cli version ${version}`); logger.getLogger("cli:middlewares:base").verbose(`using node version ${process.version}`); } return logger; diff --git a/lib/cli/version.js b/lib/cli/version.js new file mode 100644 index 00000000..a7e02207 --- /dev/null +++ b/lib/cli/version.js @@ -0,0 +1,11 @@ +let version; + +// This module holds the CLI's version information (set via ui5.js) for later retrieval (e.g. from middlewares/logger) +module.exports = { + set: function(v) { + version = v; + }, + get: function() { + return version; + } +}; diff --git a/test/lib/cli/middlewares/logger.js b/test/lib/cli/middlewares/logger.js index 8ad2e9ca..b1b815f5 100644 --- a/test/lib/cli/middlewares/logger.js +++ b/test/lib/cli/middlewares/logger.js @@ -19,3 +19,17 @@ test.serial("retrieves logger middleware if verbose or loglevel are set", (t) => const loggerInstance = loggerMiddleware.init({verbose: true}); t.deepEqual(Object.keys(loggerInstance), Object.keys(logger), "Logger is used as middleware"); }); + +const path = require("path"); +const execa = require("execa"); +const pkg = require("../../../../package.json"); +const ui5Cli = path.join(__dirname, "..", "..", "..", "..", "bin", "ui5.js"); +const ui5 = (args, options = {}) => execa(ui5Cli, args, options); + +test("ui5 --verbose", async (t) => { + // Using "versions" as a command, as the --verbose flag can't be used standalone + const {stderr} = await ui5(["versions", "--verbose"]); + t.is(stderr, + `verb cli:middlewares:base using @ui5/cli version ${pkg.version} (from ${ui5Cli})\n`+ + `verb cli:middlewares:base using node version ${process.version}`); +});