-
Notifications
You must be signed in to change notification settings - Fork 0
/
install.ts
82 lines (72 loc) · 2.31 KB
/
install.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
import * as process from 'process';
import {spawn, spawnSync, SpawnSyncOptionsWithStringEncoding, SpawnSyncReturns} from 'child_process';
/**
* Go to frontend directory (necessary if this script is included through require)
*/
changeToDirectory(__dirname);
// declaring utf8 makes sure a string is returned (as opposed to a buffer) from spawnSync
const spawnSyncOptions: SpawnSyncOptionsWithStringEncoding = {
encoding: 'utf8'
};
/**
* Some few adaptions are necessary for making installation work on windows
*/
const isWin = /^win/.test(process.platform);
const spawnSyncCommand = (cmdName): string => {
return isWin ? `${cmdName}.cmd` : cmdName;
};
installFrontend();
function installFrontend() {
installGitModules();
installMainModule();
}
/**
* Setup git submodules
*/
function installGitModules () {
const initSubmodules = spawnSync('git', ['submodule', 'init'], spawnSyncOptions);
handleCommandResult(initSubmodules, {exitOnError: false});
const updateSubmodules = spawnSync('git', ['submodule', 'update'], spawnSyncOptions);
handleCommandResult(updateSubmodules, {exitOnError: false}); // git writes to stderr even though everything is ok, so noexit
}
/**
* Install main module
*/
function installMainModule() {
const startingDirectory = process.cwd();
changeToDirectory(startingDirectory);
changeToDirectory('main');
console.log('Installing app. This may take a while...');
const installModuleDependencies = spawnSync(spawnSyncCommand('npm'), ['install'], spawnSyncOptions);
handleCommandResult(installModuleDependencies, {exitOnError: false});
}
/**
* Helper functions
*/
function handleCommandResult(result: SpawnSyncReturns<string>, options?: HandleCommandResultOptions) {
if (result.error) {
console.error('ERROR IN PROCESS:', result.error);
if (options.exitOnError) {
process.exit()
}
} else if (result.stderr !== undefined && result.stderr !== "") {
console.error(result.stderr);
if (options.exitOnError) {
process.exit()
}
} else {
console.log(result.stdout);
}
}
function changeToDirectory (dir) {
try {
console.log(`Changing to directory ${dir}`);
process.chdir(dir);
} catch (err) {
console.log(`Could not change to directory ${dir}: ${err}`);
process.exit();
}
}
interface HandleCommandResultOptions {
exitOnError: boolean
}