UNPKG

webhook-receive

Version:

Pluggable webhook receiver used to trigger selected deployment script

80 lines (66 loc) 2.44 kB
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(); }); }); } }