diff --git a/ui/desktop/electron-app/config/forge.config.js b/ui/desktop/electron-app/config/forge.config.js index 0e9faa53c..85216c4a4 100644 --- a/ui/desktop/electron-app/config/forge.config.js +++ b/ui/desktop/electron-app/config/forge.config.js @@ -1,4 +1,7 @@ const process = require('process'); +const { version } = require('../src/boundary-cli.js'); + +const formattedCLIVersion = version().formatted; module.exports = { hooks: { @@ -24,7 +27,8 @@ module.exports = { ], name: "Boundary Desktop", appBundleId: "com.electron.boundary", - appVersion: "0.0.1", + // TODO: where should the client version number come from? + appVersion: `1.0.0 ${formattedCLIVersion}`, appCopyright: "Copyright © 2021 HashiCorp, Inc." }, makers: [ diff --git a/ui/desktop/electron-app/src/boundary-cli.js b/ui/desktop/electron-app/src/boundary-cli.js index 01777c5cd..9abbd0ab2 100644 --- a/ui/desktop/electron-app/src/boundary-cli.js +++ b/ui/desktop/electron-app/src/boundary-cli.js @@ -1,5 +1,5 @@ const path = require('path'); -const { spawnAsyncJSONPromise } = require('./spawn-promise'); +const { spawnAsyncJSONPromise, spawnSync } = require('./spawn-promise'); const cliPath = async () => path.resolve(__dirname, '..', 'cli', 'boundary'); @@ -17,5 +17,19 @@ module.exports = { '--output-json-errors' ]; return spawnAsyncJSONPromise(command); + }, + // Returns JSON-formatted version information from the CLI + version: () => { + const command = [ '-v' ]; + const rawOutput = spawnSync(command); + let gitRevision = /Git Revision:\s*(?.*)\n/.exec(rawOutput); + let versionNumber = /Version Number:\s*(?.*)\n/.exec(rawOutput); + if (gitRevision) gitRevision = gitRevision.groups.rev; + if (versionNumber) versionNumber = versionNumber.groups.ver; + const formatted = versionNumber + ? `CLI Version ${versionNumber}; Git Rev ${gitRevision}` + : `CLI Git Rev ${gitRevision}`; + return { gitRevision, versionNumber, formatted }; + return rawOutput; } } diff --git a/ui/desktop/electron-app/src/spawn-promise.js b/ui/desktop/electron-app/src/spawn-promise.js index b6661546f..ba08e2685 100644 --- a/ui/desktop/electron-app/src/spawn-promise.js +++ b/ui/desktop/electron-app/src/spawn-promise.js @@ -1,5 +1,7 @@ const path = require('path'); -const { spawn } = require('child_process'); +const { spawn, spawnSync } = require('child_process'); + +const boundaryPath = path.resolve(__dirname, '..', 'cli', 'boundary'); // Convert to json const jsonify = (data) => { @@ -37,7 +39,6 @@ module.exports = { */ spawnAsyncJSONPromise(command) { return new Promise((resolve, reject) => { - const boundaryPath = path.resolve(__dirname, '..', 'cli', 'boundary'); const childProcess = spawn(boundaryPath, command); let outputStream = ''; let errorStream = ''; @@ -57,4 +58,13 @@ module.exports = { }); }, + /** + * + */ + spawnSync(command) { + const childProcess = spawnSync(boundaryPath, command); + const rawOutput = childProcess.output.toString(); + return rawOutput; + } + };