From 38de1e0cf41b9d5527d405952e2d66e983ca2a5c Mon Sep 17 00:00:00 2001 From: Kristóf Marussy Date: Thu, 27 May 2021 20:37:32 +0200 Subject: Environmental variables for dev/production mode (#1455) * Restore ELECTRON_IS_DEV environment variable As part of migrating to @electron/remote from electron.remote, 296ce5ce6 removed the electron-is-dev package and with it the support of selecting dev/production mode with the ELECTRON_IS_DEV environmental variable. This commit restores support for this variable. Because even the newest version of the electron-is-dev package breaks in renderer processes, we instead query the environment ourselves. * Add support for NODE_ENV variable Also support NODE_ENV for specifying dev mode in addition to the ELECTRON_IS_DEV variable. This variable is used by e.g., the packaging in Arch Linux to trigger production mode with an explicit electron command line invocation: https://aur.archlinux.org/cgit/aur.git/tree/PKGBUILD?h=ferdi-git&id=61dc59e5eb19a2c9e8f9edaf0a63aaae72990a0b#n109 * Refactor environmental variable handling --- src/config.js | 18 ++- src/environment.js | 5 +- src/i18n/locales/defaultMessages.json | 296 +++++++++++++++++----------------- src/index.js | 2 +- 4 files changed, 170 insertions(+), 151 deletions(-) (limited to 'src') diff --git a/src/config.js b/src/config.js index 127dcd2dc..189959a4d 100644 --- a/src/config.js +++ b/src/config.js @@ -196,7 +196,23 @@ if (process.env.FERDI_APPDATA_DIR != null) { app.setPath('userData', path.join(app.getPath('appData'), app.name)); } -export const isDevMode = !app.isPackaged; +const ELECTRON_IS_DEV_VAR = 'ELECTRON_IS_DEV'; +const NODE_ENV_VAR = 'NODE_ENV'; + +// TODO Move this to environment.js and remove the re-export from there. +export const isDevMode = (() => { + const isEnvVarSet = name => name in process.env; + if (isEnvVarSet(ELECTRON_IS_DEV_VAR)) { + // Copied from https://github.com/sindresorhus/electron-is-dev/blob/f05330b856782dac7987b10859bfd95ea6a187a6/index.js + // but electron-is-dev breaks in a renderer process, so we use the app import from above instead. + const electronIsDev = process.env[ELECTRON_IS_DEV_VAR]; + return electronIsDev === 'true' || Number.parseInt(electronIsDev, 10) === 1; + } + if (isEnvVarSet(NODE_ENV_VAR)) { + return process.env[NODE_ENV_VAR] === 'development'; + } + return !app.isPackaged; +})(); if (isDevMode) { app.setPath('userData', path.join(app.getPath('appData'), `${app.name}Dev`)); } diff --git a/src/environment.js b/src/environment.js index 1aa0def04..fb7c9d133 100644 --- a/src/environment.js +++ b/src/environment.js @@ -1,4 +1,5 @@ import { + isDevMode as isDev, LIVE_API, DEV_API, LOCAL_API, @@ -15,7 +16,9 @@ import { // eslint-disable-next-line global-require export const { app } = process.type === 'renderer' ? require('@electron/remote') : require('electron'); -export const isDevMode = !app.isPackaged; +// TODO Remove this re-export and move the code from config.js to here. +export const isDevMode = isDev; + export const useLiveAPI = process.env.LIVE_API; export const useLocalAPI = process.env.LOCAL_API; diff --git a/src/i18n/locales/defaultMessages.json b/src/i18n/locales/defaultMessages.json index dde2957ad..ef25aa3d9 100644 --- a/src/i18n/locales/defaultMessages.json +++ b/src/i18n/locales/defaultMessages.json @@ -7353,962 +7353,962 @@ "defaultMessage": "!!!Edit", "end": { "column": 3, - "line": 24 + "line": 26 }, "file": "src/lib/Menu.js", "id": "menu.edit", "start": { "column": 8, - "line": 21 + "line": 23 } }, { "defaultMessage": "!!!Undo", "end": { "column": 3, - "line": 28 + "line": 30 }, "file": "src/lib/Menu.js", "id": "menu.edit.undo", "start": { "column": 8, - "line": 25 + "line": 27 } }, { "defaultMessage": "!!!Redo", "end": { "column": 3, - "line": 32 + "line": 34 }, "file": "src/lib/Menu.js", "id": "menu.edit.redo", "start": { "column": 8, - "line": 29 + "line": 31 } }, { "defaultMessage": "!!!Cut", "end": { "column": 3, - "line": 36 + "line": 38 }, "file": "src/lib/Menu.js", "id": "menu.edit.cut", "start": { "column": 7, - "line": 33 + "line": 35 } }, { "defaultMessage": "!!!Copy", "end": { "column": 3, - "line": 40 + "line": 42 }, "file": "src/lib/Menu.js", "id": "menu.edit.copy", "start": { "column": 8, - "line": 37 + "line": 39 } }, { "defaultMessage": "!!!Paste", "end": { "column": 3, - "line": 44 + "line": 46 }, "file": "src/lib/Menu.js", "id": "menu.edit.paste", "start": { "column": 9, - "line": 41 + "line": 43 } }, { "defaultMessage": "!!!Paste And Match Style", "end": { "column": 3, - "line": 48 + "line": 50 }, "file": "src/lib/Menu.js", "id": "menu.edit.pasteAndMatchStyle", "start": { "column": 22, - "line": 45 + "line": 47 } }, { "defaultMessage": "!!!Delete", "end": { "column": 3, - "line": 52 + "line": 54 }, "file": "src/lib/Menu.js", "id": "menu.edit.delete", "start": { "column": 10, - "line": 49 + "line": 51 } }, { "defaultMessage": "!!!Select All", "end": { "column": 3, - "line": 56 + "line": 58 }, "file": "src/lib/Menu.js", "id": "menu.edit.selectAll", "start": { "column": 13, - "line": 53 + "line": 55 } }, { "defaultMessage": "!!!Find in Page", "end": { "column": 3, - "line": 60 + "line": 62 }, "file": "src/lib/Menu.js", "id": "menu.edit.findInPage", "start": { "column": 14, - "line": 57 + "line": 59 } }, { "defaultMessage": "!!!Speech", "end": { "column": 3, - "line": 64 + "line": 66 }, "file": "src/lib/Menu.js", "id": "menu.edit.speech", "start": { "column": 10, - "line": 61 + "line": 63 } }, { "defaultMessage": "!!!Start Speaking", "end": { "column": 3, - "line": 68 + "line": 70 }, "file": "src/lib/Menu.js", "id": "menu.edit.startSpeaking", "start": { "column": 17, - "line": 65 + "line": 67 } }, { "defaultMessage": "!!!Stop Speaking", "end": { "column": 3, - "line": 72 + "line": 74 }, "file": "src/lib/Menu.js", "id": "menu.edit.stopSpeaking", "start": { "column": 16, - "line": 69 + "line": 71 } }, { "defaultMessage": "!!!Start Dictation", "end": { "column": 3, - "line": 76 + "line": 78 }, "file": "src/lib/Menu.js", "id": "menu.edit.startDictation", "start": { "column": 18, - "line": 73 + "line": 75 } }, { "defaultMessage": "!!!Emoji & Symbols", "end": { "column": 3, - "line": 80 + "line": 82 }, "file": "src/lib/Menu.js", "id": "menu.edit.emojiSymbols", "start": { "column": 16, - "line": 77 + "line": 79 } }, { "defaultMessage": "!!!Open Quick Switch", "end": { "column": 3, - "line": 84 + "line": 86 }, "file": "src/lib/Menu.js", "id": "menu.view.openQuickSwitch", "start": { "column": 19, - "line": 81 + "line": 83 } }, { "defaultMessage": "!!!Back", "end": { "column": 3, - "line": 88 + "line": 90 }, "file": "src/lib/Menu.js", "id": "menu.view.back", "start": { "column": 8, - "line": 85 + "line": 87 } }, { "defaultMessage": "!!!Forward", "end": { "column": 3, - "line": 92 + "line": 94 }, "file": "src/lib/Menu.js", "id": "menu.view.forward", "start": { "column": 11, - "line": 89 + "line": 91 } }, { "defaultMessage": "!!!Actual Size", "end": { "column": 3, - "line": 96 + "line": 98 }, "file": "src/lib/Menu.js", "id": "menu.view.resetZoom", "start": { "column": 13, - "line": 93 + "line": 95 } }, { "defaultMessage": "!!!Zoom In", "end": { "column": 3, - "line": 100 + "line": 102 }, "file": "src/lib/Menu.js", "id": "menu.view.zoomIn", "start": { "column": 10, - "line": 97 + "line": 99 } }, { "defaultMessage": "!!!Zoom Out", "end": { "column": 3, - "line": 104 + "line": 106 }, "file": "src/lib/Menu.js", "id": "menu.view.zoomOut", "start": { "column": 11, - "line": 101 + "line": 103 } }, { "defaultMessage": "!!!Enter Full Screen", "end": { "column": 3, - "line": 108 + "line": 110 }, "file": "src/lib/Menu.js", "id": "menu.view.enterFullScreen", "start": { "column": 19, - "line": 105 + "line": 107 } }, { "defaultMessage": "!!!Exit Full Screen", "end": { "column": 3, - "line": 112 + "line": 114 }, "file": "src/lib/Menu.js", "id": "menu.view.exitFullScreen", "start": { "column": 18, - "line": 109 + "line": 111 } }, { "defaultMessage": "!!!Toggle Full Screen", "end": { "column": 3, - "line": 116 + "line": 118 }, "file": "src/lib/Menu.js", "id": "menu.view.toggleFullScreen", "start": { "column": 20, - "line": 113 + "line": 115 } }, { "defaultMessage": "!!!Toggle Dark Mode", "end": { "column": 3, - "line": 120 + "line": 122 }, "file": "src/lib/Menu.js", "id": "menu.view.toggleDarkMode", "start": { "column": 18, - "line": 117 + "line": 119 } }, { "defaultMessage": "!!!Toggle Developer Tools", "end": { "column": 3, - "line": 124 + "line": 126 }, "file": "src/lib/Menu.js", "id": "menu.view.toggleDevTools", "start": { "column": 18, - "line": 121 + "line": 123 } }, { "defaultMessage": "!!!Toggle Todos Developer Tools", "end": { "column": 3, - "line": 128 + "line": 130 }, "file": "src/lib/Menu.js", "id": "menu.view.toggleTodosDevTools", "start": { "column": 23, - "line": 125 + "line": 127 } }, { "defaultMessage": "!!!Toggle Service Developer Tools", "end": { "column": 3, - "line": 132 + "line": 134 }, "file": "src/lib/Menu.js", "id": "menu.view.toggleServiceDevTools", "start": { "column": 25, - "line": 129 + "line": 131 } }, { "defaultMessage": "!!!Reload Service", "end": { "column": 3, - "line": 136 + "line": 138 }, "file": "src/lib/Menu.js", "id": "menu.view.reloadService", "start": { "column": 17, - "line": 133 + "line": 135 } }, { "defaultMessage": "!!!Reload Ferdi", "end": { "column": 3, - "line": 140 + "line": 142 }, "file": "src/lib/Menu.js", "id": "menu.view.reloadFranz", "start": { "column": 15, - "line": 137 + "line": 139 } }, { "defaultMessage": "!!!Lock Ferdi", "end": { "column": 3, - "line": 144 + "line": 146 }, "file": "src/lib/Menu.js", "id": "menu.view.lockFerdi", "start": { "column": 13, - "line": 141 + "line": 143 } }, { "defaultMessage": "!!!Reload ToDos", "end": { "column": 3, - "line": 148 + "line": 150 }, "file": "src/lib/Menu.js", "id": "menu.view.reloadTodos", "start": { "column": 15, - "line": 145 + "line": 147 } }, { "defaultMessage": "!!!Minimize", "end": { "column": 3, - "line": 152 + "line": 154 }, "file": "src/lib/Menu.js", "id": "menu.window.minimize", "start": { "column": 12, - "line": 149 + "line": 151 } }, { "defaultMessage": "!!!Close", "end": { "column": 3, - "line": 156 + "line": 158 }, "file": "src/lib/Menu.js", "id": "menu.window.close", "start": { "column": 9, - "line": 153 + "line": 155 } }, { "defaultMessage": "!!!Learn More", "end": { "column": 3, - "line": 160 + "line": 162 }, "file": "src/lib/Menu.js", "id": "menu.help.learnMore", "start": { "column": 13, - "line": 157 + "line": 159 } }, { "defaultMessage": "!!!Changelog", "end": { "column": 3, - "line": 164 + "line": 166 }, "file": "src/lib/Menu.js", "id": "menu.help.changelog", "start": { "column": 13, - "line": 161 + "line": 163 } }, { "defaultMessage": "!!!Support", "end": { "column": 3, - "line": 168 + "line": 170 }, "file": "src/lib/Menu.js", "id": "menu.help.support", "start": { "column": 11, - "line": 165 + "line": 167 } }, { "defaultMessage": "!!!Copy Debug Information", "end": { "column": 3, - "line": 172 + "line": 174 }, "file": "src/lib/Menu.js", "id": "menu.help.debugInfo", "start": { "column": 13, - "line": 169 + "line": 171 } }, { "defaultMessage": "!!!Publish Debug Information", "end": { "column": 3, - "line": 176 + "line": 178 }, "file": "src/lib/Menu.js", "id": "menu.help.publishDebugInfo", "start": { "column": 20, - "line": 173 + "line": 175 } }, { "defaultMessage": "!!!Ferdi Debug Information", "end": { "column": 3, - "line": 180 + "line": 182 }, "file": "src/lib/Menu.js", "id": "menu.help.debugInfoCopiedHeadline", "start": { "column": 27, - "line": 177 + "line": 179 } }, { "defaultMessage": "!!!Your Debug Information has been copied to your clipboard.", "end": { "column": 3, - "line": 184 + "line": 186 }, "file": "src/lib/Menu.js", "id": "menu.help.debugInfoCopiedBody", "start": { "column": 23, - "line": 181 + "line": 183 } }, { "defaultMessage": "!!!Unlock with Touch ID", "end": { "column": 3, - "line": 188 + "line": 190 }, "file": "src/lib/Menu.js", "id": "locked.touchId", "start": { "column": 11, - "line": 185 + "line": 187 } }, { "defaultMessage": "!!!unlock via Touch ID", "end": { "column": 3, - "line": 192 + "line": 194 }, "file": "src/lib/Menu.js", "id": "locked.touchIdPrompt", "start": { "column": 17, - "line": 189 + "line": 191 } }, { "defaultMessage": "!!!Terms of Service", "end": { "column": 3, - "line": 196 + "line": 198 }, "file": "src/lib/Menu.js", "id": "menu.help.tos", "start": { "column": 7, - "line": 193 + "line": 195 } }, { "defaultMessage": "!!!Privacy Statement", "end": { "column": 3, - "line": 200 + "line": 202 }, "file": "src/lib/Menu.js", "id": "menu.help.privacy", "start": { "column": 11, - "line": 197 + "line": 199 } }, { "defaultMessage": "!!!File", "end": { "column": 3, - "line": 204 + "line": 206 }, "file": "src/lib/Menu.js", "id": "menu.file", "start": { "column": 8, - "line": 201 + "line": 203 } }, { "defaultMessage": "!!!View", "end": { "column": 3, - "line": 208 + "line": 210 }, "file": "src/lib/Menu.js", "id": "menu.view", "start": { "column": 8, - "line": 205 + "line": 207 } }, { "defaultMessage": "!!!Services", "end": { "column": 3, - "line": 212 + "line": 214 }, "file": "src/lib/Menu.js", "id": "menu.services", "start": { "column": 12, - "line": 209 + "line": 211 } }, { "defaultMessage": "!!!Window", "end": { "column": 3, - "line": 216 + "line": 218 }, "file": "src/lib/Menu.js", "id": "menu.window", "start": { "column": 10, - "line": 213 + "line": 215 } }, { "defaultMessage": "!!!Help", "end": { "column": 3, - "line": 220 + "line": 222 }, "file": "src/lib/Menu.js", "id": "menu.help", "start": { "column": 8, - "line": 217 + "line": 219 } }, { "defaultMessage": "!!!About Ferdi", "end": { "column": 3, - "line": 224 + "line": 226 }, "file": "src/lib/Menu.js", "id": "menu.app.about", "start": { "column": 9, - "line": 221 + "line": 223 } }, { "defaultMessage": "!!!What's new?", "end": { "column": 3, - "line": 228 + "line": 230 }, "file": "src/lib/Menu.js", "id": "menu.app.announcement", "start": { "column": 16, - "line": 225 + "line": 227 } }, { "defaultMessage": "!!!Settings", "end": { "column": 3, - "line": 232 + "line": 234 }, "file": "src/lib/Menu.js", "id": "menu.app.settings", "start": { "column": 12, - "line": 229 + "line": 231 } }, { "defaultMessage": "!!!Check for updates", "end": { "column": 3, - "line": 236 + "line": 238 }, "file": "src/lib/Menu.js", "id": "menu.app.checkForUpdates", "start": { "column": 19, - "line": 233 + "line": 235 } }, { "defaultMessage": "!!!Hide", "end": { "column": 3, - "line": 240 + "line": 242 }, "file": "src/lib/Menu.js", "id": "menu.app.hide", "start": { "column": 8, - "line": 237 + "line": 239 } }, { "defaultMessage": "!!!Hide Others", "end": { "column": 3, - "line": 244 + "line": 246 }, "file": "src/lib/Menu.js", "id": "menu.app.hideOthers", "start": { "column": 14, - "line": 241 + "line": 243 } }, { "defaultMessage": "!!!Unhide", "end": { "column": 3, - "line": 248 + "line": 250 }, "file": "src/lib/Menu.js", "id": "menu.app.unhide", "start": { "column": 10, - "line": 245 + "line": 247 } }, { "defaultMessage": "!!!Auto-hide menu bar", "end": { "column": 3, - "line": 252 + "line": 254 }, "file": "src/lib/Menu.js", "id": "menu.app.autohideMenuBar", "start": { "column": 19, - "line": 249 + "line": 251 } }, { "defaultMessage": "!!!Quit", "end": { "column": 3, - "line": 256 + "line": 258 }, "file": "src/lib/Menu.js", "id": "menu.app.quit", "start": { "column": 8, - "line": 253 + "line": 255 } }, { "defaultMessage": "!!!Add New Service...", "end": { "column": 3, - "line": 260 + "line": 262 }, "file": "src/lib/Menu.js", "id": "menu.services.addNewService", "start": { "column": 17, - "line": 257 + "line": 259 } }, { "defaultMessage": "!!!Add New Workspace...", "end": { "column": 3, - "line": 264 + "line": 266 }, "file": "src/lib/Menu.js", "id": "menu.workspaces.addNewWorkspace", "start": { "column": 19, - "line": 261 + "line": 263 } }, { "defaultMessage": "!!!Open workspace drawer", "end": { "column": 3, - "line": 268 + "line": 270 }, "file": "src/lib/Menu.js", "id": "menu.workspaces.openWorkspaceDrawer", "start": { "column": 23, - "line": 265 + "line": 267 } }, { "defaultMessage": "!!!Close workspace drawer", "end": { "column": 3, - "line": 272 + "line": 274 }, "file": "src/lib/Menu.js", "id": "menu.workspaces.closeWorkspaceDrawer", "start": { "column": 24, - "line": 269 + "line": 271 } }, { "defaultMessage": "!!!Activate next service...", "end": { "column": 3, - "line": 276 + "line": 278 }, "file": "src/lib/Menu.js", "id": "menu.services.setNextServiceActive", "start": { "column": 23, - "line": 273 + "line": 275 } }, { "defaultMessage": "!!!Activate previous service...", "end": { "column": 3, - "line": 280 + "line": 282 }, "file": "src/lib/Menu.js", "id": "menu.services.activatePreviousService", "start": { "column": 27, - "line": 277 + "line": 279 } }, { "defaultMessage": "!!!Disable notifications & audio", "end": { "column": 3, - "line": 284 + "line": 286 }, "file": "src/lib/Menu.js", "id": "sidebar.muteApp", "start": { "column": 11, - "line": 281 + "line": 283 } }, { "defaultMessage": "!!!Enable notifications & audio", "end": { "column": 3, - "line": 288 + "line": 290 }, "file": "src/lib/Menu.js", "id": "sidebar.unmuteApp", "start": { "column": 13, - "line": 285 + "line": 287 } }, { "defaultMessage": "!!!Workspaces", "end": { "column": 3, - "line": 292 + "line": 294 }, "file": "src/lib/Menu.js", "id": "menu.workspaces", "start": { "column": 14, - "line": 289 + "line": 291 } }, { "defaultMessage": "!!!Default", "end": { "column": 3, - "line": 296 + "line": 298 }, "file": "src/lib/Menu.js", "id": "menu.workspaces.defaultWorkspace", "start": { "column": 20, - "line": 293 + "line": 295 } }, { "defaultMessage": "!!!Todos", "end": { "column": 3, - "line": 300 + "line": 302 }, "file": "src/lib/Menu.js", "id": "menu.todos", "start": { "column": 9, - "line": 297 + "line": 299 } }, { "defaultMessage": "!!!Open Todos drawer", "end": { "column": 3, - "line": 304 + "line": 306 }, "file": "src/lib/Menu.js", "id": "menu.Todoss.openTodosDrawer", "start": { "column": 19, - "line": 301 + "line": 303 } }, { "defaultMessage": "!!!Close Todos drawer", "end": { "column": 3, - "line": 308 + "line": 310 }, "file": "src/lib/Menu.js", "id": "menu.Todoss.closeTodosDrawer", "start": { "column": 20, - "line": 305 + "line": 307 } }, { "defaultMessage": "!!!Enable Todos", "end": { "column": 3, - "line": 312 + "line": 314 }, "file": "src/lib/Menu.js", "id": "menu.todos.enableTodos", "start": { "column": 15, - "line": 309 + "line": 311 } }, { "defaultMessage": "!!!Home", "end": { "column": 3, - "line": 316 + "line": 318 }, "file": "src/lib/Menu.js", "id": "menu.services.goHome", "start": { "column": 17, - "line": 313 + "line": 315 } } ], diff --git a/src/index.js b/src/index.js index ab4187e68..2586d7799 100644 --- a/src/index.js +++ b/src/index.js @@ -22,6 +22,7 @@ import { } from './config'; import { + isDevMode, isMac, isWindows, isLinux, @@ -40,7 +41,6 @@ if (process.env.FERDI_APPDATA_DIR != null) { app.setPath('userData', path.join(app.getPath('appData'), app.name)); } -const isDevMode = !app.isPackaged; if (isDevMode) { app.setPath('userData', path.join(app.getPath('appData'), `${app.name}Dev`)); } -- cgit v1.2.3-54-g00ecf