Skip to content
17 changes: 11 additions & 6 deletions build.js
Original file line number Diff line number Diff line change
Expand Up @@ -26,9 +26,13 @@ var Build = function (req, res, payload, build_manager, id) {
};

// Load and check payload
self.parser = req.headers['travis-repo-slug'] ?
new parser.Travis(payload, req.headers, self.build_manager.config) :
new parser.GitHub(payload, req.headers, self.build_manager.config);
if (req.headers['travis-repo-slug']) {
self.parser = new parser.Travis(payload, req.headers, self.build_manager.config);
} else if (req.headers['x-github-delivery']) {
self.parser = new parser.GitHub(payload, req.headers, self.build_manager.config);
} else {
self.parser = new parser.GitLab(payload, req.headers, self.build_manager.config);
}

self.ui.payload = self.parser.parse_body();
};
Expand Down Expand Up @@ -125,9 +129,10 @@ Build.prototype.getter = function (repo, branch, cb) {

var command = self.build_manager.config.getter.format({
repo_dir: self.build_manager.config.repo_dir,
output: self.build_manager.config.processing,
repo: repo,
branch: branch
output: self.build_manager.config.processing,
repo: repo,
branch: branch,
url: self.ui.data.get_url
});

self.run_command(command, cb);
Expand Down
41 changes: 41 additions & 0 deletions parser.js
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,46 @@ var GitHub = (function () {
return gh_parser;
})();

var GitLab = (function () {
var gl_parser = function () { Parser.apply(this, arguments); };
util.inherits(gl_parser, Parser);

gl_parser.prototype.parse_body = function () {
try { return (this.payload = JSON.parse(this.body)); }
catch (e) { return undefined; }
};

gl_parser.prototype.verify_signature = function () {
return true;
};

gl_parser.prototype.extract = function () {
if (!(this.payload.repository &&
this.payload.repository.git_ssh_url &&
this.payload.repository.homepage &&
this.payload.ref &&
this.payload.total_commits_count &&
this.payload.commits)) {
return undefined;
}

var slug = this.payload.repository.git_ssh_url.split(':')[1];
if (slug.endsWith('.git')) {
slug = slug.slice(0,-4);
}

return (this.data = {
slug: slug,
branch: this.payload.ref.replace(/^refs\/heads\//, ''),
url: this.payload.repository.homepage,
get_url: this.payload.repository.git_ssh_url.split(':')[0],
commit: this.payload.total_commits_count > 0 ? this.payload.commits.slice(-1).message : undefined
});
};

return gl_parser;
})();

var Travis = (function () {
var travis_parser = function () { Parser.apply(this, arguments); };
util.inherits(travis_parser, Parser);
Expand Down Expand Up @@ -82,5 +122,6 @@ var Travis = (function () {

module.exports = {
GitHub: GitHub,
GitLab: GitLab,
Travis: Travis
};
3 changes: 3 additions & 0 deletions test/build-manager-tests.js
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,7 @@ test('build_manager.rerun', function (t) {
t.test('rerun successful build (valid payload)', function (st) {
var payload = JSON.stringify({ repository: { full_name: 'repo' }, ref: 'refs/heads/master' });
options.headers['x-hub-signature'] = github_sig(config.github_secret, payload);
options.headers['x-github-delivery'] = 1;

var build_manager = request(payload, function (res, data) {
st.equal(data.msg, 'Build queued', 'correct server response');
Expand Down Expand Up @@ -198,6 +199,7 @@ test('build_manager.data', function (t) {
});

options.headers['x-hub-signature'] = github_sig(config.github_secret, payload);
options.headers['x-github-delivery'] = 1;

var build_manager = request(payload, function (res, data) {
var build = build_manager.builds[data.id];
Expand All @@ -223,6 +225,7 @@ test('build_manager.data', function (t) {
});

options.headers['x-hub-signature'] = github_sig(config.github_secret, payload);
options.headers['x-github-delivery'] = 1;

var build_manager = request(payload, function (res, data) {
var build = build_manager.builds[data.id];
Expand Down
2 changes: 2 additions & 0 deletions test/github.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ var test = require('tape'),


var options = common.options;
options.headers['x-github-delivery'] = 1;

var config = common.config;
var request = common.request;
var gen_sig = common.github_sig;
Expand Down