This repository has been archived by the owner on Apr 15, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 1
/
builder.js
89 lines (78 loc) · 2.23 KB
/
builder.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
var jenkins_url = process.env.JENKINS_URL ||
'http://jenkins.rhub.me';
var jenkins = require('jenkins');
var jenkins_xml = require('../lib/jenkins_xml');
var quote = require('shell-quote').quote;
function builder(job, callback) {
var conn = jenkins(jenkins_url);
add_pkg(conn, job, function(err) {
if (err) { callback(err); return; }
callback(null);
})
}
function add_pkg(conn, job, callback) {
add_jenkins_job(conn, job, function(err) {
if (err) { console.log(err); callback(err); return; }
build_jenkins_job(conn, job, function(err) {
if (err) { console.log(err); callback(err); return; }
callback(null);
})
})
}
function add_jenkins_job(conn, job, callback) {
var job_name = jenkins_job_name(job);
jenkins_xml(job, function(err, job_xml) {
if (err) { callback(err); return; }
conn.job.create(
job_name,
job_xml,
function(err) {
if (err) { console.log(err); callback(err); return; }
callback(null);
}
)
})
}
function build_jenkins_job(conn, job, callback) {
var job_name = jenkins_job_name(job);
var env_vars = flatten_env_vars(job.envVars, job.ostype !== "Linux");
var parameters = {
'package': job.package,
'filename': job.filename,
'url': job.url,
'image': job.image || "",
'checkArgs': job.checkArgs || "",
'envVars': env_vars || "",
'rversion': job.rversion || "r-release",
'startPingUrl': job.builder + '/build/in-progress/' + job_name,
'endPingUrl': job.builder + '/build',
'build': (job.options.build || false) + '',
'pkgname': job.pkg + ''
};
conn.job.build(
job_name,
{ 'parameters': parameters },
function(err) {
if (err) { console.log(err); callback(err); return; }
callback(null)
}
)
}
function flatten_env_vars(x, should_quote) {
if (x === null || x === undefined || x === "") return(null);
return Object.keys(x)
.map(function(key) {
var k = String(key);
var v = String(x[key]);
if (should_quote) {
return quote([k]) + "=" + quote([v]);
} else {
return k + "=" + v;
}
})
.join("\n");
}
function jenkins_job_name(job) {
return job.buildId;
}
module.exports = builder;