-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathbuild-tools.js
135 lines (129 loc) · 3.82 KB
/
build-tools.js
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
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
const packager = require("electron-packager");
const installerRedHat = require("electron-installer-redhat");
const fs = require("fs").promises;
const fse = require("fs-extra");
const path = require("path");
/**
* builds a desktop version of the game, but does not package it as a standalone
* application
* @param{string} scoreServerScheme scheme for custom score server, e.g. "https"
* @param{string} scoreServerDomain domain for custom score server, e.g. "example.com"
* @return{Promise<void>}
*/
const buildElectron = (
scoreServerScheme = undefined,
scoreServerDomain = undefined
) => {
console.log("Building Electron version...");
return new Promise(resolve => {
buildProd(scoreServerScheme, scoreServerDomain)
.then(() =>
fse.copy(
path.join("electron-files", "index.html"),
path.join("dist", "index.html")
)
)
.then(() =>
fse.copy(
path.join("electron-files", "style.css"),
path.join("dist", "style.css")
)
)
.then(() =>
fse.copy(
path.join("electron-files", "enable-cookies.js"),
path.join("dist", "enable-cookies.js")
)
)
.then(() => {
console.log("Electron version created at dist");
resolve();
})
.catch(reason => {
console.error("Error encountered in buildElectron:");
console.error(reason);
});
});
};
/**
* builds a desktop version of the game, and packages it as an executable
* for various platforms
* @param{string} scoreServerScheme scheme for custom score server, e.g. "https"
* @param{string} scoreServerDomain domain for custom score server, e.g. "example.com"
* @return{Promise<void>}
*/
const packageDesktop = (
scoreServerScheme = undefined,
scoreServerDomain = undefined
) => {
console.log("Packaging as Electron app bundles...");
return new Promise(resolve => {
buildElectron(scoreServerScheme, scoreServerDomain)
.then(() =>
packager({
dir: ".",
name: "afterlight-caves",
out: "release-builds",
overwrite: true,
platform: "all",
arch: "x64",
icon: path.join("static", "images", "logo"),
prune: true
})
)
.then(appPaths => {
console.log(`Electron app bundles created at:\n${appPaths.join("\n")}`);
resolve();
})
.catch(reason => {
console.error("Error encountered in buildElectron:");
console.error(reason);
});
});
};
/**
* builds a desktop version of the game, and packages it as an RPM file
* @param{any} options options for electron-installer-redhat
* @param{string} scoreServerScheme scheme for custom score server, e.g. "https"
* @param{string} scoreServerDomain domain for custom score server, e.g. "example.com"
* @return{Promise<void>}
*/
const packageRpm = (
options,
scoreServerScheme = undefined,
scoreServerDomain = undefined
) => {
console.log("Packaging as RPM file...");
return new Promise(resolve => {
packageDesktop(scoreServerScheme, scoreServerDomain)
.then(() => installerRedHat(options))
.then(() => {
console.error("RPM file created at release-builds");
resolve()
})
.catch(reason => {
console.error("Error encountered in packageRpm");
console.error(reason);
});
});
};
/**
* removes a list of directories
* @param{string[]} toRemove directories to remove
*/
const cleanDirs = toRemove => {
console.log(
"Removing the following directories: " +
toRemove.reduce((prev, cur) => `${prev}, ${cur}`)
);
// this fold removes each directory in a row
toRemove.reduce((prev, cur) => {
return prev.then(() => fs.rmdir(cur, { recursive: true }));
}, Promise.resolve());
};
module.exports = {
buildElectron,
cleanDirs,
packageDesktop,
packageRpm
};