-
Notifications
You must be signed in to change notification settings - Fork 0
/
sicis.js
149 lines (117 loc) · 4.13 KB
/
sicis.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
136
137
138
139
140
141
142
143
144
145
146
147
148
#!/usr/bin/env node
var _httpServer = require('./lib/server'),
_opener = require('opener'),
_path = require('path'),
_log = require('./lib/log'),
_repoWatcher = require('./lib/repoWatcher');
// Add .format method to strings
require('./lib/string-helpers')
var _sicisRootPath = _path.dirname(process.argv[1]);
var _cleanupAndExit = function() {
_repoWatcher.stopBuild(function() {
_log.info('Build stopped successfully');
process.exit();
});
}
var _exitAllOnCtrlC = function() {
if (process.platform === 'win32') {
require('readline').createInterface({
input: process.stdin,
output: process.stdout
}).on('SIGINT', function () {
process.emit('SIGINT');
});
}
process.on('SIGINT', function() {
_log.error('CTRL+C detected. Exitting...');
_cleanupAndExit();
});
process.on('uncaughtException', function(err) {
_log.error('Uncaught Exception! Exitting...');
_log.error(err.stack);
_cleanupAndExit();
});
}
var _startApp = function() {
_exitAllOnCtrlC()
// Now that the server is started, start monitoring the repo
_repoWatcher.start(_options.buildCommand, _options.autoBuild, _options.maxConcurrentBuilds, _options.pollInterval, _sicisRootPath, function() {
_startServer();
});
}
var _startServer = function() {
var serverOptions = {
port: _options.desiredPort,
repoPath: _options.repoPath,
sicisRootPath: _sicisRootPath,
title: _options.title,
autoBuild: _options.autoBuild,
authFilePath: _options.authFilePath,
logPath: _options.logPath,
currentLogPath: _argv.currentLogPath,
previousLogPath: _argv.previousLogPath,
};
_httpServer.start(serverOptions, function () {
_log.info('Starting up sicis server for repo at "{0}"', _options.repoPath)
_log.info('Web Interface at http://localhost:{0}', serverOptions.port)
_log.info('Hit CTRL-C to stop the server');
if (_options.openBrowser) {
_opener(
'http://localhost:{0}/'.format(serverOptions.port),
{ command: null }
);
}
});
}
var _argv = require('yargs')
.usage('Usage: sicis [command] [options]')
.example('sicis "RunBuild.bat -foo" --port 9000')
.command('command', 'Build command to trigger every time the repository is modified')
.demand(1)
.describe('d', 'Directory to use for this sicis instance. Note: Must be the root of a git repository. Default: current directory')
.alias('d', 'dir')
.describe('p', 'Port to use for web interface. Default: 8080')
.alias('p', 'port')
.describe('m', 'If given, do not automatically trigger builds. Wait for explicit trigger through web interface')
.alias('m', 'manual')
.describe('b', 'If given, do not automatically open browser after server starts')
.alias('b', 'browser')
.describe('t', 'Title to use for this build on the web interface')
.alias('t', 'title')
.describe('x', 'Max number of concurrent builds to allow')
.alias('x', 'maxConcurrentBuilds')
.describe('i', 'The amount of seconds to wait before polling the git repository again. Default: 60')
.alias('i', 'pollInterval')
.describe('a', 'Path to username / password file generated from the http-auth/htpasswd package')
.alias('a', 'authFile')
.describe('l', 'Path to the current detailed log for the given build process')
.alias('l', 'currentLogPath')
.describe('g', 'Path to the previous detailed log for the given build process')
.alias('g', 'previousLogPath')
.argv;
if (!_argv.p) {
_argv.p = 8080;
}
if (!_argv.i) {
_argv.i = 60;
}
if (!_argv.d) {
_argv.d = _path.resolve('./');
}
if (!_argv.t) {
_argv.t = "Build Server";
}
_options = {
buildCommand: _argv._[0],
repoPath: _argv.d,
desiredPort: _argv.p,
openBrowser: !_argv.b,
title: _argv.t,
autoBuild: !_argv.m,
maxConcurrentBuilds: _argv.x,
pollInterval: _argv.i,
authFilePath: _argv.a,
currentLogPath: _argv.l,
previousLogPath: _argv.g,
};
_startApp()