webhook-receive
Version:
Pluggable webhook receiver used to trigger selected deployment script
80 lines (66 loc) • 2.44 kB
JavaScript
var _ = require("lodash");
var request = require("request");
var scripts = require([__dirname, "..", "scripts"].join("/"));
var logger = require([__dirname, "..", "lib", "logger"].join("/"));
module.exports = {
dockerhub: function(req, res, next){
logger.info(["Triggered Dockerhub webhook to execute", req.query.script, "script"].join(" "));
logger.debug(["Received webhook POST body:", JSON.stringify(req.body)].join(" "));
var send_result = function(json, fn){
var options = {
url: req.body.callback_url,
method: "POST",
json: _.defaults(json, {
context: "containership/webhook-recieve",
target_url: ""
}),
timeout: 5000
}
request(options, fn);
}
var configuration = {
image: req.body.repository.repo_name,
tag: "latest"
}
_.each(res.stash.required_query_params, function(required_param){
configuration[required_param] = req.query[required_param];
});
scripts[req.query.script].execute(configuration, function(err){
if(err){
var state = "failure";
var description = err.message;
}
else{
var state = "success";
var description = "Build successful!";
}
logger.verbose(["Script execution was a", state].join(" "));
if(err)
logger.debug(["Script returned error:", err.message].join(" "));
send_result({
state: state,
desription: description
}, function(err, response){
if(err){
res.stash = {
body: {
error: err.message
},
code: 400
}
}
else if(response.statusCode != 200){
res.stash = {
body: {
error: ["Webhook validation returned", response.statusCode].join(" ")
},
code: 400
}
}
else
res.stash.code = 200;
return next();
});
});
}
}