-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathdeploy-util.js
90 lines (78 loc) · 2.26 KB
/
deploy-util.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
const minio = require('minio');
const os = require('os');
const path = require('path');
const process = require('process');
const rimraf = require('rimraf');
const mc = new minio.Client({
endPoint: 'store.easymun.com',
useSSL: true,
accessKey: process.env.MINIO_ACCESS_KEY,
secretKey: process.env.MINIO_SECRET_KEY,
});
function upload(artifacts) {
return artifacts.map(([name, dir, meta]) => new Promise((resolve, reject) => {
console.log(name);
console.log(dir);
console.log(meta);
mc.fPutObject('console-lite', name, dir, meta,
(err, etag) => err ? reject(err) : resolve([name, dir, etag]));
}));
}
function getAppDir(targetdir) {
if(os.platform() === 'darwin')
return path.join(targetdir, 'Console Lite.app', 'Contents', 'Resources', 'app');
else
return path.join(targetdir, 'resources', 'app');
}
function trim(targetdir) {
const fontbase = path.join(getAppDir(targetdir), 'fonts');
rimraf.sync(path.join(fontbase, 'NotoSansCJKsc-*'));
rimraf.sync(path.join(fontbase, 'Roboto-*'));
}
function _taskToPromise(task) {
const inst = task();
if(!inst) return Promise.resolve();
else if(inst.subscribe) return new Promise((resolve, reject) => {
inst.subscribe({
next: data => console.log(data),
error: reject,
complete: resolve,
});
});
else if(inst.then) return inst;
else return Promise.resolve(); // Sync method
}
function runTasks(tasks, concurrent) {
if(concurrent) {
console.log('Running concurrently:');
for(const { title } of tasks) console.log(` - ${title}`);
// TODO: support skip
return Promise.all(tasks.map(({ title, task }) => _taskToPromise(task).then(() => {
console.log(`Completed: ${title}`);
})));
} else
return tasks.reduce((prev, { title, task, skip }) => prev.then(() => {
if(skip && skip()) return console.log(`Skipped: ${title}`);
console.log(`Running: ${title}`);
return _taskToPromise(task).then(() => {
console.log(`Completed: ${title}`);
});
}), Promise.resolve());
}
class Ping {
constructor() {
this.intervalId = setInterval(() => {
console.log('PING');
}, 1000 * 60);
}
stop() {
clearInterval(this.intervalId);
}
}
module.exports = {
upload,
trim,
runTasks,
Ping,
getAppDir,
};