diff --git a/packages/debugger-shell/src/electron/index.flow.js b/packages/debugger-shell/src/electron/index.flow.js index 4dc67035f813..12c6cad55377 100644 --- a/packages/debugger-shell/src/electron/index.flow.js +++ b/packages/debugger-shell/src/electron/index.flow.js @@ -10,9 +10,25 @@ // $FlowFixMe[unclear-type] We have no Flow types for the Electron API. const {app} = require('electron') as any; +const util = require('util'); + +// Handle global command line arguments which don't require a window +// or the single instance lock to be held. +const { + values: {version = false}, +} = util.parseArgs({ + options: {version: {type: 'boolean'}}, + args: process.argv.slice(app.isPackaged ? 1 : 2), + strict: false, +}); +if (version) { + console.log(`${app.getName()} v${app.getVersion()}`); + // Not app.quit() - we want to exit immediately without initialising the graphical subsystem. + app.exit(0); +} const gotTheLock = app.requestSingleInstanceLock({ - argv: process.argv.slice(2), + argv: process.argv.slice(app.isPackaged ? 1 : 2), }); if (!gotTheLock) { diff --git a/scripts/debugger-shell/build-binary.js b/scripts/debugger-shell/build-binary.js index ed98c9269d63..46ba775ed21d 100644 --- a/scripts/debugger-shell/build-binary.js +++ b/scripts/debugger-shell/build-binary.js @@ -44,6 +44,21 @@ async function main() { if (!pkg.main.startsWith('./dist/')) { throw new Error('Package not built yet. Run scripts/build/build.js first.'); } + + const IGNORE_PREFIXES = [ + 'src', + 'dist/node', + 'metainternal/build-mac', + '__tests__', + 'README.md', + ].map( + dirRelativeToPackageRoot => + path.join(PACKAGE_ROOT, dirRelativeToPackageRoot) + path.sep, + ); + const IGNORE_FILES = ['BUCK'].map(fileRelativeToPackageRoot => + path.join(PACKAGE_ROOT, fileRelativeToPackageRoot), + ); + await packager({ dir: PACKAGE_ROOT, icon: path.join(PACKAGE_ROOT, 'src/electron/resources/icon'), @@ -64,6 +79,10 @@ async function main() { OriginalFilename: `${APP_NAME}.exe`, }, overwrite: true, + ignore: [ + ...IGNORE_PREFIXES.map(prefix => new RegExp('^' + escapeRegex(prefix))), + ...IGNORE_FILES.map(file => new RegExp('^' + escapeRegex(file) + '$')), + ], }); } @@ -73,3 +92,7 @@ if (require.main === module) { process.exitCode = 1; }); } + +function escapeRegex(str /*: string */) /*: string */ { + return str.replace(/[-[\]\\/{}()*+?.^$|]/g, '\\$&'); +}