/ 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();