feat: Generate forge config file based on platform

In addition, store release variables in forge config for display in
"About" menu option
This commit is contained in:
Susmitha Girumala committed 2021-05-21 17:20:49 -04:00
1 parent 2ccd08a8d4
commit 47c453e979
5 files changed
+106 -63

No files matched your search

@@ -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',
},
],
};
+84
View File
@@ -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);
},
};
+2 -1
View File
@@ -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\""
+19 -2
View File
@@ -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',
+1 -1
View File
@@ -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",