-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
121 lines (97 loc) · 2.84 KB
/
index.js
File metadata and controls
121 lines (97 loc) · 2.84 KB
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
const { execFileSync, execSync } = require("child_process");
const http = require("http");
const path = require("path");
const fs = require("fs");
var server = null;
var config_file = path.join(__dirname, "config.json");
var config = [];
function createServer() {
var port = config.port || 9000;
if (server) {
server.close();
}
server = http.createServer((req, res) => {
var data = "";
req.on("data", (chunk) => {
data += chunk;
});
req.on("end", () => {
// console.log("Data: ", data);
res.end("OK");
processHook(data);
});
});
server.listen(port, () => {
console.log(`\n${getDate()} | Hookeploy started as ${port} port`);
});
}
function processHook(hook) {
if (hook.length < 50) {
return console.log(`${getDate()} | Not github hook`);
}
var data = typeof hook == "string" ? JSON.parse(hook) : hook;
var rep_name = data.repository.name;
var rep_folder = config.reps[rep_name] || null;
var timeout = config.deploy_timeout || 900000;
console.log(`\n${getDate()} | Webhook for "${rep_name}" has started!`);
if (!rep_folder) {
return console.log(`${getDate()} | Not config rep for "${rep_name}"`);
}
try {
console.log(`${getDate()} | Git pulling for "${rep_name}"`);
execSync("git pull", {cwd: rep_folder, uid: 0});
execSync("chmod -R 777 " + rep_folder, {cwd: rep_folder, uid: 0});
}
catch(e) {
return console.log(`${getDate()} | Git pull error for "${rep_name}"`);
}
try {
var deploy_path = path.join(rep_folder, config.deploy_name);
var deploy_file = fs.readFileSync(deploy_path, {encoding: "utf8", flag: "r"});
var deploy_config = JSON.parse(deploy_file);
}
catch(e) {
return console.log(`${getDate()} | Deploy config not found for "${rep_name}" rep`);
}
for(var step of deploy_config) {
try {
var step_file = path.join(rep_folder, step);
var log = execFileSync(step_file, {uid: 0, cwd: rep_folder, encoding: "utf8", timeout});
console.log(`${getDate()} | Step "${step}" on "${rep_name}" rep has success running`);
// console.log(`Log for "${rep_name}" rep. Step "${step}"`);
// console.log(log);
}
catch(e) {
return console.log(`${getDate()} | Step "${step}" crash on rep "${rep_name}"`);
}
}
console.log(`${getDate()} | All steps for "${rep_name}" rep completed successfully!`);
}
function loadConfig() {
try {
var file = fs.readFileSync(config_file, {encoding: "utf8", flag: "r"});
config = JSON.parse(file);
console.log(`${getDate()} | Config success loaded`);
}
catch(e) {
config = [];
console.log(`${getDate()} | Config loading error`);
}
}
function getDate() {
return (new Date().toISOString());
}
function watchConfig() {
fs.watch(config_file, (event, file) => {
loadConfig();
});
}
function start() {
loadConfig();
createServer();
watchConfig();
// setTimeout(() => {
// processHook({repository: {name: "hookeploy"}});
// }, 5000);
}
start();