diff --git a/ui/desktop/electron-app/config/forge.config.js b/ui/desktop/electron-app/config/forge.config.js deleted file mode 100644 index c426f9aff..000000000 --- a/ui/desktop/electron-app/config/forge.config.js +++ /dev/null @@ -1,59 +0,0 @@ -const process = require('process'); -const { version } = require('../src/cli/index.js'); - -const formattedCLIVersion = version().formatted; - -const appVersion = process.env.RELEASE_VERSION - ? `Version: ${process.env.RELEASE_VERSION}\n` - : ''; -const appCommit = process.env.RELEASE_COMMIT - ? `Commit: ${process.env.RELEASE_COMMIT}\n` - : ''; - -const formattedAppVersion = `${appVersion}${appCommit}`; - -// Output version strings for debugging -console.log('\n\nVersion Env Vars:'); -console.log('RELEASE_VERSION ', process.env.RELEASE_VERSION); -console.log('RELEASE_COMMIT ', process.env.RELEASE_COMMIT); - -module.exports = { - releaseVersion: process.env.RELEASE_VERSION, - hooks: { - prePackage: () => { - if (!process.env.BOUNDARY_DESKTOP_SIGNING_IDENTITY) { - console.warn('\nWARNING: Could not find signing identity.'); - } - }, - }, - packagerConfig: { - ignore: ['/ember-test(/|$)', '/tests(/|$)'], - name: 'Boundary', - appBundleId: 'com.electron.boundary', - // TODO: where should the client version number come from? - appVersion: `${formattedAppVersion}${formattedCLIVersion}\n`, - appCopyright: 'Copyright © 2021 HashiCorp, Inc.', - icon: './config/macos/icon.icns', - osxSign: { - identity: process.env.BOUNDARY_DESKTOP_SIGNING_IDENTITY, - 'hardened-runtime': true, - entitlements: './config/macos/entitlements.plist', - 'entitlements-inherit': './config/macos/entitlements.plist', - 'signature-flags': 'library', - }, - }, - makers: [ - { - name: '@electron-forge/maker-dmg', - config: { - title: 'Boundary', - name: 'boundary', - icon: './config/macos/disk.icns', - background: './config/macos/background.png', - }, - }, - { - name: '@electron-forge/maker-zip', - }, - ], -}; diff --git a/ui/desktop/electron-app/config/forge.js b/ui/desktop/electron-app/config/forge.js new file mode 100644 index 000000000..1b6aab69f --- /dev/null +++ b/ui/desktop/electron-app/config/forge.js @@ -0,0 +1,84 @@ +const fs = require('fs'); +const os = require('os'); +const path = require('path'); + +const DEFAULT_CONFIG = { + packagerConfig: { + ignore: ['/ember-test(/|$)', '/tests(/|$)'], + name: 'Boundary', + version: '0.0.0', + appBundleId: 'com.electron.boundary', + appCopyright: 'Copyright © 2021 HashiCorp, Inc.', + }, + makers: [ + { + name: '@electron-forge/maker-zip', + }, + ], +} + +// Create forge config based on platform +const createConfig = () => { + const config = { ...DEFAULT_CONFIG }; + + // Store env vars in config + ['RELEASE_COMMIT', 'RELEASE_VERSION'].forEach((envVar) => { + if (process.env[envVar]) { + config[envVar] = process.env[envVar]; + console.log(`[forge-config] ${envVar} ${config[envVar]}`); + } + }); + + if (os.platform().match(/(darwin)/i)) { + config.packagerConfig.icon = './config/macos/icon.icns'; + config.packagerConfig.osxSign = { + 'hardened-runtime': true, + entitlements: './config/macos/entitlements.plist', + 'entitlements-inherit': './config/macos/entitlements.plist', + 'signature-flags': 'library', + }; + + // Version + if (config.RELEASE_VERSION) + config.packagerConfig.version = config.RELEASE_VERSION; + + // Signing identity + const signingIdentity = process.env.BOUNDARY_DESKTOP_SIGNING_IDENTITY; + if (signingIdentity) { + config.packagerConfig.osxSign.identity = signingIdentity; + } else { + console.warn( + '[forge-config] WARNING: Could not find signing identity. Proceeding without signing.' + ); + } + + // Generate DMG file + config.makers.push({ + name: '@electron-forge/maker-dmg', + config: { + title: 'Boundary', + name: 'boundary', + icon: './config/macos/disk.icns', + background: './config/macos/background.png', + }, + }); + } + + return config; +}; + +// Save forge config file +const saveConfig = (config, destination) => { + const configPath = `${destination}/forge.config.js`; + console.log(`[forge-config] ${configPath}`); + const content = `module.exports = ${JSON.stringify(config, null, 2)}`; + fs.writeFileSync(configPath, content); +}; + +module.exports = { + setup: () => { + const config = createConfig(); + const destination = path.resolve(__dirname); + saveConfig(config, destination); + }, +}; diff --git a/ui/desktop/electron-app/package.json b/ui/desktop/electron-app/package.json index d9df381c8..14502cdfc 100644 --- a/ui/desktop/electron-app/package.json +++ b/ui/desktop/electron-app/package.json @@ -9,9 +9,10 @@ "main": "src/index.js", "scripts": { "build:cli": "node -e 'require(\"./config/cli.js\").setup()'", + "build:config": "node -e 'require(\"./config/forge.js\").setup()'", "start": "electron-forge start", "package": "electron-forge package", - "premake": "yarn build:cli", + "premake": "yarn build:cli && yarn build:config", "make": "electron-forge make", "publish": "electron-forge publish", "lint": "echo \"No linting configured\"" diff --git a/ui/desktop/electron-app/src/config/menu.js b/ui/desktop/electron-app/src/config/menu.js index 5f669e4bb..4e72a2d0f 100644 --- a/ui/desktop/electron-app/src/config/menu.js +++ b/ui/desktop/electron-app/src/config/menu.js @@ -1,5 +1,7 @@ -const { shell } = require('electron'); +const { app, shell, dialog } = require('electron'); const appUpdater = require('../helpers/app-updater.js'); +const forgeConfig = require('../../config/forge.config.js'); +const { version } = require('../cli/index.js'); const generateMenuTemplate = () => { return [ @@ -7,7 +9,22 @@ const generateMenuTemplate = () => { { label: 'Boundary', submenu: [ - { role: 'about' }, + // { role: 'about' }, + { + label: `About ${app.getName()}`, + click: () => { + const appVersion = `Version: ${forgeConfig.RELEASE_VERSION}`; + const appCommit = `Commit: ${forgeConfig.RELEASE_COMMIT}`; + const cliVersion = version().formatted; + + const dialogOpts = { + type: 'none', + message: `${appVersion}\n${appCommit}`, + detail: cliVersion, + }; + dialog.showMessageBox(dialogOpts); + }, + }, { id: 'update', label: 'Check for Updates', diff --git a/ui/desktop/package.json b/ui/desktop/package.json index ad95f6b81..ba2dab71e 100644 --- a/ui/desktop/package.json +++ b/ui/desktop/package.json @@ -28,7 +28,7 @@ "format:sass": "prettier --write app/**/*.scss", "lint:js:fix": "eslint . --fix", "start": "ember serve", - "prestart:desktop": "cd electron-app && yarn build:cli", + "prestart:desktop": "cd electron-app && yarn premake", "start:desktop": "ember electron", "clean:coverage": "rm -rf coverage_*", "pretest": "yarn clean:coverage",