/
build-cli.ts
106 lines (86 loc) · 3.71 KB
/
build-cli.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
/*
* Wire
* Copyright (C) 2019 Wire Swiss GmbH
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see http://www.gnu.org/licenses/.
*
*/
import {LogFactory} from '@wireapp/commons';
import commander from 'commander';
import path from 'path';
import {logEntries} from '../bin-utils';
import {buildLinuxConfig, buildLinuxWrapper} from './lib/build-linux';
import {buildMacOSConfig, buildMacOSWrapper} from './lib/build-macos';
import {buildWindowsConfig, buildWindowsWrapper} from './lib/build-windows';
import {buildWindowsInstaller, buildWindowsInstallerConfig} from './lib/build-windows-installer';
interface CommanderData {
envFile: string;
manualSign?: boolean;
wireJson: string;
packageJson: string;
}
const toolName = path.basename(__filename).replace('.ts', '');
const logger = LogFactory.getLogger(toolName, {forceEnable: true, namespace: '@wireapp/build-tools'});
const appSource = path.join(__dirname, '../../');
commander
.name(toolName)
.description(
'Build the Wire wrapper for your platform.\n\nValid values for platform are: "windows", "windows-installer", "macos", "linux".',
)
.option('-e, --env-file <path>', 'Specify the env file path', path.join(appSource, '.env.defaults'))
.option(
'-m, --manual-sign',
`Manually sign and package the app (i.e. don't use electron-packager, macOS and Windows only)`,
)
.option('-p, --package-json <path>', 'Specify the package.json path', path.join(appSource, 'package.json'))
.option('-w, --wire-json <path>', 'Specify the wire.json path', path.join(appSource, 'electron/wire.json'))
.arguments('<platform>')
.parse(process.argv);
const platform = (commander.args[0] || '').toLowerCase();
(async () => {
const {envFile, manualSign, wireJson, packageJson}: CommanderData = commander as any;
switch (platform) {
case 'win':
case 'windows': {
const {packagerConfig} = await buildWindowsConfig(wireJson, envFile);
logEntries(packagerConfig, 'packagerConfig', toolName);
return buildWindowsWrapper(packagerConfig, packageJson, wireJson, envFile);
}
case 'windows-installer': {
const {wInstallerOptions} = await buildWindowsInstallerConfig(wireJson, envFile, manualSign);
logEntries(wInstallerOptions, 'wInstallerOptions', toolName);
return buildWindowsInstaller(wireJson, envFile, wInstallerOptions);
}
case 'mac':
case 'macos': {
const {macOSConfig, packagerConfig} = await buildMacOSConfig(wireJson, envFile, manualSign);
logEntries(macOSConfig, 'macOSConfig', toolName);
logEntries(packagerConfig, 'packagerConfig', toolName);
return buildMacOSWrapper(packagerConfig, macOSConfig, packageJson, wireJson, envFile, manualSign);
}
case 'linux': {
const {linuxConfig, builderConfig} = await buildLinuxConfig(wireJson, envFile);
logEntries(linuxConfig, 'linuxConfig', toolName);
logEntries(builderConfig, 'builderConfig', toolName);
return buildLinuxWrapper(builderConfig, linuxConfig, packageJson, wireJson, envFile);
}
default: {
logger.error(`Invalid or no platform specified.`);
return commander.help();
}
}
})().catch(error => {
logger.error(error);
process.exit(1);
});