forked from matthaywardwebdesign/Ship.js
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathship.js
114 lines (89 loc) · 6.39 KB
/
ship.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
var pushover = require('pushover');
var connect = require('connect');
var repos = pushover('/tmp/pushover/repos');
var mkdirp = require('mkdirp');
var sys = require('sys');
var fs = require('fs');
var spawn = require('child_process').spawn;
var exec = require('child_process').exec;
mkdirp('/tmp/pushover/working', function (err){
});
var app = connect();
//app.use(connect.basicAuth("username", "password"));
app.use(function(req, res, next) {
if (req.headers["user-agent"].indexOf("git") != -1){
repos.handle(req, res, next, true);
}
else{
next();
}
});
repos.on('push', function (repo, commit, branch, res) {
var gitclone = spawn('git',['clone','../repos/' + repo],{ cwd: '/tmp/pushover/working/'});
gitclone.stdout.on('data', function(data){logStdOut(data,res)});
gitclone.stderr.on('data', function(data){logStdErr(data,res)});
gitclone.on('close', function (code) {
var gitpull = spawn('git',['pull','../../repos/' + repo],{ cwd: '/tmp/pushover/working/' + repo});
gitpull.stdout.on('data', function(data){logStdOut(data,res)});
gitpull.stderr.on('data', function(data){logStdErr(data,res)});
gitpull.on('close', function (code) {
var dockerbuild = spawn('docker',['build','-t',commit,'./'], { cwd: '/tmp/pushover/working/' + repo });
dockerbuild.stdout.on('data', function(data){logStdOut(data,res)});
dockerbuild.stderr.on('data', function(data){logStdErr(data,res)});
dockerbuild.on('close', function (code) {
dockerstop = spawn('docker',['stop',repo],{cwd : '/'});
dockerstop.stdout.on('data', function(data){logStdOut(data,res)});
dockerstop.stderr.on('data', function(data){logStdErr(data,res)});
dockerstop.on('close', function (code) {
dockerrm = spawn('docker',['rm',repo],{cwd : '/'});
dockerrm.stdout.on('data', function(data){logStdOut(data,res)});
dockerrm.stderr.on('data', function(data){logStdErr(data,res)});
dockerrm.on('close', function (code) {
fs.readFile('/tmp/pushover/working/' + repo + '/ship.config', function (err,data){
if (!err){
var config = JSON.parse(data);
var output = [];
Object.keys(config.ports).forEach(function(key) {
var val = config.ports[key];
output[output.length] = val + ":" + key;
});
var dockerrunargs = [];
dockerrunargs[0] = 'run';
dockerrunargs[1] = '-d';
dockerrunargs[2] = '--name';
dockerrunargs[3] = repo;
var pos = 4;
for (i = 0; i < output.length;i++){
dockerrunargs[pos] = '-p';
pos++;
dockerrunargs[pos] = output[i];
pos++;
}
dockerrunargs[pos] = commit;
var dockerrun = spawn('docker',dockerrunargs,{ cwd: '/'});
dockerrun.stdout.on('data', function(data){logStdOut(data,res)});
dockerrun.stderr.on('data', function(data){logStdErr(data,res)});
dockerrun.on('close', function (code) {
repos.closeStream(res);
});
}
});
});
});
});
});
});
});
function logStdOut(data,res){
console.log('stdout: ' + data);
if (data != ""){
repos.writeMessage("==> " + data,res);
}
}
function logStdErr(data,res){
console.log('stderr: ' + data);
if (data != ""){
repos.writeMessage("==> " + data,res);
}
}
app.listen(7000);