/ webpack_config / buildElectron.js
buildElectron.js
1 'use strict'; 2 const path = require('path'); 3 const fs = require('fs'); 4 const rimraf = require('rimraf'); 5 const builder = require('electron-builder'); 6 const config = require('./config'); 7 8 function shouldBuildOs(os) { 9 const { ELECTRON_OS } = process.env; 10 11 if (ELECTRON_OS === 'JENKINS_LINUX') { 12 return os === 'linux' || os === 'windows'; 13 } else if (ELECTRON_OS === 'JENKINS_MAC') { 14 return os === 'mac'; 15 } else { 16 return !process.env.ELECTRON_OS || process.env.ELECTRON_OS === os; 17 } 18 } 19 20 async function build() { 21 console.log('Beginning Electron build process...'); 22 const jsBuildDir = path.join(config.path.output, 'electron-js'); 23 const electronBuildsDir = path.join(config.path.output, 'electron-builds'); 24 const compression = 'store'; 25 26 console.log('Clearing out old builds...'); 27 rimraf.sync(electronBuildsDir); 28 29 // Builder requires package.json be in the app directory, so copy it in 30 fs.copyFileSync( 31 path.join(config.path.root, 'package.json'), 32 path.join(jsBuildDir, 'package.json') 33 ); 34 35 console.log('Building...'); 36 try { 37 await builder.build({ 38 mac: shouldBuildOs('mac') ? ['zip', 'dmg'] : undefined, 39 win: shouldBuildOs('windows') ? ['nsis'] : undefined, 40 linux: shouldBuildOs('linux') ? ['AppImage'] : undefined, 41 x64: true, 42 ia32: true, 43 config: { 44 appId: 'com.github.mycrypto.mycryptohq', 45 productName: 'MyCrypto', 46 directories: { 47 app: jsBuildDir, 48 output: electronBuildsDir 49 }, 50 mac: { 51 category: 'public.app-category.finance', 52 icon: path.join(config.path.electron, 'icons/icon.icns'), 53 compression 54 }, 55 win: { 56 icon: path.join(config.path.electron, 'icons/icon.ico'), 57 compression 58 }, 59 linux: { 60 category: 'Finance', 61 icon: path.join(config.path.electron, 'icons/icon.png'), 62 compression 63 }, 64 // IMPORTANT: Prevents from auto publishing to GitHub in CI environments 65 publish: null, 66 // IMPORTANT: Prevents extending configs in node_modules 67 extends: null 68 } 69 }); 70 71 console.info(`Electron builds are finished! Available at ${electronBuildsDir}`); 72 } catch(err) { 73 console.error(err); 74 process.exit(1); 75 } 76 } 77 78 build();